Como posso garantir que o stunnel envie todos os certificados CA intermediários?

13

Alguns computadores, mas não a maioria, estão rejeitando o certificado SSL do meu servidor da web. O problema parece ser que alguns computadores estão rejeitando os certificados da CA. O problema parece estar se manifestando no Mac OS X 10.6 quando não está totalmente atualizado.

De acordo com o link - não há problema.

De acordo com o link , não há certificados intermediários sendo enviados.

Meu certificado é da Starfield Technologies, e estou usando sf_bundle.crt daqui: certs.godaddy.com/anonymous/repository.seam

Estou lidando com o SSL no meu servidor via stunnel com o seguinte stunnel.conf :

cert = $CODEZ/admin/production/proxy/asana.pem
CAfile = $CODEZ/admin/production/proxy/sf_bundle.crt
pid =
client = no

[<forwarded port>]
accept = 443
connect = 8443

Alguma idéia do que eu poderia estar fazendo errado?

    
por Jack Stahl 01.04.2011 / 23:48

3 respostas

16

A opção CAFile configura uma CA a ser usada para certificados de autenticação de cliente; isso não é o que você quer.

Em vez disso, você deseja criar o arquivo na opção cert para conter toda a cadeia de certificados aplicável. Você desejará salvar uma cópia de backup desse arquivo e criar uma nova; basicamente combinando os dois arquivos, formatados assim:

-----BEGIN CERTIFICATE-----
(certificate from asana.pem file pasted here)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate certificate here; copy-paste the top chunk from the bundle)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root certificate here; copy-paste the bottom chunk from the bundle)
-----END CERTIFICATE-----

Isso forçará o stunnel a apresentar a cadeia de certificados completa aos clientes.

Mais um petisco; O comando openssl s_client é muito útil para testar problemas de cadeia de certificados e verificar como seu serviço está apresentando seus certificados.

Editar: Ok .. a cadeia desse pacote de certificados tem três profundidades, mas a cadeia de confiança parece ter duas profundidades. Algo não está certo.

O certificado principal ("Autoridade de Certificação Starfield Secure") é assinado por um emissor chamado "Autoridade de Certificação Starfield Classe 2" com uma impressão digital começando com ad7e1c28 .. mas o segundo certificado do pacote denominado exatamente o mesmo que o signatário do primeiro cert, que deve ser exatamente o mesmo certificado, tem uma impressão digital começando com 363e4734 e uma data de expiração 10 anos antes. Então o terceiro certificado (raiz) é o signatário do certificado intermediário incluído .. mas nenhum desses dois tem relação com o primeiro!

Se isso não fizer sentido, não se preocupe. Resumo: trabalho desleixado, alguém seriamente deixou cair a bola construindo este pacote cert. Sua melhor aposta, então, é exportar os arquivos no formato base-64 de um navegador que valida com sucesso a cadeia, colando-os no formato que eu listei a partir daí.

Como essa é uma bagunça confusa sem nenhuma falha sua, adivinhei seu nome DNS e peguei o certificado, e acho que essa deve ser a cadeia completa de que você precisa: link

    
por 02.04.2011 / 00:04
1

O Qualys SSLLabs é realmente útil para verificar sua configuração após as alterações.

link

Verifica se você tem

  • cifras strongs ativadas
  • cifras fracas desativadas
  • a cadeia de certificados completa e na ordem correta
por 01.11.2011 / 12:27
1

Para qualquer pessoa que esteja enfrentando este problema, o post de Shane fez o truque, embora eu também tenha que incluir o CAFile. Além disso, ao criar a cadeia, siga as instruções de nomenclatura de arquivos conforme este artigo

To determine the filename you should use, you can use the c_hash program that comes with OpenSSL (in the /usr/local/ssl/misc directory):

c_hash some_certificate.pem
a4644b49.0 => some_certificate.pem

So, in the above case you'd rename the file to a4644b49.0.
(Note that is a zero, not the letter 'O', after the dot in the filename.)

If you do not have the c_hash program you can run the appropriate OpenSSL command to determine the hash value:

openssl x509 -hash -noout -in some_certificate.pem
a4644b49

E se você está enfrentando esse problema bc você está tentando usar websockets com android cordova, certifique-se de adicionar manualmente wss ao seu material de whitelist cordova, como o * inclui apenas http e https.

    
por 27.08.2015 / 12:52