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.crt
está 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-certificates
comando, 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.
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).
openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM
.
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).
AlphaSSL CA - SHA256 - G2
. No entanto, sua cadeia fornece intermediáriosAlphaSSL CA - G2
. Acredito que você precise excluir o certificado intermediário atual (AlphaSSL CA - G2
) e substituí-lo por aquele com impressão digitalae:bf:32:c3:c8:32:c7:d7...
(AlphaSSL CA - SHA256 - G2
). Além disso, você não precisa enviarGlobalSign Root CA
. O cliente deve enraizar sua confiança (ou no intermediário).