Błąd SSL: nie można uzyskać certyfikatu lokalnego wydawcy

95

Mam problem ze skonfigurowaniem SSL na 32-bitowym serwerze Debiana 6.0. Jestem stosunkowo nowy z SSL, więc proszę o wyrozumiałość. Uwzględniam jak najwięcej informacji.
Uwaga: Prawdziwa nazwa domeny została zmieniona w celu ochrony tożsamości i integralności serwera.

Konfiguracja

Serwer działa przy użyciu nginx. Jest skonfigurowany w następujący sposób:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

Przykręciłem swój certyfikat metodą opisaną tutaj

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

gdzie mysite.ca.crtjest certyfikat wydany mi przez organ podpisujący, a bundle.crtjest to certyfikat CA przesłany mi również przez mój organ podpisujący. Problem polega na tym, że nie kupiłem certyfikatu SSL bezpośrednio od GlobalSign, ale za pośrednictwem mojego dostawcy hostingu, firmy Singlehop.

Testowanie

Certyfikat jest poprawnie weryfikowany w przeglądarce Safari i Chrome, ale nie w przeglądarce Firefox. Wstępne poszukiwania ujawniły, że może to być problem z CA.

Zbadałem odpowiedź na podobne pytanie , ale nie mogłem znaleźć rozwiązania, ponieważ nie bardzo rozumiem, czemu służy każdy certyfikat.

Użyłem s_client openssl do przetestowania połączenia i otrzymałem dane wyjściowe, które wydają się wskazywać na ten sam problem, co podobne pytanie . Błąd jest następujący:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

Można znaleźć pełny opis odpowiedzi openssl (z obciętymi certyfikatami i niepotrzebnymi informacjami) tutaj .

Widzę też ostrzeżenie:

No client certificate CA names sent

Czy to możliwe, że to jest problem? Jak mogę się upewnić, że nginx wysyła te nazwy urzędów certyfikacji?

Próby rozwiązania problemu

Próbowałem rozwiązać problem, pobierając główny urząd certyfikacji bezpośrednio z GlobalSign, ale otrzymałem ten sam błąd. Zaktualizowałem główne CA na moim serwerze Debian za pomocą update-ca-certificatespolecenia, ale nic się nie zmieniło. Dzieje się tak prawdopodobnie dlatego, że CA wysłany od mojego dostawcy był poprawny, więc doprowadziło to do podwójnego powiązania certyfikatu w łańcuch, co nie pomaga.

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

Następne kroki

Daj mi znać, jeśli jest coś, co mogę spróbować, lub jeśli po prostu mam nieprawidłową konfigurację.

Jamie Counsell
źródło
10
Certyfikat Twojej domeny jest podpisany przez wystawcę AlphaSSL CA - SHA256 - G2. Jednak Twoja sieć dostarcza półprodukty AlphaSSL CA - G2. Uważam, że musisz usunąć bieżący certyfikat pośredni ( AlphaSSL CA - G2) i zastąpić go certyfikatem z odciskami palców ae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2). Ponadto, nie trzeba wysyłać GlobalSign Root CA. Klient musi zakorzenić swoje zaufanie (lub na pośredniku).
jww
6
Będziesz mógł to przetestować lokalnie za pomocą OpenSSL. Spróbuj openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. Polecenie powinno kończyć się rozszerzeniem Verify OK (0)lub podobnym. Gdy otrzymasz Verify OK (0), serwer jest poprawnie skonfigurowany (w tym przypadku).
jww
6
Kiedy pobierzesz ten nowy pośredni, będziesz musiał przekonwertować go na PEM z openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM.
jww
Piękny. Myślę, że teraz działa. Z jakiegoś powodu pomyślałem, że próbowałem zdobyć SHA 256, ale chyba nie udało mi się go poprawnie przekonwertować. Dziękuję Ci szczerze.
Jamie Counsell
1
tak, to, czego należy szukać, to pary temat-wystawca wracające do katalogu głównego lub urzędu certyfikacji. OpenSSL wyświetla je jako i:i s:pod s_client. Gdy masz już potrzebne certyfikaty, połącz je wszystkie z wyjątkiem katalogu głównego. Ponieważ są konkatowane, muszą być w formacie PEM. Adres URL był pomocny. Starzeje się, próbując pomóc ludziom, którzy nie dostarczają informacji, abyśmy mogli spojrzeć na to lokalnie s_client. (Jeśli nie podasz adresu URL, zagłosowałbym za zamknięciem).
jww

Odpowiedzi:

-3

Jeśli jesteś użytkownikiem Linuksa, zaktualizuj węzeł do nowszej wersji, uruchamiając

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

to powinno rozwiązać twój problem

Collins Koech
źródło