Como você corrige uma cadeia SSL incompleta

29

Eu tenho um certificado SSL do Go Daddy instalado e funciona bem em qualquer lugar, exceto no Android.

https://www.ssllabs.com/ssltest/analyze.html diz que a cadeia está incompleta e li no estouro de pilha que uma cadeia SSL na ordem errada falhará no Android.

Mas como faço para colocá-lo em ordem? No meu servidor? O próprio certificado SSL precisa ser re-digitado? Mover coisas no FTP?

Jon
fonte

Respostas:

19

Seguindo a resposta de zakjan, tive um problema ao tentar usar o jquery para fazer uma solicitação AJAX no meu servidor recém-seguro, em uma visualização na web do Android. Funcionou no navegador, mas não no meu aplicativo.

Eu usei este site: https://certificatechain.io/

Eu colei o texto do meu arquivo .crt assinado que voltei do Comodo (positiveSSL), e ele me devolveu uma concatinação de tudo o que eu precisava. Salvei como meu domínio + "chain.crt" (veja abaixo)

Então, nas minhas configurações do apache, digitei algo como esse para esse host virtual específico:

SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt

Depois disso, a visualização na web do meu aplicativo Android não teve problemas ao usar o ajax para POST no meu servidor. Eu tentei em 2 dispositivos do mundo real, um executando 2.3.4, outro executando 4. algo. E no emulador executando 2.3. Tudo funcionou.

Eu espero que isso ajude.

Richard
fonte
1
A chave para mim foi adicionar a SSLCACertificateFilediretiva e apontá-la para o arquivo CA que minha autoridade me forneceu. Não funcionaria se eu simplesmente concatenasse os outros certificados no meu arquivo de certificado.
Alex W
Nos apaches mais antigos, SSLCertificateChainFile poderia ser usado em vez de SSLCACertificateFile (apenas no caso de você procurar por essa chave nas configurações e não conseguir encontrá-la).
dr0i 7/01
Incrivelmente, mas a resposta @Richard está usando o site certificatechain.io e o site diz "... inspirado pelo cert-chain-resolver por Jan Žák", que respondeu a esta pergunta aqui: superuser.com/a/866523/92500 , obrigado @zakjan!
Andrés Morales
Essa SSLCACertificateFilefoi a linha que eu perdi. Inicialmente, presumi que minha CA era muito nova porque o SSL funcionava quando solicitado em alguns navegadores / SOs, mas não em outros. O uso de decoder.link/sslchecker ajudou a esclarecer que minha configuração estava errada e essa resposta teve a correção. Obrigado!!
josephdpurcell
9

A cadeia estava no arquivo crt, com o SSL original funcionando.

Para o GoDaddy, existe um segundo certificado - gd_bundle.crt

Copie essas informações e adicione-a à CRT instalada no servidor.

Portanto, o crt original no servidor tinha 1 certificado e depois terá 3 no mesmo arquivo. Essa é a corrente.

Eu ainda recebi contém âncora em problemas de cadeia no ssllabs.com, mas isso não é um problema, apenas uma opção para sair ou sair - de acordo com - /security/24561/ssltest-chain-issues para contenção de âncoras / 24566 # 24566

Jon
fonte
2
Para se livrar de problemas na cadeia de remover o último certificado de gd_bundle.crt
sanmai
7

Você pode resolver o problema incompleto da cadeia de certificados manualmente, concatenando todos os certificados do certificado para o certificado raiz confiável (exclusivo, nesta ordem), para evitar esses problemas. Observe que o certificado raiz confiável não deve estar lá, pois já está incluído no armazenamento de certificados raiz do sistema.

Você deve conseguir certificados intermediários do emissor e concatená-los por si mesmo. Btw, eu escrevi um script para automatizar o procedimento, é preciso um certificado para produzir a saída de certificados encadeados corretamente. https://github.com/zakjan/cert-chain-resolver

zakjan
fonte
Isso soa como uma solução que apenas "engana" a máquina local para pensar que o certificado está configurado corretamente.
Alex W
Não. O pacote de certificado de saída deve ser carregado em um servidor, que envia o conteúdo do site. Todo cliente receberá o certificado com seus intermediários.
zakjan