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
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
.
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 elGTE_CyberTrust_Global_Root.pem
es un certificado raíz de nivel superior, entonces debería estar funcionando por defecto.openssl
no está configurado con ningún certificado raíz de nivel superior? ¿Has probadogoogle.com:443
?