Pregunta

Mi aplicación utiliza SSL para comunicarse de forma segura con un servidor y que está teniendo problemas para verificar la cadena de certificados. La cadena tiene el siguiente aspecto:

Entrust.net Secure Server Certification Authority -> DigiCert Global CA -> * .ourdomain.com

Estamos utilizando un almacén de certificados sacado de Mozilla. Contiene el certificado de Entrust.net, pero no el DigiCert Global CA uno.

Mi entendimiento es que una autoridad intermedia no tiene que ser de confianza, siempre y cuando la autoridad es la raíz, pero no pasa la verificación:

% 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 DigiCert Global de CA con el fin de verificar que pase? Eso parece mal. Pero usted me dice!

Editar : ahora entiendo que el archivo de certificado debe estar disponible a OpenSSL en la delantera. 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, sin duda navegadores como Firefox no siempre enviará una copia de cada certificado único que usted necesitará siempre. Siempre va a haber nuevas entidades emisoras y el punto es el uso de la seguridad del certificado raíz para asegurarse de que todas las entidades emisoras intermedias son válidos. ¿Derecho? Entonces, ¿cómo hace este trabajo? ¿Es realmente tan tonto como parece?

¿Fue útil?

Solución

Los certs intermedios tienen que instalarse en sus servidores web, así como los certs para su propio dominio. Yo estaba teniendo el mismo problema la semana pasada ... Firefox parece ser más exigente que el resto de los navegadores de esto.

Otros consejos

Aquí hay manera correcta para verificar un certficate procedente de un servidor web

  • El cliente mantiene una lista de certificados CA raíz de confianza
  • Servidores Web deben devolver el siguiente certificado de servidor - es obligatorio
  • Certificado Intermedio (s) - Requerido ROOT CA Cert - No es necesario / opcional

Cuando un cliente se conecta a un servidor, se obtiene el certificado de servidor y el certificado intermedio (s) desde el servidor. El cliente entonces construye una cadena de confianza del certificado de servidor, a través del certificado intermedio (s) a uno de los certificados raíz de CA se confía. Certificados raíz son siempre autofirmado - de modo que es donde la cadena se detiene

.

Aquí es un simple comando para poner a prueba un certificado de servidor web utilizando OpenSSL

openssl s_client -CAfile <root ca file> -quiet -showcerts -connect IP:PORT

En el caso de alojamiento virtual, donde varios certificados se sirven en la misma IP: puerto, el nombre del servidor de indicación (SNI) puede ser activado usando -servername <FQDN>. De lo contrario, se enviará el certificado predeterminado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top