Stiamo riscontrando problemi con la curl
mancata connessione a un server HTTPS:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 è SSL_R_TLSV1_UNRECOGNIZED_NAME
in ssl.h
.
Se provo openssl s_client -connect the-problem-site.com:443
invece, vedo
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
cioè sembra che il problema sia che non si fida /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Tuttavia quel cert è installato: è /etc/ssl/certs/GeoTrust_Global_CA.pem
, e se invece corro
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
allora tutto funziona. Il certificato è anche presente come file con nome hash b0f3e76e.0
ed è presente ca-certificates.crt
. Tuttavia, per quanto posso vedere, né curl né openssl stanno tentando di leggere alcun certificato; se strace
li avessi , non c'è nessun tentativo di leggere /usr/lib/ssl/certs
o /etc/ssl/certs
affatto, nemmeno con errori. Legge comunque openssl.cnf. Abbiamo corso update-ca-certificates
.
Questo è Ubuntu 10.04 con openssl 0.9.8k. Possiamo riprodurre il problema su due installazioni separate (anche se è possibile che uno sia un clone dell'altro). Se provo lo stesso test su una VM CentOS con openssl 0.9.8e, allora funziona benissimo e posso vederlo mentre legge il file del certificato strace
. Non esiste un accesso equivalente ai file nello stesso punto nelle righe di Ubuntu. Se copio il openssl.cnf
file dalla VM CentOS alle macchine Ubuntu non fa differenza. Non c'è nulla di ovvio nell'ambiente o in un file .rc che potrebbe causare questo.
Qualche idea su cosa sto facendo di sbagliato? Dovrebbe funzionare, ad es. Openssl e curl raccolgono automaticamente le CA installate dalla riga di comando? Come viene configurato? Grazie!
Un altro punto dati: su un'installazione pulita di 13 server, curl
raccoglie il file dei certificati e funziona benissimo. openssl s_client
comunque no. Perché dovrebbe essere?