Chrome od dawna nie wykorzystuje protokołu Online Certificate Status Protocol (OCSP) do weryfikacji czy certyfikaty TLS (SSL) typu Domain Validation (DV) i Organization Validation (OV) są unieważnione. Niedługo przestanie to robić także dla certyfikatów TLS typu Extended Validation (EV).
OCSP a kwestia prywatności użytkowników
W żądaniu OCSP do serwera OCSP obsługiwanego przez wystawcę (urząd certyfikacji) danego certyfikatu przekazywany jest numer seryjny certyfikatu, którego status chcemy poznać. Wchodząc więc na stronę https://kryptosfera.pl do serwera OCSP trafia takie żądanie:
Pole serialNumber
zawiera numer seryjny certyfikatu TLS zainstalowanego na https://kryptosfera.pl. Mając numer seryjny można z łatwością z wykorzystaniem publicznie dostępnych narzędzi sprawdzić dla jakiej domeny został wystawiony. Istnieje więc ryzyko, że ktoś niepowołany dowie się jakie strony WWW odwiedzaliśmy np. w wyniku włamania do infrastruktury wystawcy czy podsłuchania ruchu sieciowego (transport żądań i odpowiedzi OCSP odbywa się protokołem HTTP). I własnie ten powód, prywatność użytkowników Chrome (dozwolone jest w tym momencie delikatne uśmiechnięcie się pod nosem ;)), Google podaje jako główne uzasadnienie swojej decyzji o rezygnacji z weryfikacji OCSP także dla certyfikatów TLS EV:
OCSP requests reveal details of individuals’ browsing history to the operator of the OCSP responder. These can be exposed accidentally (e.g., via data breach of logs) or intentionally (e.g., via subpoena). This is part of why Chrome doesn’t do OCSP checks for Domain Validated (DV) or Organization Validated (OV) certificates by default, and starting in version 106, Chrome won’t do them for Extended Validation (EV) certificates either, to better protect users’ privacy.
Jak możemy przeczytać w tym krótkim komunikacie zmiana wejdzie w życie w Chrome w wersji 106.
Co w zamian?
CRLSets i OCSP Stapling:
Select revocation checking support will continue to be available through CRLSets, and OCSP stapling will still be supported.
CRLSets to mechanizm opracowany parę ładnych lat temu przez Google, który polega na tym, że dane o unieważnieniach certyfikatów zbierane są z wielu list CRL (Cerificate Revocation List) udostępnianych przez wystawców. Następnie jest to łączone w jedną całość i wykorzystywane w czasie weryfikacji certyfikatu TLS podczas negocjacji szyfrowanego połączenia. Na papierze wygląda dobrze, ale trzeba dodać, że właściwie od początku jego implementacji pojawiały się zarzuty dotyczące skuteczności działania.
OSCP Stapling to z kolei mechanizm w którego zasada działania jest taka sama jak stadardowego OCSP z tą różnicą, że zapytania do serwera OCSP nie są wysyłane każdorazowo przez przeglądarkę, tylko co jakiś czas przez serwer obsługujący daną stronę WWW (wymagana to odpowiedniej konfiguracja serwera HTTP). Eliminuje to narzut sieciowy potrzebny do zestawienia połączenia HTTPS co w ogólnym rozrachunku skraca czas ładowania całej strony. Dodatkowo chroniona jest prywatność użytkowników, bo w logach serwera OCSP znajdzie się jedynie adres IP serwera, a nie użytkownika końcowego.
Jak to działa i będzie działało w praktyce?
Z moich obserwacji wynika, że różnie z tym bywa. Dla testu można odwiedzić strony z testowymi certyfikatami unieważnionymi, które musi publicznie udostępniać każdy urząd certyfikacji i samemu zobaczyć jak zachowa się Wasz Chrome. Listę takich strona można znaleźć w zestawieniu Mozilli, kolumna Test Website – Revoked.
Ja wybrałem z podanej listy pięć takich stron i sprawdziłem jak przedstawia się to w najnowszym Firefoksie i w najnowszym Chrome. Wyniki w tabelce:
URL | Data unieważnienia | Firefox | Chrome |
https://ssltest-revoked.actalis.it/ | 2022-03-07 | błąd: SEC_ERROR_REVOKED_CERTIFICATE | strona załadowała się normalnie |
https://revoked.hongkongpost.gov.hk/ | 2022-05-27 | błąd: SEC_ERROR_REVOKED_CERTIFICATE | strona załadowała się normalnie |
https://revoked-isrgrootx1.letsencrypt.org/ | 2022-08-17 | błąd: SEC_ERROR_REVOKED_CERTIFICATE | strona załadowała się normalnie |
https://revoked.gsr4demo.pki.goog/ | 2022-08-18 | błąd: SEC_ERROR_REVOKED_CERTIFICATE | strona załadowała się normalnie |
https://revoked.e46.roots.globalsign.com/ | 2021-09-10 | błąd: SEC_ERROR_REVOKED_CERTIFICATE | strona załadowała się normalnie |
Te wyniki mogą być oczywiście różne w zależności systemu operacyjnego, wersji przeglądarki i innych czynników takich jak np. lokalny cache. Patrząc jednak na to, że certyfikat unieważnony 10 września ubiegłego roku (ostatni w tabelce) w Chrome jest przedstawiany jako ważny daje do myślenia czy kierunek obrany przez Google jest właściwy.