Mi aplicación usa SSL para comunicarse de forma segura con un servidor y tiene problemas para verificar la cadena de certificados. La cadena tiene el siguiente aspecto:Problemas para entender la verificación de la cadena de certificados SSL
Autoridad de Certificación de Servidor SeguroEntrust.net -> DigiCert Global CA -> * .ourdomain.com
Estamos utilizando un almacén de certificados sacó de Mozilla. Contiene el certificado de Entrust.net, pero no el de DigiCert Global CA.
Mi entendimiento es que una autoridad intermedia no tiene que ser de confianza, siempre y cuando la autoridad es la raíz, pero la verificación falla:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
Así que necesito para confiar explícitamente la CA DigiCert global en orden para pasar la verificación? Eso parece incorrecto ¡Pero tú dime!
EDIT: Ahora entiendo que el archivo de certificado debe estar disponible para OpenSSL por adelantado. Algo como esto funciona:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
Esto me permite proporcionar una copia de la DigiCert CA sin decir explícitamente "Confío en ella", toda la cadena todavía tiene que ser verificado.
Pero seguramente los navegadores como Firefox no siempre se enviarán con una copia de cada certificado que necesite. Siempre habrá nuevas CA y el punto es usar la seguridad del certificado raíz para asegurarse de que todas las CA intermedias sean válidas. ¿Derecha? Entonces, ¿cómo hace este trabajo? ¿Es realmente tan tonto como parece?
En OpenBSD, '-CAfile' se puede establecer en'/etc/ssl/cert.pem'. –