OCSP (Online Certificate Status Protocol) — протокол для проверки статуса SSL-сертификата в реальном времени. Позволяет браузеру узнать, не был ли отозван сертификат сайта до истечения срока его действия.
Как работает OCSP
- Браузер получает сертификат сайта при установке TLS-соединения.
- Из поля
Authority Information Access (AIA)извлекает URL OCSP-респондера удостоверяющего центра. - Отправляет HTTP-запрос: «Действителен ли сертификат с серийным номером X?»
- CA-респондер возвращает подписанный ответ:
good(действителен),revoked(отозван) илиunknown(неизвестен).
Классический OCSP имеет два недостатка: задержка 100–300 мс на каждое новое соединение (запрос к серверу CA) и раскрытие истории посещений пользователя CA — по запросам можно отследить, какие сайты посещает клиент.
OCSP Stapling
OCSP Stapling (RFC 6066) устраняет оба недостатка: сервер сам периодически запрашивает подписанный OCSP-ответ у CA и кэширует его на 24–48 часов. При TLS-рукопожатии сервер «прикрепляет» (staples) ответ к сертификату — браузер не делает отдельный запрос к CA.
Включение в Nginx:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
Проверка статуса: openssl s_client -connect example.com:443 -status — в ответе появится OCSP Response Status: successful.
OCSP Must-Staple
Расширение Must-Staple (RFC 7633) записывается в сам сертификат и требует от сервера обязательно предоставлять Stapled OCSP-ответ. Браузеры, не получившие ответ, отклоняют соединение. Расширение не получило широкого распространения: при недоступности OCSP-респондера сервер с Must-Staple уходит в outage.
История
Предшественник OCSP — CRL (Certificate Revocation List), появившийся в X.509 v2 (1993). CRL — файл со списком серийных номеров отозванных сертификатов, который браузер скачивал целиком. При тысячах отозванных сертификатов файл вырастал до мегабайтов. OCSP описан в RFC 2560 (1999) и заменил CRL опросом конкретного сертификата. OCSP Stapling стандартизирован в RFC 6066 (2011). Ответы OCSP подписываются приватным ключом CA — подделать нельзя.
Связь с хостингом
OCSP Stapling рекомендован для всех production-серверов: сокращает задержку установки HTTPS-соединения и снижает нагрузку на CA-серверы. Let's Encrypt поддерживает OCSP Stapling — ответы кэшируются certbot. В Apache аналогичная директива: SSLUseStapling on. Caddy включает OCSP Stapling автоматически без конфигурации.
Цепочка сертификатов должна быть корректно настроена для работы OCSP Stapling — Nginx должен получить возможность проверить промежуточный CA.
Сравнение методов проверки отзыва
| Метод | Механизм | Размер данных | Приватность |
|---|---|---|---|
| CRL | Список серийных номеров | МБ (скачивается целиком) | Хорошая |
| OCSP | Запрос по одному сертификату | Байты | Плохая (CA видит запросы) |
| OCSP Stapling | Ответ кэширован на сервере | Байты | Хорошая |
| CRLite (Firefox) | Фильтр Блума, встроен в браузер | КБ | Отличная |
Современные браузеры переходят к CRLite (Firefox 73+) и CRL Sets (Chrome) — локальные фильтры не требуют сетевых запросов и не раскрывают историю. Классический OCSP используется как резерв для сертификатов, не охваченных фильтром.