En el curso de tratar de ayudar a un amigo con un problema con pip y sitios ssl ( Tema de GitHub aquí ), me he confundido sobre cómo el /usr/bin/openssl de High Sierra encuentra sus certificados. Mi openssl "sólo para el keg" no tiene ningún problema con el sitio.
Este es el caso de prueba con el que he estado jugando:
(alice)[14:22:06]~>>/usr/bin/openssl s_client -connect files.pythonhosted.org:443 | head 2>&1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign CloudSSL CA - SHA256 - G3
verify error:num=20:unable to get local issuer certificate
verify return:0
CONNECTED(00000005)
---
Certificate chain
0 s:/C=US/ST=California/L=San Francisco/O=Fastly, Inc/CN=r.ssl.fastly.net
i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
^C
Me he estado rascando la cabeza porque una clave apropiada reside en la utilidad Keychain (Determinada por la descarga del paquete de certificados de Mozilla desde el sitio de Curl, encontrando el único certificado que rescata el caso de prueba cuando se proporciona a través de -CAfile
y comparando su huella digital con los certificados de la aplicación Llavero. Ver la cuestión de los pip para los detalles sangrientos).
El valor de OPENSSLDIR
en el openssl version -a
sugiere que /usr/bin/openssl
debe utilizar /private/etc/ssl
:
(alice)[14:05:27]~>>/usr/bin/openssl version -a
LibreSSL 2.2.7
built on: date not available
platform: information not available
options: bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"
Y, de hecho, apuntando a ese directorio con el -CApath
rescata el caso de prueba:
(alice)[14:26:32]~>>/usr/bin/openssl s_client -connect files.pythonhosted.org:443 -CApath /private/etc/ssl | head 2>&1 < /dev/null
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign CloudSSL CA - SHA256 - G3
verify return:1
depth=0 C = US, ST = California, L = San Francisco, O = "Fastly, Inc", CN = r.ssl.fastly.net
verify return:1
^C
(alice)[15:21:22]~>>
¿Qué ocurre? ¿Los CApath/CAfile
¿los comandos permiten un comportamiento que de otro modo no se produciría?
Me gustaría entender lo que está pasando.