Cyberbezpieczeństwo

Wygasły certyfikat SSL – mały problem, duże skutki dla firmy. Case Study i kompletny poradnik

Wygasły certyfikat SSL – mały problem, duże skutki dla firmy. Case Study i kompletny poradnik
3 grudnia 2024|9 minut czytania
Spis treści

Certyfikat SSL – mały problem, duże skutki

Zgłosił się do nas klient obsługujący sieć prywatnych gabinetów lekarskich z dość nietypowym problemem – na stronie internetowej przestały się ładować pinezki z lokalizacją gabinetów. Funkcjonalność, która dla potencjalnych pacjentów jest kluczowa, nagle przestała działać, a my mieliśmy szybko ustalić, co się stało.

Strona korzysta z autorskiego pluginu w Pythonie, który działa na dedykowanej domenie, uruchomionej w kontenerze Dockera na serwerze VPS. Pierwsze podejrzenia padły na klasyczny problem z CORS – przeglądarka wyraźnie sygnalizowała błędy CORS. Jednak po krótkim śledztwie okazało się, że przyczyna była znacznie bardziej prozaiczna.

Certyfikat SSL przypisany do tej domeny… wygasł dwa miesiące temu.

Ostrzeżenie przeglądarki Chrome o wygasłym certyfikacie SSL – komunikat „Połączenie nie jest prywatne" z kodem błędu NET::ERR_CERT_DATE_INVALID, informujący że hakerzy mogą próbować wykraść dane użytkownika.

Komunikat przeglądarki Google Chrome po natrafieniu na wygasły certyfikat SSL – kod błędu NET::ERR_CERT_DATE_INVALID. Ten widok natychmiast odstraszy każdego potencjalnego pacjenta lub klienta. W przypadku naszego klienta problem nie dotyczył samej strony, lecz subdomeny z pluginem, co blokowało ładowanie mapy z lokalizacjami gabinetów.

Analiza problemu – dlaczego CORS był objawem, a nie przyczyną

Warto zrozumieć, dlaczego przeglądarka pokazywała błąd CORS, a nie bezpośrednio problem z certyfikatem. To częsta pułapka diagnostyczna, która potrafi zmylić nawet doświadczonych deweloperów.

Łańcuch zdarzeń krok po kroku

  1. Strona główna (domena A) próbowała pobrać dane z API pluginu (subdomena B) poprzez żądanie AJAX/fetch
  2. Subdomena B miała wygasły certyfikat SSL
  3. Przeglądarka odrzuciła połączenie TLS na poziomie transportu – zanim w ogóle dotarła do serwera HTTP
  4. Odpowiedź HTTP nigdy nie dotarła do przeglądarki – w tym nagłówek Access-Control-Allow-Origin
  5. Przeglądarka zaraportowała brak nagłówków CORS, bo po prostu nie otrzymała żadnej odpowiedzi HTTP
  6. Deweloper widzi błąd CORS w konsoli – i zaczyna szukać problemu w konfiguracji CORS, zamiast w certyfikacie

Jak szybko to zdiagnozować?

W konsoli deweloperskiej (F12 → zakładka Console) obok błędu CORS zwykle widoczne jest dodatkowe ostrzeżenie o net::ERR_CERT_DATE_INVALID lub net::ERR_CERT_AUTHORITY_INVALID. Warto też sprawdzić bezpośrednio adres API w przeglądarce – jeśli wyświetli się ekran ostrzeżenia o certyfikacie, diagnoza jest natychmiastowa.

Dodatkowe narzędzia do szybkiej weryfikacji:


echo | openssl s_client -connect subdomena.pl:443 2>/dev/null | openssl x509 -noout -dates
# Przykładowy wynik:
# notBefore=Jan 15 00:00:00 2024 GMT
# notAfter=Oct 02 12:00:00 2024 GMT  ← certyfikat wygasł!

Dlaczego certyfikat SSL jest tak ważny?

SSL/TLS to nie tylko kwestia bezpieczeństwa – to obecnie absolutny standard w internecie. Brak ważnego certyfikatu sprawia, że przeglądarki blokują dostęp do zasobów. W naszym przypadku element strony przestał działać, ponieważ przeglądarka odrzucała połączenie. Problem wydaje się błahy, ale konsekwencje mogą być poważne.

Skutki wygasłego certyfikatu SSL

