Cómo hacer que openssl use un certificado sin especificarlo a través de -CAfile

Estoy usando este comando:

openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/GTE_CyberTrust_Global_Root.pem 

Funciona. Si no especifico ese archivo CA, obtengo un código 20. El certificado está en /etc/ssl/certs y /usr/lib/ssl/certs -> /etc/ssl/certs También está incluido en ca-certificates.crt

¿Qué rige si openssl puede encontrar mi certificado o no y cómo puedo conseguir que lo acepte? este certificado sin especificarlo explícitamente?

Comentarios

  • ¿Es GTE_CyberTrust_Global_Root.pem una CA intermedia? Si es así, es posible que su servidor web no esté proporcionando ese certificado de CA intermedio junto con el certificado de su sitio. Esta deficiencia por parte de su servidor web podría causar problemas de compatibilidad con algunas computadoras. Por otro lado, si el GTE_CyberTrust_Global_Root.pem es un certificado raíz de nivel superior, entonces debería estar funcionando por defecto.
  • @GeorgeBailey Gracias. Es intermedio. No hay ninguna razón real para no compartir la ubicación: bigfishgames-a.akamaihd.net:443 Si ' le estoy pidiendo a nuestra gente de Internet que solucione este problema, ¿qué estaría preguntando? Siéntase libre de hacer que su respuesta sea una respuesta (es decir, " Nada que pueda hacer en el cliente, el servidor debe hacer X ").
  • Eso ' es extraño. Hubiera esperado que funcionara una vez incluido en / etc / ssl / certs y ca -ificates.crt
  • Bueno, ' no es obvio todavía si el servidor es el problema. Parece que el servidor está sirviendo a una CA intermedia y que SSLLabs trata a CyberTrust como una raíz de nivel superior. Puede estar equivocado acerca de que CyberTrust sea un intermedio, pero tal vez tenga razón. ' no estoy seguro. Verifique la cadena / ruta del certificado en su navegador favorito y / o en SSLLabs . ¿Quizás openssl no está configurado con ningún certificado raíz de nivel superior? ¿Has probado google.com:443?
  • El mismo comportamiento para google.com

Responder

Existe un error conocido de OpenSSL en el que s_client no verifica el almacén de certificados predeterminado cuando no «pasa el -CApath o -CAfile. OpenSSL en Ubuntu 14.04 sufre este error, como lo demostraré:

Versión:

ubuntu@puppetmaster:/etc/ssl$ openssl version OpenSSL 1.0.1f 6 Jan 2014 

No puedo usar la tienda predeterminada cuando no pase el `-ca:

ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify error:num=20:unable to get local issuer certificate verify return:0 

Ahora paso nulo como -CApath y funciona:

ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 -CApath /dev/null depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = mail.google.com verify return:1 

Lamentablemente, no creo que exista una lista de las versiones de OpenSSL afectadas. La única forma de saberlo es probarlo.

Comentarios

  • Gracias. Estaba usando esa versión. OpenSSL 1.1.0 no parece haber solucionado el problema. I ' m no veo el problema que se enumera aquí: github.com/openssl/openssl/issues ¿Puede hacer referencia al problema?
  • It ' s en el antiguo rastreador de problemas de RT . Hay un parche allí, ' s detrás de un inicio de sesión (invitado: invitado) Es ' s problema # 3697, marcado como resuelto. rt.openssl.org/Ti cket / Display.html? id = 3697
  • Ok, confirmé que esto está arreglado en 1.1, al menos en la bifurcación richsalz de la misma. Cuando actualicé, inicialmente no noté que el directorio base había cambiado a /usr/local/ssl que tenía un directorio de certs no asignado a /etc/ssl/certs.
  • Puedo verificar que el error existe en CentOS 6.8 (OpenSSL 1.0.1e-fips 11 de febrero de 2013).
  • También openssl version -d le da el directorio de configuración base …

Respuesta

"How to get openssl to use a cert without specifying it via -CAfile". 

Tuve el mismo requisito. Quería usar un directorio de CA en las que " confiaba " localmente. No quería resultados Trust store contaminantes predeterminados.

c_rehash

Antes de llamar al comando verify, la página de ayuda: man verify me guió para usar c_rehash:

rehash escanea directorios y calcula un valor hash de cada " .pem ", " .crt ", " .cer " o " .crl " en el lista de directorios especificada y crea enlaces simbólicos para cada archivo

export CERTS=/Users/{path_to_your_certs} [path to openssl]/openssl/bin/c_rehash ${CERTS} 

Verificar un certificado de hoja

openssl verify -CApath ${CERTS} local_leaf.pem local_leaf.pem: OK 

Cargas la CA raíz y la IntCA dentro del directorio CERTS.Si no hice el paso de repetición, me daría el error 20 unable to get local issuer certificate.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *