SSL: dni do wygaśnięcia
ważność krytycznamierzonysposób ssl
Ile dni zostało do wygaśnięcia certyfikatu. Alert, gdy automat Let's Encrypt się nie odnowił.
Od 2026-09-16 (CREATO_PING cf89ebe) w codziennym skanie dostępności jako odczyt ssl_expiry; osobny workflow ssl_daily zniknął. Już wygasły certyfikat łapie parametr „SSL: ważność certyfikatu”.
WIKI
artykuł z 16.09.2026 · źródeł 9Dni do wygaśnięcia certyfikatu SSL to parametr monitoringu stron internetowych, który odczytuje z certyfikatu serwera datę końca ważności i przelicza ją na liczbę pełnych dni pozostałych do tego terminu. Wynik zestawia się z progiem ostrzeżenia: certyfikat daleko od końca ważności, certyfikat bliski wygaśnięcia albo brak odczytu, gdy certyfikatu nie udało się pobrać. Parametr nie ocenia poprawności certyfikatu — to temat artykułu Ważność certyfikatu SSL. Sprawdza, czy odnowienie nastąpiło na czas: protokół ACME zakłada, że klient okresowo kontaktuje się z urzędem certyfikacji po zaktualizowane certyfikaty [1].
Jak działa
Wystawienie certyfikatu w ACME ma cztery kroki: złożenie zamówienia, udowodnienie kontroli nad nazwami, finalizację zamówienia żądaniem CSR i pobranie wystawionego certyfikatu [1]. Odnowienie powtarza ten przebieg. Let's Encrypt zaleca, by klient bez innych wskazówek odnawiał certyfikat, gdy zostanie mu jedna trzecia okresu ważności, co przy certyfikatach 90-dniowych oznacza odnowienie 30 dni przed końcem [3]. Nieudane odnowienie nie powinno być błędem krytycznym: klient ma ponawiać próby z wykładniczo rosnącym odstępem, najwyżej raz na dobę dla certyfikatu [3].
RFC 9773 dodaje do ACME rozszerzenie ARI (ang. ACME Renewal Information). Serwer ogłasza zasób renewalInfo, a dla konkretnego certyfikatu podaje sugerowane okno odnowienia z czasem początku i końca [2]. Klient powinien wylosować moment odnowienia w tym oknie [2]. Urząd może w ten sposób rozkładać obciążenie, a także poprosić o wcześniejsze odnowienie, na przykład przed masowym unieważnieniem certyfikatów [2]. Let's Encrypt zaleca sprawdzanie ARI co najmniej dwa razy dziennie dla każdego certyfikatu [3].
W wyzwaniu HTTP-01 klient udostępnia wartość key authorization pod ścieżką złożoną ze stałego przedrostka /.well-known/acme-challenge/ i tokenu [1]. Serwer ACME pobiera ją żądaniem GET, które musi trafić na port TCP 80, łączy się z co najmniej jednym adresem z rekordów A i AAAA domeny i powinien podążać za przekierowaniami [1].
Standardy i specyfikacje
- RFC 8555 (ACME) opisuje zamówienie, wyzwania i finalizację; w HTTP-01 walidacja udaje się tylko wtedy, gdy odpowiedź zawiera oczekiwaną wartość key authorization [1].
- RFC 9773 (ARI), standard proponowany z 2025 r., definiuje zasób
renewalInfoi sugerowane okno odnowienia; klient ma respektować nagłówekRetry-Afterprzy kolejnych zapytaniach [2]. - Ballot SC-081v3 CA/Browser Forum przyjęto 11 kwietnia 2025 r.: 25 głosów za wśród wystawców certyfikatów, bez głosów przeciw, i 4 głosy za wśród producentów przeglądarek [6]. Harmonogram skraca maksymalny okres ważności certyfikatu publicznego z 398 do 47 dni w latach 2026–2029, a okres ponownego użycia danych walidacji nazw z 398 do 10 dni [6]. Daty etapów podaje artykuł Ważność certyfikatu SSL.
- Let's Encrypt wystawia domyślnie certyfikaty 90-dniowe i na życzenie 6-dniowe; udana walidacja domeny jest pamiętana do 30 dni [4]. Profil tlsserver przeszedł na 45 dni 13 maja 2026 r., a profil classic przejdzie na 64 dni 10 lutego 2027 r. i na 45 dni z 7-godzinnym ponownym użyciem autoryzacji 16 lutego 2028 r. [7]. Stały odstęp odnowienia co 60 dni przestanie wystarczać; zalecane jest ARI albo odnawianie po około dwóch trzecich okresu ważności [7].
Zagrożenia i skutki
Koniec powiadomień e-mail. Let's Encrypt przestał wysyłać e-maile o zbliżającym się wygaśnięciu certyfikatu 4 czerwca 2025 r. [5]. Jako powody podał upowszechnienie niezawodnej automatyzacji odnowień, ochronę prywatności, bo usługa wymagała przechowywania milionów adresów e-mail powiązanych z wystawieniami, oraz koszt rzędu dziesiątek tysięcy dolarów rocznie [5]. Subskrybentom wskazał zewnętrzne usługi monitorowania [5]. Nieudane automatyczne odnowienie nie wysyła więc od urzędu żadnego sygnału do właściciela strony.
Zablokowany port 80. HTTP-01 działa wyłącznie na porcie 80 [8]. Let's Encrypt zaleca, by każdy serwer ogólnodostępnej strony obsługiwał HTTP na porcie 80 i HTTPS na 443, a zablokowany port 80 wskazuje jako źródło problemów z HTTP-01 [9]. Let's Encrypt nie publikuje listy adresów IP używanych do walidacji, adresy mogą się zmienić w dowolnej chwili, a walidacja odbywa się z wielu punktów sieci [4]. Reguła firewalla przepuszczająca tylko wybrane adresy albo kraje może więc zablokować walidację, choć strona działa dla odwiedzających.
Przekierowania. Let's Encrypt podąża za najwyżej 10 przekierowaniami i akceptuje tylko przekierowania na schemat http lub https, na port 80 lub 443 [8]. Samo przekierowanie z HTTP na HTTPS jest dopuszczalne i zalecane [3], ale token musi być dostępny pod adresem docelowym, bo walidacja sprawdza treść odpowiedzi [1].
Zmiana DNS i wiele serwerów. Urząd łączy się z adresem z rekordów A lub AAAA domeny, wybranym według własnego uznania [1]. Gdy domena wskazuje już nowy serwer albo proxy, a klient ACME działa na starym, token leży tam, gdzie walidator nie zagląda. Przy kilku serwerach plik trzeba udostępnić na każdym z nich [8].
Pamięć autoryzacji. Skoro udana walidacja jest pamiętana do 30 dni [4], odnowienie może się udać mimo zepsutej walidacji, a problem wyjdzie dopiero przy kolejnym. Przy 7-godzinnym ponownym użyciu autoryzacji [7] praktycznie każde odnowienie będzie wymagało nowej walidacji.
Przykłady
| Sytuacja | Skutek dla odnowienia | Podstawa |
|---|---|---|
| Port 80 zamknięty na firewallu | HTTP-01 nie przechodzi | wyzwanie tylko na porcie 80 [8] [9] |
| Firewall przepuszcza tylko wybrane adresy lub kraje | walidacja z niepublikowanych adresów odrzucona | walidacja z wielu punktów sieci [4] |
| Przekierowanie ścieżki wyzwania na port 8443 | walidacja przerwana | dozwolone tylko porty 80 i 443 [8] |
| Domena przeniesiona, klient ACME został na starym serwerze | token niedostępny pod adresem z rekordu A | walidacja łączy się z adresem z DNS [1] |
| Nieaktualny rekord AAAA | walidator może trafić na serwer IPv6 bez tokenu | wybór adresu należy do urzędu [1] |
| Certyfikat wieloznaczny | HTTP-01 nie wystarczy, potrzebne DNS-01 | rekord TXT pod _acme-challenge [8] |
| Odnowienie na sztywno co 60 dni przy certyfikacie 45-dniowym | certyfikat wygasa przed odnowieniem | zmiana okresu ważności [7] |
| Odnowienie nieudane, brak wiadomości od urzędu | nikt nie dostaje ostrzeżenia | koniec powiadomień e-mail [5] |
- [1] RFC 8555 — Automatic Certificate Management Environment (ACME) · IETF
- [2] RFC 9773 — ACME Renewal Information (ARI) Extension · IETF
- [3] Integration Guide · Let's Encrypt
- [4] FAQ · Let's Encrypt
- [5] Ending Support for Expiration Notification Emails · Let's Encrypt
- [6] Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods · CA/Browser Forum
- [7] Decreasing Certificate Lifetimes to 45 Days · Let's Encrypt
- [8] Challenge Types · Let's Encrypt
- [9] Best Practice — Keep Port 80 Open · Let's Encrypt
STATS
wyniki z systemu · tylko liczby zbiorcze- Stron zmierzonych
- 219w ostatnim dniu pomiaru
- OK
- 493odczytów
- Fail
- 3odczytów
- Nie dało się sprawdzić
- 0timeout, blokada, limit zapytań
- Udział fail
- 0,6%bez „nie dało się”
- Stron łącznie
- 238choć jeden odczyt
- OK
- 68286odczytów
- Fail
- 339odczytów
- Nie dało się sprawdzić
- 0timeout, blokada, limit zapytań
- Udział fail
- 0,5%bez „nie dało się”
| Dzień | fail | nie dało się sprawdzić | ok |
|---|---|---|---|
| 08.10.2026 | 10 odczytów | 0 odczytów | 1527 odczytów |
| 09.10.2026 | 7 odczytów | 0 odczytów | 1525 odczytów |
| 10.10.2026 | 2 odczyty | 0 odczytów | 1435 odczytów |
| 11.10.2026 | 9 odczytów | 0 odczytów | 1627 odczytów |
| 12.10.2026 | 17 odczytów | 0 odczytów | 1620 odczytów |
| 13.10.2026 | 11 odczytów | 0 odczytów | 1584 odczyty |
| 14.10.2026 | 4 odczyty | 0 odczytów | 1549 odczytów |
| 15.10.2026 | 1 odczyt | 0 odczytów | 1542 odczyty |
| 16.10.2026 | 1 odczyt | 0 odczytów | 1549 odczytów |
| 17.10.2026 | 1 odczyt | 0 odczytów | 1549 odczytów |
| 18.10.2026 | 2 odczyty | 0 odczytów | 1512 odczytów |
| 19.10.2026 | 1 odczyt | 0 odczytów | 1549 odczytów |
| 20.10.2026 | 1 odczyt | 0 odczytów | 1541 odczytów |
| 21.10.2026 | 2 odczyty | 0 odczytów | 1619 odczytów |
| 22.10.2026 | 2 odczyty | 0 odczytów | 1626 odczytów |
| 23.10.2026 | 2 odczyty | 0 odczytów | 1630 odczytów |
| 24.10.2026 | 1 odczyt | 0 odczytów | 1584 odczyty |
| 25.10.2026 | 2 odczyty | 0 odczytów | 1572 odczyty |
| 26.10.2026 | 9 odczytów | 0 odczytów | 1537 odczytów |
| 27.10.2026 | 19 odczytów | 0 odczytów | 1523 odczyty |
| 28.10.2026 | 18 odczytów | 0 odczytów | 1518 odczytów |
| 29.10.2026 | 18 odczytów | 0 odczytów | 1531 odczytów |
| 30.10.2026 | 15 odczytów | 0 odczytów | 1620 odczytów |
| 31.10.2026 | 13 odczytów | 0 odczytów | 1622 odczyty |
| 01.11.2026 | 18 odczytów | 0 odczytów | 1654 odczyty |
| 02.11.2026 | 15 odczytów | 0 odczytów | 1689 odczytów |
| 03.11.2026 | 12 odczytów | 0 odczytów | 1603 odczyty |
| 04.11.2026 | 11 odczytów | 0 odczytów | 1703 odczyty |
| 05.11.2026 | 10 odczytów | 0 odczytów | 1548 odczytów |
| 06.11.2026 | 3 odczyty | 0 odczytów | 493 odczyty |
- Otwarte teraz
- 3stron: 3
- Nowe w ostatnim dniu
- 101.11.2026
- Otwarte od początku
- 17stron: 15
- Zamknięte
- 14od początku
- Mediana trwania
- 6 dni 10 hod wykrycia do zamknięcia
| Ustalenie | Skutek | Otwarte teraz | Łącznie | Zamknięte |
|---|---|---|---|---|
| Wygasanie certyfikatu SSL ssl_expiry | usterka niekrytyczna | 3 | 17 | 14 |
| Dzień | nowe ustalenia |
|---|---|
| 08.10.2026 | 0 ustaleń |
| 09.10.2026 | 0 ustaleń |
| 10.10.2026 | 0 ustaleń |
| 11.10.2026 | 2 ustalenia |
| 12.10.2026 | 0 ustaleń |
| 13.10.2026 | 0 ustaleń |
| 14.10.2026 | 1 ustalenie |
| 15.10.2026 | 0 ustaleń |
| 16.10.2026 | 0 ustaleń |
| 17.10.2026 | 0 ustaleń |
| 18.10.2026 | 0 ustaleń |
| 19.10.2026 | 0 ustaleń |
| 20.10.2026 | 0 ustaleń |
| 21.10.2026 | 0 ustaleń |
| 22.10.2026 | 0 ustaleń |
| 23.10.2026 | 0 ustaleń |
| 24.10.2026 | 0 ustaleń |
| 25.10.2026 | 1 ustalenie |
| 26.10.2026 | 3 ustalenia |
| 27.10.2026 | 0 ustaleń |
| 28.10.2026 | 0 ustaleń |
| 29.10.2026 | 0 ustaleń |
| 30.10.2026 | 0 ustaleń |
| 31.10.2026 | 0 ustaleń |
| 01.11.2026 | 1 ustalenie |
| 02.11.2026 | 0 ustaleń |
| 03.11.2026 | 0 ustaleń |
| 04.11.2026 | 0 ustaleń |
| 05.11.2026 | 0 ustaleń |
| 06.11.2026 | 0 ustaleń |
- Przebiegów
- 16sposób ssl
- W 30 dni
- 0przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- 1050suma z przebiegów
CARD
karta z kodu CREATO_PING, odczyt 22.09.2026Jak ten parametr trafia do ClickUpa: wynik sondy to linia w subtasku 2. Pomiar, a usterka, którą otwiera — linia w subtasku 1. Podsumowanie (z identyfikatorem CWE i kategorią OWASP), skąd liczy się wskaźnik zagrożenia i status strony. Projekcja z bazy skanera odświeża oba subtaski co godzinę. Do 22.09 każde ustalenie dostawało własny subtask i status ze starego słownika (PODATNA, WARNING…) — te słowa zostały jeszcze w części opisów pomiaru niżej jako język wewnętrzny sond.
| Obszar i ważność | Bezpieczeństwo · krytyczna (B02) |
|---|---|
| Workflow i częstotliwość | creato_ping_avail_v2 działa na LAB247Skaner 2.0, rytm „dostepnosc”: premium co 15 min, reszta co 3–12 h · Dawny workflow n8n avail_v2; od 20.09 te same sondy w rytmie kohort skanera. Sposób ssl daje odczyt ssl_expiry (dni do wygaśnięcia certyfikatu); odczyty trafiają do check_results. |
| Sonda i helper | sposób ssl · CREATO_PING/helpers/ssl_check.py |
| Testy |
|
| Typ wyniku | enum: ok / fail (odczyt ssl_expiry); od skanu 2026-09-18 04:07 UTC liczba dni, data końca ważności i zgodność nazwy w polu extra (days_to_expiry, not_after, hostname_match); brak stanu timeout |
| Jednostka | dni (liczba całkowita, zaokrąglenie w dół) |
| Próg i reguła | Reguła: dni ≤ 14 = fail („odnowienie nie zadziałało”). Timeout uzgadniania 4,0 s (+0,5 s marginesu). Próg 3 dni (SSL_CRITICAL_DAYS) nadal daje fail w helperze, ale zapis zamienia go na ok odczytu ssl i nie wpływa na ssl_expiry. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/config.py → SSL_WARN_DAYS (14), SSL_CRITICAL_DAYS (3), TIMEOUTS["ssl"]CREATO_PING/tools/avail_writer_input.py → SSL_WARN_DAYS (14, kopia stałej), _ssl_recordsCREATO_PING/helpers/site_params.py → CRITICAL_CHECK_TYPES (ssl_expiry poza listą) |
| Retencja odczytów | Surowy pomiar jako NIEZMIENNY wiersz tabeli `odczyty` w bazie skanera (wejście, wyjście, dowody, sha karty sondy i helpera, commit kodu) — trigger odrzuca każdą zmianę. Okno retencji z kohorty: 90 dni premium, 30 dni reszta; poza oknem zostają odczyty z werdyktem problemu, akcją albo etykietą, bo replay reguł ich potrzebuje (`skaner/retencja.py`). Spłaszczony wynik jedzie dodatkowo do tabeli `check_results` bazy LAB247 (skrzynka `state/checks_outbox` → timer co 10 min); tej tabeli kod LAB247 nie czyści. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/ssl_check.py · CREATO_PING/tools/avail_writer_input.py · CREATO_PING/helpers/config.py · CREATO_PING/helpers/availability_recheck.py · CREATO_PING/skaner/adapter_clickup.py · CREATO_PING/skaner/sprawy.py · CREATO_PING/helpers/site_params.py · LAB247/site/src/lib/parameters/stats.ts · CREATO_PING/skaner/usterki.toml · CREATO_PING/skaner/ocena.py · odczyt 22.09.2026 |
ssl_expiry: bramka polityki otwarta (gate=true) → sprawa w skanerze → Certyfikat wygasa wkrótce — waga 2 → ocena 3–4 (niebieski), status strony „niski”, dopóki sprawa jest otwarta. Okres łaski: 1. porażka zakłada sprawę ze statusem IN PROGRESS, której wskaźnik NIE liczy (`ocena.py` pomija sprawy niepotwierdzone), 2. porażka z rzędu potwierdza sprawę i dopiero wtedy usterka wchodzi do oceny. Pierwszy odczyt ok zamyka sprawę. To sprawdzenie ostrzegawcze: odnowienie certyfikatu zamyka sprawę przy pierwszym odczycie ok.
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| B02.01 | Wygasanie certyfikatu SSLssl_expiry | Średnia | Ewidentne | usterka niekrytyczna | tak / nie | waga 2 → ocena 3–4 (niebieski) | Sprawdź odnowienie Let's Encrypt / certyfikatu u hostingu. |
| Kod i klucz | B02.01 · ssl_expiry · w tabeli typów |
|---|---|
| Co znaczy | Certyfikat jest ważny, ale wygasa w ciągu 14 dni — automatyczne odnowienie nie zadziałało. |
| Kiedy powstaje | Rekord pochodny od wyniku ssl_check. Status fail, gdy certyfikat da się odczytać, days_to_expiry ≥ 0 i ≤ 14 (SSL_WARN_DAYS), a hostname_match nie jest False; w pozostałych przypadkach ok.Nie jest typem krytycznym, więc po 2. porażce dostaje WARNING. |
| Severity · pewność | Średnia · Ewidentne |
| Skutek dla strony | usterka niekrytyczna · zakłada Finding · alarm nie |
| Waga → ocena | waga 2 → ocena 3–4 (niebieski) |
| Klasyfikacja | OCSF 1.9.0: Compliance Finding (class_uid 2003) |
| Rekord OCSF | finding_info.analytic.uid = "B02.01" · analytic.name = "ssl_expiry" · finding_info.types = ["B02 SSL: dni do wygaśnięcia"] |
| Co zrobić | Sprawdź odnowienie Let's Encrypt / certyfikatu u hostingu. |
| Wersje typu |
|
LOOP
pętli: 2Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Sygnał: Status CERT nie istniał na liście statusów w ClickUp (dodano tam „no ssl”), więc pierwsza zmiana statusu skończyłaby się błędem API. Przy przeglądzie wyszła też luka: wygasły certyfikat przy udanym uzgadnianiu dawał zwykły fail, czyli DOWN. · dotyczy też: SSL: ważność certyfikatu
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznierozjazd nazwy statusu i luka reguły zauważone przy przeglądzie
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionenazwa NO SSL, wygasły = cert_invalid
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-08-13 | Status CERT przemianowany na NO SSL w zapisie i w kolejności statusów strony.helpers/clickup_writer_v2.py · helpers/site_params.py | Zapis musi wysyłać status istniejący na liście; CERT kończył się błędem 400. | cały system Zmienia nazwę statusu wszystkich stron z nieważnym certyfikatem. | 98ce862bez replayubez zapisu zatwierdzenia |
| 2026-08-13 | Odczyt certyfikatu: data wygaśnięcia już minęła przy udanym uzgadnianiu = cert_invalid (NO SSL) zamiast fail (DOWN).helpers/ssl_check.py · helpers/common.py | Serwer stoi, przeglądarka tylko zatrzymuje odwiedzającego — „nie działa” było mylące. | tylko ten parametr | 98ce862bez replayubez zapisu zatwierdzenia |
Sygnał: Przegląd harmonogramu: odczyt certyfikatu chodził tylko w odczycie co 6 h stron DOWN/WARNING, więc zły certyfikat na działającej stronie nie był wykrywany codziennie. · dotyczy też: SSL: ważność certyfikatu
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręczniepodgląd na 216 stronach przed włączeniem
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionecertyfikat codziennie, wygasanie osobno
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-16 | Odczyt certyfikatu w codziennym skanie dostępności; ważny certyfikat wygasający za ≤ 3 dni = ok, a wygasanie raportuje osobny odczyt ssl_expiry (≤ 14 dni, WARNING). Ta sama reguła w odczycie co 6 h.tools/avail_writer_input.py · helpers/availability_recheck.py · helpers/schedule_publish.py | ssl jest sprawdzeniem krytycznym — fail zrobiłby DOWN z działającej strony. | cały system Nowy odczyt ssl_expiry — parametr SSL: dni do wygaśnięcia zaczyna być mierzony. | cf89ebebez replayubez zapisu zatwierdzenia |
| 2026-09-16 | Gdy odczyt form adresu dał cert_invalid, odczyt certyfikatu z cert_invalid nie trafia do zapisu.tools/avail_writer_input.py | Jeden problem, jedno ustalenie. | tylko ten parametr | cf89ebebez replayubez zapisu zatwierdzenia |