apache ssl - lokales Ausstellerzertifikat kann nicht abgerufen werden

10

Irgendwie hat gerade heute mein Seafile-Client diesen Fehler geworfen. Ich glaube nicht, dass es sich um ein Seafile-Problem handelt, da mein openssl genau den gleichen Fehler auslöst:

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

Für mich sieht das Kettenteil genau so aus, wie es sein sollte. Das Apache Conf sollte auch in Ordnung sein:

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>

Ich kann mein Problem nicht finden ... (ca-Zertifikate sind auf meinem lubuntu 14.04 installiert). Ihre Website ist nicht anwendbar, da sie ihr Zertifikat der Klasse 1 verlinkt haben, aber mein Zertifikat wird von ihrer Klasse 2 ausgestellt.

Dionysius
quelle
Welches Betriebssystem? Ca-Zertifikate kürzlich aktualisiert? Am 23.02.2015 gab es Updates für Ubuntu. Was ist, wenn Sie hinzufügen -CApath /etc/ssl/certs/oder wo Ihre Zertifikate gespeichert sind? Vermissen Sie möglicherweise das Stammzertifikat in der Kette?
Sebix
Woow, du zeigst mir die richtige Richtung. Danke! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> Überprüfen Sie den Rückkehrcode: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Systemaktualisierung: 0 aktualisiert, 0 neu installiert, 0 entfernt und 0 nicht aktualisiert. Paket: ii ca-Zertifikate 20141019ubuntu0.14.04.1
Dionysius

Antworten:

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

Dieser Fehler von OpenSSL bedeutet, dass das Programm den Aussteller des Zertifikats oder das oberste Zertifikat einer bereitgestellten Kette nicht überprüfen konnte. Dies kann in einigen Fällen passieren, zum Beispiel:

  • Die Zertifikatskette für das Zertifikat wurde nicht von der anderen Seite bereitgestellt oder hat keine (es ist selbstsigniert).
  • Das Stammzertifikat befindet sich nicht in der lokalen Datenbank vertrauenswürdiger Stammzertifikate.
  • Die lokale Datenbank vertrauenswürdiger Stammzertifikate wurde nicht angegeben und daher von OpenSSL nicht abgefragt. Verwenden Sie die Option -CApathoder, um den Pfad zu den Zertifikaten explizit -CAfileanzugeben. Für Debian und Ubuntu ist es zum Beispiel:

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

    was zu beiden führt

    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
    

Letzteres benötigt mehr Informationen. Seit 2009 gibt es in Ubuntu einen offenen Fehlerbericht für OpenSSL :

Die Verwendung von -CApath scheint -CAfile auf den Standardwert von /etc/ssl/certs/ca-certificates.crt zu setzen.

Unabhängig davon, wie Sie den Pfad angeben -CApath, funktioniert dies möglicherweise, da der -CAfileStandardwert ebenfalls auf den Standardwert gesetzt ist (der zuvor leer war). Verlassen Sie sich also nicht auf das Standardverhalten von OpenSSL bei der Überprüfung von Zertifikaten durch eine lokale Zertifikatdatenbank, es kann sich um eine Fälschung handeln!

sebix
quelle
Sie meinen also, dass entweder mein Server und meine Notebook-Systemkonfiguration nichts Falsches sind (weil es mit der Option -CApath in Ordnung ist)? Nun, es ist ein Fehler des Seafile-Clients, der mich über diesen Fehler informiert? Vielleicht ist es dieses Problem: github.com/haiwen/seafile-client/issues/93 - Aber danke, als gelöst markiert :)
Dionysius
Ich habe mich eingehender mit dem Verhalten von OpenSSL befasst, siehe meinen aktualisierten Beitrag. Sie können auch Upvoting in Betracht ziehen;)
Sebix