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

- 1. Certyfikat SSL – mały problem, duże skutki
- 2. Analiza problemu – dlaczego CORS był objawem, a nie przyczyną
- 3. Dlaczego certyfikat SSL jest tak ważny?
- 4. Jak monitorować certyfikaty SSL – 4 metody
- 5. Płatne certyfikaty SSL – czy warto?
- 6. Anatomia certyfikatu SSL – co warto wiedzieć
- 7. Checklist – jak nie dopuścić do wygaśnięcia certyfikatu SSL
- 8. Co zrobiliśmy dla naszego klienta?
- 9. Powiązane artykuły
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.

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
- Strona główna (domena A) próbowała pobrać dane z API pluginu (subdomena B) poprzez żądanie AJAX/fetch
- Subdomena B miała wygasły certyfikat SSL
- Przeglądarka odrzuciła połączenie TLS na poziomie transportu – zanim w ogóle dotarła do serwera HTTP
- Odpowiedź HTTP nigdy nie dotarła do przeglądarki – w tym nagłówek
Access-Control-Allow-Origin - Przeglądarka zaraportowała brak nagłówków CORS, bo po prostu nie otrzymała żadnej odpowiedzi HTTP
- 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
| Obszar | Skutek | Skala wpływu |
|---|---|---|
| Funkcjonalność strony | Blokada zasobów ładowanych z subdomeny (API, media, skrypty) | Krytyczny |
| Wizerunek firmy | Komunikat „Połączenie nie jest prywatne” odstrasza klientów | Wysoki |
| Pozycjonowanie SEO | Google obniża ranking stron bez ważnego HTTPS | Średni–Wysoki |
| Bezpieczeństwo danych | Brak szyfrowania transmisji – dane przesyłane otwartym tekstem | Krytyczny |
| Konwersja / sprzedaż | Użytkownicy opuszczają stronę widząc ostrzeżenie (bounce rate) | Wysoki |
| Zgodność RODO | Przesyłanie danych osobowych bez szyfrowania narusza RODO | Krytyczny (ryzyko kary) |
| Integracje API | Zewnętrzne serwisy odrzucają połączenia z nieważnym certyfikatem | Krytyczny |
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
| Cecha | Let’s Encrypt (darmowy) | Cloudflare (darmowy) | Płatny (np. DigiCert, Sectigo) |
|---|---|---|---|
| Koszt roczny | 0 PLN | 0 PLN | 200–2000+ PLN |
| Ważność | 90 dni (auto-renew) | Automatyczny | 1–2 lata |
| Typ walidacji | DV (Domain Validation) | DV | DV, OV, EV |
| Ubezpieczenie | Brak | Brak | Tak (od 10 000 do 1 750 000 USD) |
| Wildcard (*.domena.pl) | Tak (DNS challenge) | Tak | Tak |
| Zielony pasek firmy | Nie | Nie | Tylko EV (wycofywane przez przeglądarki) |
| Automatyczne odnawianie | Tak (certbot) | Tak | Zależy od dostawcy |
| Kompatybilność | Bardzo szeroka | Bardzo szeroka | Bardzo 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.0 | Przestarzały, podatny na POODLE | Wyłącz natychmiast |
| TLS 1.0 | Wycofany (RFC 8996, marzec 2021) | Wyłącz |
| TLS 1.1 | Wycofany (RFC 8996, marzec 2021) | Wyłącz |
| TLS 1.2 | Bezpieczny (z odpowiednimi ciphersuites) | Akceptowalny |
| TLS 1.3 | Najnowszy, najszybszy, najbezpieczniejszy | Rekomendowany |
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:
- Natychmiastowa naprawa – wdrożenie nowego certyfikatu Let’s Encrypt z automatycznym odnawianiem przez certbot
- Konfiguracja Traefik jako reverse proxy w Dockerze – automatyczne SSL dla wszystkich kontenerów
- Monitoring w Zabbix – alert na 30 i 7 dni przed wygaśnięciem dla wszystkich domen klienta
- Audyt – przegląd wszystkich domen i subdomen pod kątem certyfikatów
- Rezygnacja z płatnego certyfikatu – klient zaoszczędził ~800 PLN/rok bez utraty bezpieczeństwa
- 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
- Od klasycznego RSA do nowoczesnego Curve25519 — jak działają algorytmy szyfrujące certyfikaty SSL
- Chmura czy własny serwer? — strategie przechowywania danych i szyfrowanie
- Jak chronić firmową pocztę przed atakami? — SPF, DKIM, DMARC
- Bezawaryjne CRM – Zabbix czuwa — monitoring infrastruktury IT
- Dokumentacja infrastruktury IT — dlaczego warto dokumentować certyfikaty
- Ile kosztuje godzina przestoju IT? — finansowy wymiar niedostępności strony
