· Tomasz Siroń · Bezpieczeństwo
Wygasły certyfikat SSL – mały problem, duże skutki dla firmy. Case Study i kompletny poradnik
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:
# Sprawdzenie daty ważności certyfikatu z poziomu terminala
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
FAQ – Certyfikaty SSL, monitoring i najczęstsze problemy
1. Co się stanie, gdy certyfikat SSL wygaśnie?
Przeglądarki zablokują dostęp do strony wyświetlając ostrzeżenie „Połączenie nie jest prywatne" (Chrome) lub „Ostrzeżenie: Potencjalne zagrożenie bezpieczeństwa" (Firefox). Użytkownicy mogą obejść ostrzeżenie, ale większość tego nie zrobi – odejdzie ze strony. Dodatkowo, zasoby ładowane z subdomeny z wygasłym certyfikatem (API, skrypty, obrazy) zostaną cicho zablokowane przez przeglądarkę.
2. Dlaczego przeglądarka pokazuje błąd CORS zamiast błędu certyfikatu?
Gdy przeglądarka odrzuca połączenie TLS (np. z powodu wygasłego certyfikatu), żądanie HTTP nigdy nie dociera do serwera. Odpowiedź HTTP (w tym nagłówki CORS) nie wraca do przeglądarki. Przeglądarka raportuje brak nagłówka Access-Control-Allow-Origin, co wygląda jak błąd CORS. To częsta pułapka diagnostyczna – zawsze sprawdź certyfikat, zanim zaczniesz modyfikować konfigurację CORS.
3. Czy Let's Encrypt jest bezpieczny?
Tak. Let's Encrypt używa tych samych algorytmów kryptograficznych (RSA 2048/4096, ECDSA P-256) co płatne certyfikaty. Szyfrowanie jest identyczne. Różnica polega wyłącznie na typie walidacji (DV vs OV/EV) i dodatkowych usługach (ubezpieczenie, wsparcie). Let's Encrypt jest zaufany przez wszystkie główne przeglądarki i systemy operacyjne.
4. Jak skonfigurować automatyczne odnawianie certyfikatu w Dockerze?
Najłatwiejsze opcje: (1) Traefik – reverse proxy z wbudowanym ACME, automatycznie pobiera i odnawia certyfikaty Let's Encrypt. (2) Caddy – serwer HTTP z auto-HTTPS out of the box. (3) Nginx Proxy Manager – GUI do zarządzania SSL w Dockerze. (4) certbot w kontenerze sidecar – osobny kontener z certbotem i współdzielonym wolumenem na certyfikaty.
5. Co to jest Certificate Transparency (CT) i czy powinienem się tym przejmować?
Certificate Transparency to publiczny log wszystkich wystawionych certyfikatów SSL. Pozwala wykryć, czy ktoś wystawił certyfikat dla Twojej domeny bez Twojej wiedzy. Warto monitorować logi CT (np. przez crt.sh) – jeśli pojawi się certyfikat, którego nie zamawiałeś, może to oznaczać atak na Twoją domenę.
6. Czy wildcard certyfikat (*.domena.pl) jest lepszy niż osobne certyfikaty?
Wildcard obejmuje wszystkie subdomeny jednego poziomu (np. api.domena.pl, www.domena.pl), co upraszcza zarządzanie. Wady: nie obejmuje subsubdomen (np. dev.api.domena.pl), a kompromitacja klucza prywatnego narusza bezpieczeństwo wszystkich subdomen. Let's Encrypt obsługuje wildcard, ale wymaga walidacji DNS (dns-01 challenge).
7. Czym różni się SSL od TLS?
SSL (Secure Sockets Layer) to starsza wersja protokołu – SSL 2.0 i 3.0 są od lat uznawane za niebezpieczne. TLS (Transport Layer Security) to następca SSL – aktualna wersja to TLS 1.3. W branży termin „certyfikat SSL" jest nadal powszechnie używany, choć technicznie poprawniej byłoby mówić „certyfikat TLS". Sam certyfikat jest taki sam – różnica dotyczy protokołu negocjacji połączenia.
8. Jak sprawdzić, kiedy wygasa mój certyfikat SSL?
Kilka metod: (1) W przeglądarce – kliknij ikonę kłódki obok adresu → „Certyfikat" → data ważności. (2) W terminalu: echo | openssl s_client -connect domena.pl:443 2>/dev/null | openssl x509 -noout -dates. (3) Narzędzia online: SSL Labs (ssllabs.com), SSL Checker. (4) Monitoring: Zabbix, UptimeRobot, Pingdom.
9. Co to jest HSTS i czy powinienem go wdrożyć?
HSTS (HTTP Strict Transport Security) to nagłówek HTTP, który informuje przeglądarkę, aby zawsze łączyła się z Twoją stroną przez HTTPS – nawet jeśli użytkownik wpisze http://. Chroni przed atakami typu SSL stripping. Rekomendowany dla wszystkich stron: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload.
10. Mój certyfikat jest ważny, ale strona nadal pokazuje ostrzeżenie. Co się dzieje?
Najczęstsze przyczyny: (1) Niekompletny łańcuch certyfikatów – brakuje certyfikatu pośredniego (intermediate CA). (2) Mixed content – strona HTTPS ładuje zasoby po HTTP. (3) Rozbieżność domen – certyfikat wystawiony na inną domenę niż ta, z której korzysta użytkownik. (4) Nieprawidłowa data systemowa na urządzeniu użytkownika.
11. Certyfikat SSL chroni przed atakami DDoS?
Nie. Certyfikat SSL szyfruje transmisję danych, ale nie chroni przed atakami wolumetrycznymi (DDoS). Ochronę DDoS zapewniają dedykowane usługi: Cloudflare, AWS Shield, Akamai. Cloudflare łączy obie funkcje – oferuje certyfikat SSL + ochronę DDoS + CDN, co czyni go popularnym wyborem „3 w 1".
12. Jak SparkSome pomaga w zarządzaniu certyfikatami SSL?
Oferujemy: audyt certyfikatów SSL na wszystkich domenach i subdomenach, konfigurację automatycznego odnawiania (certbot, Traefik, Caddy), monitoring w Zabbix z alertami, migrację z płatnych certyfikatów na Let's Encrypt/Cloudflare oraz dokumentację procedur. Jeśli Twoja strona, aplikacja lub infrastruktura wymaga stałej opieki – skontaktuj się z nami.