Erro SSL: não foi possível obter o certificado do emissor local

94

Estou tendo problemas para configurar SSL em um servidor Debian 6.0 de 32 bits. Sou relativamente novo em SSL, por favor, tenha paciência comigo. Estou incluindo o máximo de informações que posso.
Nota: O verdadeiro nome de domínio foi alterado para proteger a identidade e integridade do servidor.

Configuração

O servidor está sendo executado usando nginx. Ele é configurado da seguinte forma:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

Eu encadei meu certificado usando o método descrito aqui

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

onde mysite.ca.crtestá o certificado fornecido a mim pela autoridade de assinatura e bundle.crté o certificado CA também enviado a mim pela autoridade de assinatura. O problema é que não comprei o certificado SSL diretamente da GlobalSign, mas sim do meu provedor de hospedagem, Singlehop.

Testando

O certificado é validado corretamente no Safari e Chrome, mas não no Firefox. A pesquisa inicial revelou que pode ser um problema com o CA.

Eu explorei a resposta a uma pergunta semelhante , mas não consegui encontrar uma solução, porque eu realmente não entendo a que propósito cada certificado serve.

Usei o s_client do openssl para testar a conexão e recebi uma saída que parece indicar o mesmo problema da pergunta semelhante . O erro é o seguinte:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

Um detalhe completo da resposta do openssl (com certificados e informações desnecessárias truncadas) pode ser encontrado aqui .

Também vejo o aviso:

No client certificate CA names sent

É possível que seja esse o problema? Como posso garantir que o nginx envie esses nomes de CA?

Tentativas de resolver o problema

Tentei resolver o problema baixando a CA raiz diretamente da GlobalSign, mas recebi o mesmo erro. Atualizei o CA raiz no meu servidor Debian usando o update-ca-certificatescomando, mas nada mudou. Isso provavelmente ocorre porque a CA enviada do meu provedor estava correta, então levou ao certificado sendo encadeado duas vezes, o que não ajuda.

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

Próximos passos

Avise-me se houver algo que eu possa tentar ou se apenas tiver configurado tudo incorretamente.

Jamie Counsell
fonte
10
Seu certificado de domínio é assinado pelo emissor AlphaSSL CA - SHA256 - G2. No entanto, sua cadeia fornece intermediários AlphaSSL CA - G2. Acredito que você precise excluir o certificado intermediário atual ( AlphaSSL CA - G2) e substituí-lo por aquele com impressão digital ae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2). Além disso, você não precisa enviar GlobalSign Root CA. O cliente deve enraizar sua confiança (ou no intermediário).
jww
6
Você poderá testar isso localmente com OpenSSL. Experimente openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. O comando deve ser concluído com um Verify OK (0)ou semelhante. Quando você obtém o Verify OK (0), o servidor está configurado corretamente (para esse problema).
jww
6
Ao baixar esse novo intermediário, você precisará convertê-lo para PEM com openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM.
jww
Lindo. Eu acredito que está funcionando agora. Por algum motivo, pensei ter tentado obter o SHA 256, mas devo ter falhado em convertê-lo corretamente. Agradeço-vos sinceramente.
Jamie Counsell
1
sim, o que se deve procurar são os pares Assunto-Emissor voltando para uma raiz ou CA. OpenSSL os exibe como i:e s:abaixo s_client. Assim que tiver os certificados de que precisa, concate todos eles, exceto a raiz. Por serem concatados, eles precisam estar no formato PEM. O URL foi útil. Está ficando velho tentar ajudar as pessoas que não fornecem informações para que possamos ver isso localmente com s_client. (Se você não forneceu o URL, eu teria votado para fechar).
jww

Respostas:

-1

Se você for um usuário do Linux, atualize o nó para uma versão posterior executando

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

isso deve resolver o seu problema

Collins Koech
fonte