Tenemos problemas para curl
no conectarnos a un servidor HTTPS:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 está SSL_R_TLSV1_UNRECOGNIZED_NAME
adentro ssl.h
.
Si lo intento, openssl s_client -connect the-problem-site.com:443
entonces veo
CONNECTED(00000003)
depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
verify error:num=20:unable to get local issuer certificate
verify return:0
Certificate chain
0 s:/serialNumber=xx/C=xx/ST=xx/L=xxxx/O=xx/OU=xx/CN=the-problem-site.com
i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
es decir, parece que el problema es que no confía /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Sin embargo, ese certificado está instalado: es /etc/ssl/certs/GeoTrust_Global_CA.pem
, y si en cambio ejecuto
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
entonces todo funciona. El certificado también está presente como un archivo con nombre hash b0f3e76e.0
y está en ca-certificates.crt
. Sin embargo, hasta donde puedo ver, ni curl ni openssl intentan leer ningún certificado; si strace
ellos entonces no hay intento de leer /usr/lib/ssl/certs
o /etc/ssl/certs
en absoluto, ni siquiera con errores. Sin embargo, sí lee openssl.cnf. Hemos corrido update-ca-certificates
.
Esto es Ubuntu 10.04 con openssl 0.9.8k. Podemos reproducir el problema en dos instalaciones separadas (aunque es posible que uno sea un clon del otro desde hace mucho tiempo). Si intento la misma prueba en una máquina virtual CentOS con openssl 0.9.8e, entonces funciona bien, y puedo verlo leyendo el archivo del certificado strace
. No hay acceso a archivos equivalente en el mismo punto en las capas de Ubuntu. Si copio el openssl.cnf
archivo de CentOS VM a las máquinas Ubuntu, no hay diferencia. No hay nada obvio en el entorno o un archivo .rc que pueda estar causando esto.
¿Alguna idea de lo que estoy haciendo mal? ¿Debería funcionar esto, es decir, openssl y curl recogen CA instaladas automáticamente desde la línea de comandos? ¿Cómo se configura esto? ¡Gracias!
Otro punto de datos: en una instalación limpia de 13 servidores, curl
recoge el archivo de certificados y funciona bien. openssl s_client
aunque todavía no. ¿Por qué sería eso?