1. Contexte
Mon client rtorrent m'a posé quelques problèmes aujourd'hui sur des fichiers torrents avec ce beau message d'erreur : Tracker: [Peer certificate cannot be authenticated with given CA certificates].
L'hébergeur a changé son certificat et mon système ne connaît pas l'émetteur.
2. Le coupable
Bon, je sors ma loupe de détective et je décortique :
[user@local ~]$ curl -I --capath /etc/ssl/certs https://www.domain.tld/
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
[user@local ~]$ openssl s_client -connect www.domain.tld:443
CONNECTED(00000003)
depth=0 CN = www.domain.tld
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.domain.tld
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=www.domain.tld
i:/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
[…]
Verify return code: 21 (unable to verify the first certificate)
Je comprends mieux, mon système ne connaît pas "RapidSSL SHA256 CA - G3" fourni par GeoTrust Inc.
3. Résolution
J'ai donc le choix de l'exporter depuis mon navigateur Firefox car celui-ci se base sur sa propre liste et le connaît ou alors d'aller le télécharger, ce que je vais faire pour vous faciliter la vie.
Arch Linux :
Ajout :
[root@local ~]# cd /etc/ca-certificates/trust-source/anchors
[root@local anchors]# curl -O https://data.tetsumaki.net/divers/RapidSSL_SHA256_CA_-_G3.crt
[root@local anchors]# trust extract-compat
Suppression :
[root@local ~]# cd /etc/ca-certificates/trust-source/anchors
[root@local anchors]# rm RapidSSL_SHA256_CA_-_G3.crt
[root@local anchors]# trust extract-compat
Ubuntu / Debian :
Ajout :
[root@local ~]# cd /usr/local/share/ca-certificates
[root@local ca-certificates]# curl -O https://data.tetsumaki.net/divers/RapidSSL_SHA256_CA_-_G3.crt
[root@local ca-certificates]# update-ca-certificates
Suppression :
[root@local ~]# cd /usr/local/share/ca-certificates
[root@local ca-certificates]# rm RapidSSL_SHA256_CA_-_G3.crt
[root@local ca-certificates]# update-ca-certificates --fresh
CentOs 6 et 7 :
Ajout :
[root@local ~]# yum install ca-certificates
[root@local ~]# update-ca-trust force-enable
[root@local ~]# cd /etc/pki/ca-trust/source/anchors/
[root@local anchors]# curl -O https://data.tetsumaki.net/divers/RapidSSL_SHA256_CA_-_G3.crt
[root@local anchors]# update-ca-trust extract
Suppression :
[root@local ~]# cd /etc/pki/ca-trust/source/anchors/
[root@local anchors]# rm RapidSSL_SHA256_CA_-_G3.crt
[root@local anchors]# update-ca-trust extract
Voici tout de même la méthode pour l'exporter depuis Firefox :
- Préférences > Avancé > Certificats > Afficher les certificats > Autorités > RapidSSL SHA256 CA - G3 > Exporter
4. Vérification
Je vais utiliser les mêmes commandes que tout à l'heure :
[user@local ~]$ curl -I --capath /etc/ssl/certs https://www.domain.tld/
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 15 Jan 2016 22:33:16 GMT
Content-Type: text/html
X-Powered-By: PHP/5.4.45
Location: account-login.php
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
[user@local ~]$ openssl s_client -connect www.domain.tld:443
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = GeoTrust Inc., CN = RapidSSL SHA256 CA - G3
verify return:1
depth=0 CN = www.domain.tld
verify return:1
---
Certificate chain
0 s:/CN=www.domain.tld
i:/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
[…]
Verify return code: 0 (ok)
5. Conclusion
Cela ne s'applique bien évidemment pas que dans le cas d'un problème avec rtorrent.