Nous ne parvenons curl
pas à nous connecter à un serveur 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
en ssl.h
.
Si j'essaie à la openssl s_client -connect the-problem-site.com:443
place, je vois
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
c'est-à-dire que le problème est qu'il ne fait pas confiance /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Cependant, ce certificat est installé: c'est /etc/ssl/certs/GeoTrust_Global_CA.pem
, et si à la place je lance
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
alors tout fonctionne. Le certificat est également présent sous la forme d'un fichier nommé par hachage b0f3e76e.0
et il est dans ca-certificates.crt
. Cependant, pour autant que je puisse voir, ni curl ni openssl ne tentent de lire des certificats; si je strace
les ai alors il n'y a aucune tentative de lecture /usr/lib/ssl/certs
ou pas /etc/ssl/certs
du tout, pas même avec des erreurs. Il lit cependant openssl.cnf. Nous avons couru update-ca-certificates
.
Il s'agit d'Ubuntu 10.04 avec openssl 0.9.8k. Nous pouvons reproduire le problème sur deux installations distinctes (bien qu'il soit possible que l'un soit un clone de l'autre depuis le début). Si j'essaie le même test sur une machine virtuelle CentOS avec openssl 0.9.8e, cela fonctionne bien et je peux le voir lire le fichier de certificat dans strace
. Il n'y a pas d'accès aux fichiers équivalent au même point dans les strates Ubuntu. Si je copie le openssl.cnf
fichier de la machine virtuelle CentOS sur les machines Ubuntu, cela ne fait aucune différence. Il n'y a rien d'évident dans l'environnement ou un fichier .rc qui pourrait être à l'origine de cela.
Des idées sur ce que je fais mal? Est-ce que cela devrait fonctionner, c'est-à-dire que openssl et curl devraient récupérer les autorités de certification installées automatiquement à partir de la ligne de commande? Comment est-ce configuré? Merci!
Autre point de données: sur une installation propre de 13 serveurs, curl
récupère le fichier de certificats et fonctionne correctement. openssl s_client
ne le fait toujours pas, cependant. Pourquoi serait-ce?