Certificate Pinning
Certificate Pinning to zaawansowana technika bezpieczeństwa, która wykracza poza standardową walidację Certificate Authority. Polega na "przypięciu" (pinning) konkretnego klucza publicznego serwera do Twojej aplikacji, co znacząco zwiększa bezpieczeństwo komunikacji z API Paymentic.
Dlaczego to jest ważne?
Certificate Pinning zapewnia dodatkową warstwę ochrony przed zaawansowanymi atakami Man-in-the-Middle (MitM), w tym:
- Atakami wykorzystującymi skompromitowane urzędy certyfikacji (CA)
- Atakami z wykorzystaniem fałszywych certyfikatów, które mogłyby zostać uznane za zaufane przez system operacyjny
SPKI (Subject Public Key Info) — rekomendowana metoda
Rekomendujemy wyłącznie pinning klucza publicznego (SPKI), a nie pinning całego certyfikatu. Powody:
- Klucz publiczny przeżywa rotację certyfikatu. Certyfikaty wygasają i są odnawiane (zwykle co 3–12 miesięcy). Dopóki nie zmieniamy pary kluczy, ten sam pin pozostaje ważny po odnowieniu certyfikatu — integracja nie wymaga zmian.
- Pinning odcisku certyfikatu (SHA-256 fingerprint całego certyfikatu) łamie się przy każdej rotacji, co w praktyce prowadzi do nieplanowanych awarii integracji albo — co gorsza — do wyłączania pinningu przez zespoły, które mają dość "naprawiania" go co kwartał.
- SPKI jest standardem wspieranym natywnie przez cURL (
--pinnedpubkey), libcurl (CURLOPT_PINNEDPUBLICKEY), OkHttp (CertificatePinner), a także RFC 7469 (HPKP, obecnie wycofany w przeglądarkach, ale wzorzec pozostaje kanoniczny dla integracji backend-to-backend).
Pin SPKI to Base64 z SHA-256 pola SubjectPublicKeyInfo certyfikatu serwera, podawany w formacie sha256//<base64>.
Jak to działa?
- Zapisujesz w konfiguracji swojej aplikacji hash SPKI klucza publicznego serwera API Paymentic
- Przy każdym połączeniu TLS Twoja aplikacja liczy SHA-256 z SPKI certyfikatu prezentowanego przez serwer i porównuje z zapisanym pinem
- Jeśli pin się zgadza, połączenie jest kontynuowane
- Jeśli pin się nie zgadza, połączenie jest natychmiast przerywane — nawet jeśli certyfikat jest podpisany przez zaufany urząd certyfikacji