ObszarSkutekSkala wpływu
Funkcjonalność stronyBlokada zasobów ładowanych z subdomeny (API, media, skrypty)Krytyczny
Wizerunek firmyKomunikat „Połączenie nie jest prywatne” odstrasza klientówWysoki
Pozycjonowanie SEOGoogle obniża ranking stron bez ważnego HTTPSŚredni–Wysoki
Bezpieczeństwo danychBrak szyfrowania transmisji – dane przesyłane otwartym tekstemKrytyczny
Konwersja / sprzedażUżytkownicy opuszczają stronę widząc ostrzeżenie (bounce rate)Wysoki
Zgodność RODOPrzesyłanie danych osobowych bez szyfrowania narusza RODOKrytyczny (ryzyko kary)
Integracje APIZewnętrzne serwisy odrzucają połączenia z nieważnym certyfikatemKrytyczny

Problem jest powszechniejszy niż się wydaje

Według raportów branżowych, co trzecia firma doświadczyła w ciągu ostatniego roku awarii spowodowanej wygasłym certyfikatem SSL. Problem nie dotyczy tylko małych firm – w historii zdarzały się głośne przypadki:

  • Microsoft Teams (luty 2020) – wygasły certyfikat spowodował wielogodzinny globalny przestój
  • Ericsson (grudzień 2018) – wygasły certyfikat w oprogramowaniu sieci komórkowej spowodował awarię u operatorów w wielu krajach
  • Equifax – wygasły certyfikat w narzędziu do inspekcji ruchu sieciowego sprawił, że naruszenie bezpieczeństwa pozostało niezauważone przez miesiące

Jak monitorować certyfikaty SSL – 4 metody

1. Monitoring w Zabbix (rekomendowany dla firm z infrastrukturą)

To podstawa dla firm, które poważnie podchodzą do monitorowania infrastruktury. W Zabbixie wystarczy skonfigurować odpowiedni szablon, który regularnie sprawdza datę ważności certyfikatu i wysyła alerty z odpowiednim wyprzedzeniem.

Zabbix oferuje gotowy template „TLS/SSL certificate check”, który:

  • Sprawdza datę ważności certyfikatu co 24 godziny
  • Wysyła ostrzeżenie na 30 dni przed wygaśnięciem
  • Wysyła alert krytyczny na 7 dni przed wygaśnięciem
  • Weryfikuje łańcuch certyfikatów (chain validation)
  • Monitoruje algorytm podpisu i długość klucza

Konfiguracja wymaga jedynie dodania szablonu do hosta i wskazania domeny do monitorowania. Więcej o monitorowaniu infrastruktury piszemy w artykule o Zabbixie i bezawaryjnym CRM.

2. Automatyczne odnawianie z Let’s Encrypt i certbot

Rozwiązania takie jak Let’s Encrypt są doskonałe dla większości przypadków. Automatyzacja odnowienia za pomocą certbot eliminuje problem zapomnienia o ważności:

# Instalacja certbot (Debian/Ubuntu)
sudo apt install certbot python3-certbot-nginx
# Pobranie i konfiguracja certyfikatu
sudo certbot --nginx -d twojadomena.pl -d www.twojadomena.pl
# Automatyczne odnawianie (dodaj do crontab)
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

Certbot automatycznie odnawia certyfikat na 30 dni przed wygaśnięciem. Certyfikaty Let’s Encrypt są ważne przez 90 dni – krótszy okres ważności to celowa decyzja projektowa wymuszająca automatyzację.

Ważne: W środowisku Docker (jak u naszego klienta) certbot wymaga dodatkowej konfiguracji – albo montowania wolumenów z certyfikatami, albo użycia kontenera sidecar z certbotem. Popularne rozwiązania to:

  • Traefik – reverse proxy z wbudowanym automatycznym SSL
  • Nginx Proxy Manager – GUI do zarządzania certyfikatami w Dockerze
  • Caddy – serwer HTTP z automatycznym HTTPS „out of the box”

3. Cloudflare – certyfikat + ochrona DDoS

Cloudflare oferuje nie tylko certyfikaty SSL, ale również ochronę przed atakami DDoS i CDN. Wystarczy przekierować DNS na Cloudflare, a certyfikat jest generowany automatycznie.

Tryby SSL w Cloudflare:

  • Flexible – szyfrowanie tylko między użytkownikiem a Cloudflare (niezalecany)
  • Full – szyfrowanie end-to-end z self-signed certyfikatem na serwerze
  • Full (Strict) – pełne szyfrowanie z weryfikacją certyfikatu na serwerze (rekomendowany)

