apache ssl - nie można uzyskać lokalnego certyfikatu wystawcy


10

Jakoś dziś właśnie mój morski klient nagle rzucił ten błąd. Nie wierzę, że jest to problem morski, ponieważ mój openssl zgłasza dokładnie ten sam błąd:

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/emailAddress=postmaster@mydomain.ch
   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/emailAddress=postmaster@mydomain.ch
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

Dla mnie część łańcucha wygląda dokładnie tak, jak powinna. Konfekcja Apache powinna być również w porządku:

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>

Nie mogę znaleźć mojego problemu ... (certyfikaty ca są zainstalowane na moim lubuntu 14.04). Ich strona nie ma zastosowania, ponieważ połączyli swój certyfikat klasy 1, ale mój jest wydany przez ich klasę 2.


Który system operacyjny? Ostatnio zaktualizowałeś certyfikaty ca? Zaktualizowano aktualizację Ubuntu 23.02.2015. Co jeśli dodasz -CApath /etc/ssl/certs/lub gdzie przechowywane są twoje certyfikaty? Czy może brakuje Ci certyfikatu głównego w łańcuchu?
sebix

Woow, wskazujesz mi właściwy kierunek. Dziękuję Ci! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> Zweryfikuj kod powrotu: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Aktualizacja systemu: 0 zaktualizowanych, 0 nowo zainstalowanych, 0 do usunięcia i 0 niezaktualizowanych. Pakiet: ii ca-certyfikaty 20141019ubuntu0.14.04.1
Dionizy

Odpowiedzi:


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

Ten błąd OpenSSL oznacza, że ​​program nie mógł zweryfikować wystawcy certyfikatu lub najwyższego certyfikatu podanego łańcucha. Może się to zdarzyć w niektórych przypadkach, na przykład:

  • Łańcuch certyfikatów dla certyfikatu nie został dostarczony przez drugą stronę lub nie ma go (jest samopodpisany).
  • Certyfikatu głównego nie ma w lokalnej bazie danych zaufanych certyfikatów głównych.
  • Lokalna baza danych zaufanych certyfikatów głównych nie została podana, a zatem nie została zapytana przez OpenSSL. Aby jawnie podać ścieżkę do certyfikatów, użyj opcji -CApathlub -CAfile. W przypadku Debiana i Ubuntu jest to na przykład:

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

    w wyniku czego albo

    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
    

Ten ostatni potrzebuje więcej informacji. Od 2009 roku jest otwarty raport o błędach dla OpenSSL w Ubuntu :

Wydaje się, że użycie -CApath ustawia -CAfile na wartość domyślną /etc/ssl/certs/ca-certificates.crt.

Bez względu na to, co podasz jako ścieżkę -CApath, może działać, ponieważ -CAfilejest również ustawiona na wartość domyślną (która wcześniej była pusta). Tak więc, nie opierają się domyślne zachowanie OpenSSL na weryfikację certyfikatów przez lokalnej bazy danych certyfikatów, może to być fałszywy!


Masz na myśli, że konfiguracja mojego serwera i komputera przenośnego nie jest niczym złym (ponieważ jest w porządku z opcją -CApath)? Czy to wina klienta morskiego, który powiadamia mnie o tym błędzie? Może to ten problem: github.com/haiwen/seafile-client/issues/93 - Ale dziękuję, oznaczony jako rozwiązany :)
Dionizjusz

Zagłębiłem się w zachowanie OpenSSL, zobacz mój zaktualizowany post. Możesz również rozważyć upvoting;)
sebix
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.