apache ssl - impossible d'obtenir le certificat d'émetteur local

10

Aujourd'hui, tout à coup, mon client Seafile a jeté cette erreur. Je ne pense pas que ce soit un problème de fichier marin, car mon openssl renvoie exactement la même erreur:

user@nb-user:~$ echo |openssl s_client -connect seafile.mydomain.ch:443
CONNECTED(00000003)
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 2 Primary Intermediate Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/description=5RygJ9fx8e2SBLzw/C=CH/ST=Thurgau/L=Frauenfeld/O=mydomain GmbH/CN=*.mydomain.ch/[email protected]
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
 1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgIDAjmGMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ
TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0
[... some more lines]
-----END CERTIFICATE-----
subject=/description=5RygJ9fx8e2SBLzw/C=CH/ST=Thurgau/L=Frauenfeld/O=mydomain GmbH/CN=*.mydomain.ch/[email protected]
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
---
No client certificate CA names sent
---
SSL handshake has read 3997 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 96E1F6B9E123F8F8C1C1E8FB0DBACDBBE76ECB3E2CF5C46C1FD2CF46833C8212
    Session-ID-ctx: 
    Master-Key: 25837E1786B0CC60E676D0694319641CD0887F9CAF48A820F1C0D6ABA6FDE0742551816ACD2A4885B0D3FC143716B1F6
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 88 15 c0 c5 30 04 63 d6-ff 7c 72 c4 12 84 7b d6   ....0.c..|r...{.
    0010 - 73 33 8d 91 7c da ce 22-23 d0 31 fb c1 7f 1c 9c   s3..|.."#.1.....
    [... some more lines]

    Start Time: 1424953937
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
DONE

Pour moi, la partie chaîne ressemble exactement à ce qu'elle devrait être. La conf apache devrait également être ok:

root@i-can-haz-data ~ # cat /etc/apache2/sites-enabled/seafile.conf

<VirtualHost *:443>

    ServerName seafile.mydomain.ch
    DocumentRoot /opt/seafile/www

    [... seafile specific things]

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile      /etc/ssl/custom/wildcardmydomain.ch.crt
    SSLCertificateKeyFile   /etc/ssl/custom/wildcardmydomain.ch.key
    SSLCertificateChainFile /etc/ssl/custom/wildcardmydomain.ch.chain.crt

    [... seafile specific things]

</VirtualHost>

Je ne trouve pas quel est mon problème ... (ca-certificats est installé sur mon lubuntu 14.04). Leur site n'est pas applicable car ils ont lié leur certificat de classe 1, mais le mien est délivré par leur classe 2.

Denys
la source
Quel système d'exploitation? Vous avez récemment mis à jour les certificats de certification? Il y a eu des mises à jour pour Ubuntu le 2015-02-23. Que faire si vous ajoutez -CApath /etc/ssl/certs/ou où vos certificats sont stockés? Vous manquez peut-être le certificat racine dans la chaîne?
sebix
Woow, vous me dirigez dans la bonne direction. Je vous remercie! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> Vérifiez le code retour: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Mise à jour du système: 0 mise à niveau, 0 nouvellement installée, 0 à supprimer et 0 non mise à niveau. Paquet: ii ca-certificats 20141019ubuntu0.14.04.1
Dionysius

Réponses:

19
verify error:num=20:unable to get local issuer certificate

Cette erreur d'OpenSSL signifie que le programme n'a pas pu vérifier l'émetteur du certificat ou le certificat le plus élevé d'une chaîne fournie. Cela peut arriver dans certains cas, par exemple:

  • La chaîne de certificats pour le certificat n'a pas été fournie par l'autre côté ou elle n'en a pas (elle est auto-signée).
  • Le certificat racine ne se trouve pas dans la base de données locale des certificats racine approuvés.
  • La base de données locale des certificats racine de confiance n'a pas été fournie et n'a donc pas été interrogée par OpenSSL. Pour donner explicitement le chemin d'accès aux certificats, utilisez l' option -CApathou -CAfile. Pour Debian et Ubuntu, c'est par exemple:

    -CApath /etc/ssl/certs/
    -CAfile /etc/ssl/certs/ca-certificates.crt
    

    ce qui entraîne soit

    openssl s_client -connect example.com:443 -CApath /etc/ssl/certs/
    openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt
    

Ce dernier a besoin de plus d'informations. Il existe un rapport de bogue ouvert pour OpenSSL dans Ubuntu depuis 2009:

L'utilisation de -CApath semble définir -CAfile sur la valeur par défaut de /etc/ssl/certs/ca-certificates.crt.

Peu importe ce que vous donnez comme chemin -CApath, cela peut fonctionner, car le -CAfileest également défini sur sa valeur par défaut (qui était vide auparavant). Donc, ne vous fiez pas au comportement par défaut d'OpenSSL pour vérifier les certificats par une base de données de certificats locale, cela peut être faux!

sebix
la source
Donc, vous voulez dire que la configuration de mon serveur et de mon ordinateur portable n'a rien de mal (parce que c'est bien avec l'option -CApath)? Eh bien, c'est la faute du client du fichier de la mer qui m'a signalé cette erreur? Peut-être que c'est ce problème: github.com/haiwen/seafile-client/issues/93 - Mais merci, marqué comme résolu :)
Dionysius
J'ai approfondi le comportement d'OpenSSL, voir mon article mis à jour. Vous pouvez également envisager de voter;)
sebix