¿Cómo me aseguro de que Stunnel envíe todos los certificados de CA intermedios?

13

Algunas computadoras, pero no la mayoría, rechazan el certificado SSL de mi servidor web. El problema parece ser que algunas computadoras están rechazando los certificados de CA. El problema parece manifestarse en Mac OS X 10.6 cuando no está completamente actualizado.

Según http://www.sslshopper.com/index.php?q=ssl-checker.html#hostname=beta.asana.com , no hay problema.

De acuerdo con http://certlogik.com/sslchecker/ , no se envían certificados intermedios.

Mi certificado es de Starfield Technologies, y estoy usando sf_bundle.crtdesde aquí: certs.godaddy.com/anonymous/repository.seam

Estoy manejando SSL en mi servidor a través de stunnel con lo siguiente 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

¿Alguna idea de lo que podría estar haciendo mal?

Jack Stahl
fuente

Respuestas:

17

La CAFileopción configura una CA para usar para los certificados de autenticación del cliente; Esto no es lo que quieres.

En su lugar, desea crear el archivo en la certopción para contener toda la cadena de certificados aplicable. Querrá guardar una copia de seguridad de ese archivo y luego crear una nueva; básicamente combinando los dos archivos, formateados así:

-----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-----

Esto obligará a Stunnel a presentar la cadena de certificados completa a los clientes.

Un dato adicional; El openssl s_clientcomando es muy útil para probar problemas de la cadena de certificados y verificar cómo su servicio presenta sus certificados.

Editar: Ok ... la cadena de ese paquete de certificados tiene tres profundidades, pero la cadena de confianza tiene dos profundidades. Algo no esta bien.

El certificado superior ("Autoridad de certificación segura de Starfield") está firmado por un emisor llamado "Autoridad de certificación de clase 2 de Starfield" con una huella digital que comienza con ad7e1c28... pero el segundo certificado en el paquete, nombrado exactamente igual que el firmante del primer certificado, que debe ser exactamente el mismo certificado, tiene una huella digital que comienza 363e4734y una fecha de vencimiento 10 años antes. Entonces, el tercer certificado (raíz) es el firmante del certificado intermedio incluido ... ¡pero ninguno de esos dos tiene relación con el primero!

Si eso no tiene sentido, no te preocupes. Resumen: trabajo descuidado, alguien dejó caer la pelota en serio construyendo este paquete de certificados. Su mejor apuesta, entonces, es exportar los archivos en formato base-64 desde un navegador que esté validando con éxito la cadena, pegándolos en el formato que enumeré desde allí.

Dado que es un desastre confuso sin culpa tuya, adiviné tu nombre DNS y agarré el certificado, y creo que esta debería ser la cadena completa que necesitas: http://pastebin.com/Lnr3WHc8

Shane Madden
fuente
Gracias esto fue super útil! No puedo votar porque no tengo los puntos de representante, pero lo haría :-)
Jack Stahl
@Jack Si su problema se resuelve, puede aceptar la respuesta incluso con poca reputación. He editado la publicación para aclarar que el paquete de certificados que han proporcionado está jodido ... y como es un desastre, seguí adelante y reuní la cadena completa para ti.
Shane Madden
1

Qualys SSLLabs es realmente útil para verificar su configuración después de los cambios.

https://www.ssllabs.com/ssldb/analyze.html

Comprobaciones que tienes

  • cifrados fuertes habilitados
  • cifrados débiles deshabilitados
  • la cadena de certificados completa y en el orden correcto
Ben Walding
fuente
1

Para cualquier otra persona que enfrente este problema, la publicación de Shane funcionó, aunque también tuve que incluir el archivo CAFile. Además, al crear la cadena, asegúrese de seguir las instrucciones de nomenclatura de archivos según este artículo

Para determinar el nombre de archivo que debe usar, puede usar el programa c_hash que viene con OpenSSL (en el /usr/local/ssl/miscdirectorio):

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

Entonces, en el caso anterior, cambiaría el nombre del archivo a a4644b49.0.
(Tenga en cuenta que es un cero, no la letra 'O', después del punto en el nombre del archivo).

Si no tiene el c_hashprograma, puede ejecutar el comando OpenSSL apropiado para determinar el valor hash:

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

Y si se enfrenta a este problema porque está tratando de usar Websockets con Android Cordova, asegúrese de agregar manualmente wss a sus elementos de la lista blanca de Cordova, ya que el * solo incluye http y https.

BrightEyed
fuente
El artículo al que se enlaza tiene una gran pancarta roja en la parte superior que dice Esta página se depreció , ¿está seguro de que esta información es correcta, como se admite, o como debe hacerse, en el momento de esta publicación? ¿escritura?
austinian
2
Positivo, al menos solo por la parte citada. stunnel arrojará un tambaleante a menos que nombre la cadena de certificados como el hash del archivo.
BrightEyed
Además, agregar el .0 no era necesario para nosotros. Gracias por la corrección ortográfica por cierto, arrojó la publicación después de una muuucha noche; D
BrightEyed
Impresionante, me alegra escuchar la verificación. Entiendo, ahora estoy en mi tercer día largo consecutivo. (11, luego 14 horas, hoy pueden ser otras 14 horas.)
austinian
1
Eeesh, viviendo el sueño de TI: D
BrightEyed