4. Skrypty monitorujące (rozwiązanie minimalne)

Dla mniejszych firm, które nie mają Zabbixa, prosty skrypt sprawdzający certyfikat może być uruchamiany jako cron job:

#!/bin/bash
# ssl_check.sh – sprawdza certyfikat i wysyła alert e-mailem
DOMAIN="twojadomena.pl"
DAYS_WARNING=14
EXPIRY=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null \
  | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt $DAYS_WARNING ]; then
  echo "UWAGA: Certyfikat SSL dla $DOMAIN wygasa za $DAYS_LEFT dni!" \
    | mail -s "SSL Alert: $DOMAIN" [email protected]
fi

Płatne certyfikaty SSL – czy warto?

Nasz klient korzystał z płatnego certyfikatu, który oferuje m.in. ubezpieczenie w razie naruszenia bezpieczeństwa. W teorii brzmi to dobrze, ale w praktyce warto ocenić to racjonalnie.

Porównanie: darmowy vs płatny certyfikat SSL

CechaLet’s Encrypt (darmowy)Cloudflare (darmowy)Płatny (np. DigiCert, Sectigo)
Koszt roczny0 PLN0 PLN200–2000+ PLN
Ważność90 dni (auto-renew)Automatyczny1–2 lata
Typ walidacjiDV (Domain Validation)DVDV, OV, EV
UbezpieczenieBrakBrakTak (od 10 000 do 1 750 000 USD)
Wildcard (*.domena.pl)Tak (DNS challenge)TakTak
Zielony pasek firmyNieNieTylko EV (wycofywane przez przeglądarki)
Automatyczne odnawianieTak (certbot)TakZależy od dostawcy
KompatybilnośćBardzo szerokaBardzo szerokaBardzo szeroka

Kiedy płatny certyfikat ma sens?

  • OV (Organization Validation) lub EV (Extended Validation) – gdy chcesz potwierdzić tożsamość organizacji (banki, instytucje finansowe, e-commerce z dużym obrotem)
  • Ubezpieczenie – teoretycznie przydatne, ale w praktyce warunki wypłaty są bardzo restrykcyjne (naruszenie musi wynikać z wady certyfikatu, a nie z błędu konfiguracji)
  • Wymogi regulacyjne – niektóre branże (finanse, administracja) mogą wymagać certyfikatów od konkretnych CA
  • Wsparcie techniczne – płatni dostawcy oferują wsparcie 24/7

Kiedy darmowy certyfikat wystarczy?

W większości przypadków darmowe certyfikaty są wystarczające. Szyfrowanie TLS jest identyczne – klucz RSA 2048/4096 bitów lub ECDSA P-256/P-384 jest tak samo bezpieczny niezależnie od tego, czy certyfikat kosztował 0 czy 2000 PLN. A zaoszczędzone środki można przeznaczyć na inne elementy bezpieczeństwa – monitoring, backup czy ochronę poczty firmowej.

Czy słyszeliście, żeby ktoś złamał 4096-bitowy klucz RSA? Więcej o kryptografii i algorytmach szyfrowania piszemy w artykule Od klasycznego RSA do nowoczesnego Curve25519.

Anatomia certyfikatu SSL – co warto wiedzieć

Dla techników IT i administratorów – krótki przegląd najważniejszych elementów certyfikatu SSL:

Typy walidacji

  • DV (Domain Validation) – weryfikuje tylko kontrolę nad domeną. Wydanie w minuty. Let’s Encrypt, Cloudflare.
  • OV (Organization Validation) – weryfikuje tożsamość organizacji (KRS, NIP). Wydanie w 1–3 dni.
  • EV (Extended Validation) – najwyższy poziom weryfikacji. Kiedyś dawał „zielony pasek” w przeglądarce – od 2019 roku przeglądarki wycofały wizualne wyróżnienie EV.

Łańcuch certyfikatów (Certificate Chain)

Certyfikat SSL nie działa sam – musi być powiązany z zaufanym urzędem certyfikacji (CA) poprzez łańcuch:

Root CA (zaufany przez przeglądarkę)
  └── Intermediate CA
        └── Certyfikat serwera (Twoja domena)

