Installer des certificats de confiance

  1. Contexte
  2. Le coupable
  3. Résolution
  4. Vérification
  5. Conclusion

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.