unable to get local issuer certificate

Program nie znalazł urzędu, któremu ufa i który poręczyłby za certyfikat serwera. Naprawa jest we własnej liście tego programu, a każdy program ma inną.

curlcurl: (60) SSL certificate problem: unable to get local issuer certificate
gitfatal: unable to access 'https://...': SSL certificate problem: unable to get local issuer certificate
Python, pip[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
Node.jsError: unable to get local issuer certificate (UNABLE_TO_GET_ISSUER_CERT_LOCALLY)

Co to znaczy

Program dostał certyfikat serwera i szukał certyfikatu tego, kto go wystawił - najpierw wśród tego, co przysłał serwer, potem w swoim lokalnym magazynie zaufania. Nie znalazł ani tu, ani tu. „Lokalny” znaczy tu: własna lista urzędów tego programu, niekoniecznie ta, której używa przeglądarka.

Komunikat pochodzi z OpenSSL i bibliotek zbudowanych podobnie, dlatego wypisują go curl, git, Python, pip i Node.js.

Częste przyczyny

  • Firmowego certyfikatu głównego brakuje na liście tego programu. Proxy z inspekcją TLS albo własny urząd firmy podpisuje połączenie, a dział IT dodał jego certyfikat główny do magazynu systemu. curl na Windowsie może mu ufać, a Git for Windows, Python i Node.js czytają własne listy, których to nie obejmuje.
  • Serwer nie wysyła certyfikatu pośredniego. Przeglądarka to ukrywa, bo pamięta certyfikat pośredni z innej strony. Każdy inny klient pada. Opisuje to strona brak certyfikatu pośredniego.
  • Nieaktualny albo podmieniony pakiet CA. Program skierowany na inny plik, przez SSL_CERT_FILE, CURL_CA_BUNDLE, REQUESTS_CA_BUNDLE albo GIT_SSL_CAINFO, ufa temu plikowi i niczemu więcej.

Ustal, która dotyczy ciebie

certdoctor https://adres-ktory-nie-dziala/

L0 pokazuje, które z tych zmiennych są ustawione. L4 pokazuje, czy serwer wysłał cały łańcuch. Macierz zaufania pokazuje każdy git, curl, Python, pip i node na maszynie, którą listę czyta każdy z nich, które odmawiają i polecenie, które dodaje certyfikat główny do każdego.

Jeśli werdykt mówi, że serwer nie wysłał wystawcy swojego certyfikatu, naprawa należy do serwera, a certdoctor mówi to wprost: „this is a fact about the server rather than about this machine.”

Napraw to

Dodaj certyfikat główny do listy, którą czyta program, który pada, poleceniem z jego wiersza:

Jeśli to certyfikat główny twojej firmy, strona inspekcja TLS mówi, jak zdobyć właściwy certyfikat.

Czego nie robić

git config http.sslVerify false, curl -k, verify=False i NODE_TLS_REJECT_UNAUTHORIZED=0 usuwają błąd, przyjmując każdy certyfikat od każdego. Ukrywają problem, zamiast go naprawić, i zostają ustawione długo po tym, jak wszyscy zapomną dlaczego.