Częstym błędem jest niekompletny łańcuch certyfikatów – certyfikat serwera jest ważny, ale brakuje certyfikatu pośredniego (intermediate). Niektóre przeglądarki potrafią samodzielnie pobrać brakujący certyfikat, a inne (szczególnie na urządzeniach mobilnych) – nie, co powoduje błąd u części użytkowników.

Weryfikacja łańcucha:

# Sprawdzenie pełnego łańcucha certyfikatów
openssl s_client -connect twojadomena.pl:443 -showcerts

Protokoły TLS – które wersje są bezpieczne?

ProtokółStatus (2024)Rekomendacja
SSL 2.0 / SSL 3.0Przestarzały, podatny na POODLEWyłącz natychmiast
TLS 1.0Wycofany (RFC 8996, marzec 2021)Wyłącz
TLS 1.1Wycofany (RFC 8996, marzec 2021)Wyłącz
TLS 1.2Bezpieczny (z odpowiednimi ciphersuites)Akceptowalny
TLS 1.3Najnowszy, najszybszy, najbezpieczniejszyRekomendowany

Konfiguracja nginx dla obsługi TLS 1.2+ z bezpiecznymi cipher suites:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;

Checklist – jak nie dopuścić do wygaśnięcia certyfikatu SSL

Na podstawie tego case study i naszego doświadczenia, przygotowaliśmy listę kontrolną:

  • Spisz wszystkie domeny i subdomeny z certyfikatami SSL (w tym te „zapomniane” – API, dev, staging)
  • Wdróż monitoring – Zabbix, UptimeRobot, lub własny skrypt
  • Automatyzuj odnawianie – certbot, Traefik, Caddy
  • Ustaw powiadomienia na 30, 14 i 7 dni przed wygaśnięciem
  • Dokumentuj – kto odpowiada za każdy certyfikat, gdzie jest konfiguracja, jaki CA
  • Testuj po odnowieniu – sprawdź łańcuch certyfikatów i kompatybilność
  • Zarządzaj certyfikatami centralnie – jeden zespół/osoba odpowiedzialna za wszystkie certyfikaty
  • Uwzględnij certyfikaty w procedurach dokumentacji technicznej

Co zrobiliśmy dla naszego klienta?

Po zdiagnozowaniu problemu (wygasły certyfikat na subdomenie z API) podjęliśmy następujące kroki:

  1. Natychmiastowa naprawa – wdrożenie nowego certyfikatu Let’s Encrypt z automatycznym odnawianiem przez certbot
  2. Konfiguracja Traefik jako reverse proxy w Dockerze – automatyczne SSL dla wszystkich kontenerów
  3. Monitoring w Zabbix – alert na 30 i 7 dni przed wygaśnięciem dla wszystkich domen klienta
  4. Audyt – przegląd wszystkich domen i subdomen pod kątem certyfikatów
  5. Rezygnacja z płatnego certyfikatu – klient zaoszczędził ~800 PLN/rok bez utraty bezpieczeństwa
  6. Dokumentacja – spisanie procedury zarządzania certyfikatami

Efekt: problem rozwiązany w ciągu godziny, a automatyzacja gwarantuje, że sytuacja się nie powtórzy. Ile kosztowałby dłuższy przestój – szczególnie dla sieci gabinetów lekarskich, gdzie pacjenci szukają lokalizacji online?

Powiązane artykuły

FAQ – Certyfikaty SSL, monitoring i najczęstsze problemy

O autorze

Tomasz Siroń, Board Member & Infrastructure Architect w SparkSome Venture

Tomasz Siroń

BOARD MEMBER & INFRASTRUCTURE ARCHITECT

Od lat projektuję i wdrażam rozwiązania infrastrukturalne dla firm i organizacji. Specjalizuję się w systemach Linux, DevOps, Docker, Kubernetes i bezpieczeństwie infrastruktury. Jako członek zarządu SparkSome Venture odpowiadam za stronę technologiczną, architektury systemów i projekty dla klientów biznesowych. Kocham łączyć teorię z praktyką, właśnie dlatego od 2024 roku prowadzę autorskie szkolenia techniczne dla firm i uczelni. Certyfikowany przez MikroTik, magister mechatroniki, ale przede wszystkim praktyk, który łączy świat systemów OpenSource, sieci i automatyzacji z elektroniką, IoT, radiokomunikacją oraz projektami badawczo-inżynieryjnymi.

Wygasły certyfikat SSL – mały problem, duże skutki dla firmy. Case Study i kompletny poradnik | SparkSome