Wir haben Probleme, curl
keine Verbindung zu einem HTTPS-Server herzustellen:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 ist SSL_R_TLSV1_UNRECOGNIZED_NAME
in ssl.h
.
Wenn ich es openssl s_client -connect the-problem-site.com:443
stattdessen versuche, sehe ich
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
dh es sieht so aus, als ob das Problem darin besteht, dass es nicht vertraut /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Allerdings ist dieses Zertifikat installiert: es ist /etc/ssl/certs/GeoTrust_Global_CA.pem
, und wenn ich stattdessen ausführen
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
dann funktioniert alles. Das Zertifikat ist auch als Hash-Datei vorhanden b0f3e76e.0
und befindet sich in ca-certificates.crt
. Soweit ich jedoch sehen kann, versuchen weder curl noch openssl, Zertifikate zu lesen. Wenn ich strace
sie dann gibt es keinen Versuch, von /usr/lib/ssl/certs
oder /etc/ssl/certs
überhaupt zu lesen , auch nicht mit Fehlern. Es liest jedoch openssl.cnf. Wir sind gelaufen update-ca-certificates
.
Dies ist Ubuntu 10.04 mit openssl 0.9.8k. Wir können das Problem auf zwei separaten Installationen reproduzieren (obwohl es möglich ist, dass einer von früher ein Klon des anderen ist). Wenn ich den gleichen Test auf einer CentOS-VM mit openssl 0.9.8e versuche, funktioniert er einwandfrei und ich kann sehen, dass er die Zertifikatdatei einliest strace
. Es gibt keinen gleichwertigen Dateizugriff an derselben Stelle in den Ubuntu-Straces. Wenn ich die openssl.cnf
Datei von der CentOS-VM auf die Ubuntu-Computer kopiere , macht das keinen Unterschied. In der Umgebung oder in einer RC-Datei ist nichts offensichtlich, was dies verursachen könnte.
Irgendwelche Ideen, was ich falsch mache? Sollte dies funktionieren, dh sollten openssl und curl installierte Zertifizierungsstellen automatisch von der Befehlszeile abrufen? Wie ist das konfiguriert? Vielen Dank!
Ein weiterer Datenpunkt: Bei einer Neuinstallation von 13 Servern wird curl
die Zertifikatdatei abgerufen und funktioniert einwandfrei . openssl s_client
tut es aber immer noch nicht. Warum sollte das so sein?