Błędy certyfikatów i połączeń

Ten sam brakujący certyfikat w każdym środowisku brzmi inaczej. Zacznij od komunikatu, który widzisz.

Większość tych komunikatów to ta sama skarga słowami różnych środowisk: program nie zbudował łańcucha od certyfikatu serwera do urzędu, któremu ufa. Przyczyn jest kilka, a naprawa zależy od tego, która dotyczy ciebie:

  • urzędu brakuje w magazynie zaufania tego programu - najczęściej firmowego certyfikatu głównego albo produktu do inspekcji TLS, dodanego do systemu, a nigdy do Javy, Gita czy Pythona,
  • serwer nie wysyła certyfikatu pośredniego - wina serwera, którą przeglądarka ukrywa, bo pamięta certyfikat pośredni z innej strony,
  • certyfikat nie pasuje do tego połączenia - wygasł albo wystawiono go dla innej nazwy,
  • coś pośrodku odpowiada zamiast serwera - proxy, które chce poświadczeń, albo takie, które podpisuje każde połączenie na nowo.

Każda strona niżej mówi, co znaczy komunikat, jakie ma przyczyny i co uruchomić. Uruchomienie certdoctor na tym adresie mówi, która przyczyna dotyczy ciebie, na maszynie, na której połączenie pada.

Komunikaty są po angielsku, bo tak je wypisują programy, i właśnie tak warto je wyszukiwać.

PKIX path building failed

PKIX path building failed i unable to find valid certification path to requested target w Javie: dlaczego jeden JDK odmawia i które polecenie keytool pomaga.

unable to get local issuer certificate

SSL certificate problem: unable to get local issuer certificate w curl, git, Pythonie, pip i Node: co to znaczy i jak naprawić właściwy magazyn zaufania.

self-signed certificate in certificate chain

npm ERR! SELF_SIGNED_CERT_IN_CHAIN i self-signed certificate in certificate chain w Node.js, git i Pythonie: dlaczego pojawia się za proxy i jak to naprawić.

x509: certificate signed by unknown authority

x509: certificate signed by unknown authority w programach w Go, Dockerze, kubectl, Terraform i Helm: dlaczego decyduje magazyn systemu i jak to naprawić.

certificate has expired

certificate has expired, CERT_HAS_EXPIRED i x509 certificate has expired or is not yet valid: który certyfikat w łańcuchu wygasł i czyja to naprawa.

Nazwa hosta nie pasuje do certyfikatu

no alternative certificate subject name matches target host name, ERR_TLS_CERT_ALTNAME_INVALID i Hostname mismatch: dlaczego nazwa i certyfikat się różnią.

Brak certyfikatu pośredniego

Działa w przeglądarce, pada w curl, Javie i Pythonie? Serwer nie wysyła certyfikatu pośredniego. Jak udowodnić, że winny jest serwer, i jak to naprawić.

Python 3.13 certificate verify failed

Python 3.13 pada z Missing Authority Key Identifier albo Basic Constraints of CA cert not marked critical. Który certyfikat łamie którą regułę.

407 Proxy Authentication Required

407 Proxy Authentication Required w curl, git, npm, pip i Javie: ustal, przez które proxy naprawdę idzie adres i jakich poświadczeń ono chce.