J'ai un serveur dans une batterie qui est soudainement incapable de gérer correctement les certificats SSL. Tenter de faire une commande curl comme curl -v https://google.com
a pour résultat:
curl -v https://google.com
* About to connect() to google.com port 443 (#0)
* Trying 74.125.137.101... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Utiliser openssl s_client
est un peu plus détaillé.
# openssl s_client -Host google.com -port 443
CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
Réinstallation de ca-certificates
- disposez déjà de la dernière version disponible, conformément à aptitude
, Version: 20130906ubuntu0.12.04.1
.
Reconfiguration de ca-certificates
via dpkg-reconfigure
. Cela semble réorganiser le dossier /etc/ssl/certs
mais n’a aucun effet sur le problème.
Utiliser update-ca-certificates --fresh
pour régénérer les liens symboliques dans ce dossier
Saisir le dernier ensemble Mozilla dans curl.haxx.se
- en plaçant ce fichier .pem dans /etc/ssl/certs
et en exécutant la commande de mise à jour.
Le certificat que curl
affirme ne pas pouvoir trouver se trouve bien dans le chemin de certification.
# ls -l /etc/ssl/certs/*Geo*
lrwxrwxrwx 1 root root 57 Apr 7 15:57 /etc/ssl/certs/GeoTrust_Global_CA.pem -> /usr/share/ca-certificates/mozilla/GeoTrust_Global_CA.crt
...
Le fichier de certificat référencé a les mêmes autorisations que toutes les autres boîtes de mon réseau, à savoir 644.
# ls -l /usr/share/ca-certificates/mozilla/GeoTrust_Global_CA.crt
-rw-r--r-- 1 root root 1216 Feb 20 11:49 /usr/share/ca-certificates/mozilla/GeoTrust_Global_CA.crt
D'autres sites sécurisés tels que Github présentent des problèmes identiques avec différents certificats. J'utilise la dernière version absolue disponible de tous les paquets pour Ubuntu 12.04.4, y compris curl
, openssl
et ca-certificates
.
Que se passe t-il ici?
Ce problème a cessé de se produire après quelques mises à jour. Il semble que le fichier de certification ca fourni dans le dépôt Ubuntu manquait d'un certificat intermédiaire pour GeoTrust.
J'ai aussi ce problème, essayez ceci:
openssl s_client -Host google.com -port 443
cette commande imprimera également une chaîne de certificats, la dernière étant:
s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
donc vous avez également besoin de https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem .
Ce chemin de certificat est différent du chemin de certificat affiché dans le navigateur (IE, Firefox, Chrome), je ne sais pas pourquoi, mais cela résout mon problème.