¿Cómo arreglas una cadena SSL incompleta?

Respuestas:

19

Siguiendo con la respuesta de zakjan, tuve un problema cuando intenté usar jquery para hacer una solicitud AJAX en mi servidor recién seguro, en una vista web de Android. Funcionó en el navegador, pero no en mi aplicación.

Usé este sitio: https://certificatechain.io/

Pegué el texto de mi archivo .crt firmado que recibí de Comodo (positiveSSL), y me devolvió una concatenación de todo lo que necesitaba. Lo guardé como mi dominio + "chain.crt" (ver más abajo)

Luego, en mis configuraciones de apache, ingresé algo como esto para ese host virtual en particular:

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

Después de eso, la vista web de mi aplicación de Android no tuvo problemas al usar ajax para POST a mi servidor. Lo probé en 2 dispositivos del mundo real, uno con 2.3.4 y otro con 4.algo. Y en el emulador ejecutando 2.3. Todo funcionó.

Espero que esto ayude.

Ricardo
fuente
1
La clave para mí fue agregar la SSLCACertificateFiledirectiva y señalarla al archivo CA que me dio mi autoridad. No funcionaría si simplemente concatenara los otros certificados a mi archivo de certificado.
Alex W
En apaches anteriores, se podía usar SSLCertificateChainFile en lugar de SSLCACertificateFile (en caso de que busque esta clave en sus configuraciones y no pueda encontrarla).
dr0i
Increíblemente, pero la respuesta de @Richard está usando el sitio certificatechain.io y el sitio dice "... inspirado en cert-chain-resolver por Jan Žák", quien respondió esta pregunta aquí: superuser.com/a/866523/92500 , gracias @zakjan!
Andrés Morales
La SSLCACertificateFileera de la línea echaba de menos. Inicialmente supuse que mi CA era demasiado nueva porque SSL funcionaba cuando se lo solicitaban algunos navegadores / SO, pero no otros. El uso de decoder.link/sslchecker ayudó a aclarar que mi configuración estaba equivocada, y esta respuesta tenía la solución. ¡¡Gracias!!
josephdpurcell
9

La cadena estaba en un archivo crt, que el SSL original estaba funcionando.

Para GoDaddy hay un segundo certificado: gd_bundle.crt

Copie esta información y agréguela al CRT instalado en el servidor.

Entonces, el CRT original en el servidor tenía 1 certificado, y después tendrá 3 en el mismo archivo. Esta es la cadena.

Todavía tengo ancla en los problemas de la cadena en ssllabs.com pero esto no es un problema, solo una opción para dejarlo dentro o fuera, de acuerdo con /security/24561/ssltest-chain-issues -contains-anchor / 24566 # 24566

Jon
fuente
2
Para deshacerse de los problemas de la cadena quitar el último certificado de gd_bundle.crt
sanmai
7

Puede resolver el problema de la cadena de certificados incompleta manualmente concatenando todos los certificados del certificado al certificado raíz de confianza (exclusivo, en este orden), para evitar dichos problemas. Tenga en cuenta que el certificado raíz de confianza no debe estar allí, ya que ya está incluido en el almacén de certificados raíz del sistema.

Debería poder obtener certificados intermedios del emisor y reunirlos usted mismo. Por cierto, he escrito un script para automatizar el procedimiento, se necesita un certificado para producir la salida de los certificados correctamente encadenados. https://github.com/zakjan/cert-chain-resolver

zakjan
fuente
Esto suena como una solución que solo "engaña" a la máquina local para que piense que el certificado está configurado correctamente.
Alex W
No Se supone que el paquete de certificados de salida se carga en un servidor, que envía el contenido del sitio web. Cada cliente recibirá el certificado con sus intermedios.
zakjan