Parser certyfikatów
Certyfikaty X.509 to standardowy format certyfikatów klucza publicznego używanych w TLS/SSL. To narzędzie parsuje certyfikaty zakodowane w PEM, aby wyświetlić podmiot, wystawcę, okres ważności, szczegóły klucza publicznego i rozszerzenia. Niezbędne do debugowania problemów z połączeniami HTTPS.
Specyfikacje
Typowe zastosowania
- Debugowanie błędów połączenia SSL/TLS ("certyfikat wygasł")
- Weryfikacja, czy certyfikat obejmuje prawidłowe nazwy domen
- Sprawdzanie dat wygaśnięcia certyfikatów w celu planowania odnowienia
- Inspekcja certyfikatów pośrednich i głównych w łańcuchu
- Weryfikacja, czy atrybuty certyfikatu spełniają wymagania zgodności
Funkcje
- Parsowanie certyfikatów zakodowanych w PEM (-----BEGIN CERTIFICATE-----)
- Wyświetlanie nazw wyróżniających podmiotu i wystawcy
- Pokazywanie okresu ważności (Nie wcześniej / Nie później)
- Wyodrębnianie algorytmu i rozmiaru klucza publicznego
- Wyświetlanie alternatywnych nazw podmiotu (SAN)
- Pokazywanie rozszerzeń certyfikatu (Użycie klucza, Rozszerzone użycie klucza, Podstawowe ograniczenia)
- Wyświetlanie identyfikatorów klucza urzędu/podmiotu
- Punkty dystrybucji CRL i adresy URL dostępu do informacji o urzędzie
Przyklady
Certyfikat samopodpisany
Wypróbuj →Certyfikat X.509 dla example.com z alternatywnymi nazwami podmiotu.
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIUb7VAvx3CADEDexgoNd41E9Y5tZowDQYJKoZIhvcNAQEL
BQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
DVNhbiBGcmFuY2lzY28xFDASBgNVBAoMC0V4YW1wbGUgSW5jMRQwEgYDVQQLDAtF
bmdpbmVlcmluZzEUMBIGA1UEAwwLZXhhbXBsZS5jb20wHhcNMjYwMTI1MDQ0ODMw
WhcNMjcwMTI1MDQ0ODMwWjB8MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZv
cm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEUMBIGA1UECgwLRXhhbXBsZSBJ
bmMxFDASBgNVBAsMC0VuZ2luZWVyaW5nMRQwEgYDVQQDDAtleGFtcGxlLmNvbTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALKN/rhprC1rfrwKpj9ZqwRR
4c51daZRMlij1NbmUJn7KiZTghxu1OtOEodGmpcF3xuWxiBYTOKvQZ+qPpED6IAG
IYtANPetAkRbsf/xdZZZ/BRR3jQQ2AVDfyuBSYjYEV4JMVG47JCj7oewgNb0dejv
HI18aBWzIGE6v9Zv5FDt+d3GjJignI8elrGzrnJg85qsd743xSEPALqf1NsyhjtY
Th91DazAOoPzA/DMXzoXUhAf9C5uWQlSdn6JDzs8/ld0c+LZH9ohvC/IN/PfdkYg
NYR2AJutUdxbOPPmcFm46o/WpquV2H0mIMuvdzI+k/tk6wVV2jwu2ysQLwweqecC
AwEAAaOBjjCBizAdBgNVHQ4EFgQU9Th/a8eJZ9DHh5uUGyf+iTSNF14wHwYDVR0j
BBgwFoAU9Th/a8eJZ9DHh5uUGyf+iTSNF14wDwYDVR0TAQH/BAUwAwEB/zA4BgNV
HREEMTAvggtleGFtcGxlLmNvbYIPd3d3LmV4YW1wbGUuY29tgg9hcGkuZXhhbXBs
ZS5jb20wDQYJKoZIhvcNAQELBQADggEBAE1rGDKmhMBkcdwZva/9CouLeLOIHBiI
uPH1LV6Pbl2KJ11w1L36SstF17+M3Sn0SJxstCePJWlfLlx6r5JZSyNAQghmgep1
/YWrsDtC3bjs4stOz1FWUgUDs+b7pf+h93lLTShX8mue2rjIXbYJPJx9XsCmyx1R
zLuYSoOSQ/0aR7NSzjqgoHEUNI/2mGTRJ6ngC0vx88ppn+tuk8PyAXt8kp8hPx3I
6lmmyzfuwt0JZIawW2p1nkMlGt2IBIxBBY7vjAHCTDRa69YP08QeImDM13FelUVh
tXPOCJaWXZQmppgKNtmpedswRRtOyl83cqzkz4rZRpjnpPqIEWNQ9bs=
-----END CERTIFICATE-----Klucz prywatny
Wypróbuj →Odpowiadający klucz prywatny RSA w formacie PKCS#8.
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyjf64aawta368
CqY/WasEUeHOdXWmUTJYo9TW5lCZ+yomU4IcbtTrThKHRpqXBd8blsYgWEzir0Gf
qj6RA+iABiGLQDT3rQJEW7H/8XWWWfwUUd40ENgFQ38rgUmI2BFeCTFRuOyQo+6H
sIDW9HXo7xyNfGgVsyBhOr/Wb+RQ7fndxoyYoJyPHpaxs65yYPOarHe+N8UhDwC6
n9TbMoY7WE4fdQ2swDqD8wPwzF86F1IQH/QublkJUnZ+iQ87PP5XdHPi2R/aIbwv
yDfz33ZGIDWEdgCbrVHcWzjz5nBZuOqP1qarldh9JiDLr3cyPpP7ZOsFVdo8Ltsr
EC8MHqnnAgMBAAECggEAANyt1b1JqlASJPcQMmiABBDsVcJvacW+lOFfNHv/XtIk
AMD3QdfiVnh8BZ2SC+Sbw4nvNVZeMkH4v4j84FcnSjO9YB5Ub+9GSyCXzWdT0zQA
AyeAbe2FSkRqWsI3CETl+iqlMekCPpIfPRYQqSw1w+tTm5APZWHSzpiQA7ydwSsP
sJ1QBq64eXSXFhpyLG0LE4ATeyH9dxj9n9NocL0QOqT+Tl5Dcjlxc7fYmoHStC0q
9Xb5h1Po3kmESAELdUobBbJvJFVK98PMB6osUR4VM4snQJOJZ+4Df7bxU311OgLB
Am/mQjsnyZqBWjDQaUj/BGnapJxqB+a102Ki3XMX4QKBgQDcmUc0c+zfRfnic22Q
ytJ3Y29N1C52GESFulL+cYfwwfVK/VXWT1b/eECABVWZvzP22wyEnkodkYWSoN86
GK2PvH8ii9EpkkCtRabFqmbfqPysTKawu9/BgrVAvEvRQjHHAUZnytwtw+IcL6Nz
EjQ4UrFK+3/rycT05I/ToHRgGQKBgQDPNXI0OSJ1nl7YQOry4C4ekT/uCJAbV7bN
MU49iSMqldlXy+VvSKAwErzvaAtQUolvu3DPw2hcpMxuH+hoHweTA0lu0VbZRKvS
1EhMWQGN2qrSQYcnhvKY/BUbd7KjZ858PeOBcTgyCfBkfdBNgughjsCv2BxKGxQI
Li2gSWSZ/wKBgF0M2pgpffUAE1ON1N2KcBSkAMMXiTGPMvgli/R/9xN6/PjQu3BW
rx+7nZlipqTfng+2fiVCj4jBZVJgQUjEOBG1NPthdqzOYDG2e45NPm+BXHNhMb7C
wLNjawkPY/u0rEKBKy2EyDMVuT6iaZOUTiqj1t0GEQNobIfQEUr3F5+hAoGAZuD3
afxwIovWNXLN9HbgDyc44Zt4yUqcpXZ0jVL4ld0+wzumF8GsXxH+orM64s+IE2Sy
V0WDHHRqV8cZ4hB99z0riY0AnPFeilgB6X5Lqj3GkIweab6z1sdaR3//vuf8em1T
9uHa7+VFaO+aq9FyJa819ljLevPE12buGmY2P8sCgYEAoSk3KwiEO9zvxuuwqdBh
Qv/dvWPgh/KttWcoL6Axt1z4gG+vdidn8xIdVGy6xnQOYpm+ANqRpWO82Hws5ITy
8uDn/S2kjQnyh8Cz7jJLBiJUxz/ZWfUz56cQq3Bej46oJN6UKkhJ9ogAjUJAYjV1
7JIWxv6OC7Cg6xfHCGRa7F0=
-----END PRIVATE KEY-----Wskazowki
- Eksportuj certyfikat z przeglądarki: kliknij kłódkę > Certyfikat > Szczegóły > Eksportuj.
- Pobierz certyfikat strony za pomocą: openssl s_client -connect example.com:443
- SAN (Subject Alternative Names) zawierają listę wszystkich prawidłowych nazw domen.
- Certyfikaty główne są samopodpisane (wystawca = podmiot).
- Sprawdź łańcuch certyfikatów za pomocą: openssl verify -CAfile ca.pem cert.pem
Zrozumienie Parser certyfikatów
Certyfikaty X.509 stanowią fundament zaufania w internecie, umożliwiając szyfrowanie TLS/SSL dla połączeń HTTPS, podpisywanie kodu, bezpieczeństwo poczty elektronicznej (S/MIME) i uwierzytelnianie VPN. Certyfikat wiąże klucz publiczny z tożsamością (nazwą domeny, organizacją lub osobą), a urząd certyfikacji (CA) potwierdza to powiązanie, podpisując cyfrowo certyfikat.
Certyfikaty są zazwyczaj przechowywane w formacie PEM — dane DER zakodowane w Base64 ujęte między znacznikami -----BEGIN CERTIFICATE----- i -----END CERTIFICATE-----. Certyfikat zawiera podmiot (kogo certyfikat identyfikuje), wystawcę (kto go podpisał), okres ważności (daty Nie wcześniej i Nie później), klucz publiczny podmiotu oraz rozszerzenia kontrolujące użycie. Rozszerzenie Subject Alternative Name (SAN) zawiera listę wszystkich nazw domen, które certyfikat obejmuje.
Łańcuchy certyfikatów ustanawiają zaufanie, łącząc certyfikat końcowy z zaufanym głównym CA przez jeden lub więcej pośrednich CA. Gdy przeglądarka łączy się ze stroną internetową, weryfikuje łańcuch: certyfikat serwera został podpisany przez pośredni CA, który został podpisany przez główny CA, któremu przeglądarka ufa. Przerwany łańcuch — brakujące certyfikaty pośrednie lub nieznany certyfikat główny — powoduje znany błąd "Twoje połączenie nie jest prywatne".
Zarządzanie certyfikatami jest częstą przyczyną awarii. Wygasłe certyfikaty powodują natychmiastowe przerwanie usługi. Niezgodne nazwy domen wywołują ostrzeżenia przeglądarki. Brakujące certyfikaty pośrednie działają w niektórych przeglądarkach (które mogą je buforować lub pobierać), ale zawodzą w innych oraz w klientach API. Monitorowanie wygaśnięcia certyfikatów i automatyzacja odnowienia za pomocą narzędzi takich jak Let's Encrypt i certbot jest niezbędna dla niezawodnego działania.
Aby sprawdzić, kiedy certyfikat wygasa, wklej zawartość PEM do tego narzędzia i sprawdź datę Nie później. Z wiersza poleceń uruchom openssl x509 -enddate -noout -in cert.pem dla pliku lokalnego lub openssl s_client -connect example.com:443 przekierowane do openssl x509 -noout -enddate dla zdalnego serwera. Automatyczne monitorowanie za pomocą certbot, cert-manager lub dedykowanych usług monitorujących może ostrzegać z dużym wyprzedzeniem przed wygaśnięciem, aby zapobiec awariom.
Certyfikaty główne są samopodpisane (wystawca jest równy podmiotowi) i są preinstalowane w przeglądarkach i systemach operacyjnych jako kotwice zaufania. Certyfikaty pośrednie są podpisane przez główny CA i służą do podpisywania certyfikatów końcowych. Ten łańcuch zaufania chroni klucz główny — jeśli certyfikat pośredni zostanie skompromitowany, unieważniany jest tylko ten certyfikat pośredni, a nie główny. Serwery muszą wysyłać pełny łańcuch (certyfikat końcowy plus wszystkie pośrednie), ale nie powinny dołączać samego certyfikatu głównego.
Alternatywne nazwy podmiotu (SAN) zawierają listę wszystkich nazw domen i adresów IP, dla których certyfikat jest ważny. Pojedynczy certyfikat może chronić wiele domen, takich jak example.com, www.example.com i api.example.com, używając SAN. Nowoczesne przeglądarki używają SAN zamiast pola Common Name (CN) do walidacji domeny. Certyfikaty wieloznaczne (*.example.com) obejmują jeden poziom subdomen, ale nie samą domenę nadrzędną.
Certyfikat, który działa w przeglądarkach, ale zawodzi w klientach API, to częsty problem spowodowany niekompletnymi łańcuchami certyfikatów. Przeglądarki są bardziej wyrozumiałe — niektóre automatycznie pobierają brakujące certyfikaty pośrednie przez AIA (Authority Information Access) lub używają wcześniej zbuforowanych certyfikatów pośrednich. Klienci API, tacy jak curl, Node.js i biblioteka requests w Pythonie, zazwyczaj wymagają, aby serwer wysłał kompletny łańcuch. Upewnij się, że Twój serwer jest skonfigurowany do wysyłania certyfikatu końcowego plus wszystkich certyfikatów pośrednich, i przetestuj za pomocą curl -v lub openssl s_client, aby zweryfikować kompletność łańcucha.