На одном из серверов в логах apache увидел такую ошибку:
[ssl:error] [pid 1237] AH02217: ssl_stapling_init_cert: can't retrieve issuer certificate! [subject: CN=*.example.com / issuer: CN=GlobalSign GCC R6 AlphaSSL CA 2023,O=GlobalSign nv-sa,C=BE / serial: 11122233
3444555666777CCC / notbefore: Nov 22 14:16:04 2024 GMT / notafter: Dec 24 14:16:03 2025 GMT]
[ssl:error] [pid 1237] AH02604: Unable to configure certificate test.example.com:443:0 for stapling
Ошибка проявляется при включённой настройке в конфиге сайта:
SSLUseStapling onOCSP Stapling (Online Certificate Status Protocol Stapling) — это механизм оптимизации проверки отзыва SSL/TLS-сертификатов, который повышает безопасность и производительность.
Вместо того чтобы клиент (браузер) самостоятельно запрашивал у OCSP-сервера Удостоверяющего Центра (CA) статус сертификата "не отозван ли он?", веб-сервер (Apache) периодически сам получает свежую подписанную квитанцию от OCSP-сервера и прикрепляет (staple) её к TLS-рукопожатию.
- Производительность — не нужно ждать ответа от OCSP-сервера
- Конфиденциальность — CA не получает информацию о ваших посетителях
- Надёжность — не зависит от доступности OCSP-серверов CA
Ошибка AH02217 означает, что Apache не может инициализировать stapling, потому что не может построить цепочку доверия для проверки статуса. Это не значит, что stapling не работает вообще, а что он может быть настроен некорректно. В моём случае сервер не смог найти цепочку сертификатов, а именно корневой и промежуточный сертификат.
В Apache за stapling отвечает mod_ssl. Для Apache до версии 2.4.8 fullchain указывается в параметре SSLCertificateChainFile. Для Apache 2.4.8+ fullchain указывается в SSLCertificateFile, там же где и сам сертификат в формате:
-----BEGIN CERTIFICATE-----
СЕРТИФИКАТ ДОМЕНА В BASE64
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
ПРОМЕЖУТОЧНЫЙ СЕРТИФИКАТ В BASE64
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
КОРНЕВОЙ СЕРТИФИКАТ В BASE64
-----END CERTIFICATE-----Добавил туда цепочку и проблема ушла.
Какие могут быть ещё параметры в конфигурации:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/example.com/cert.pem
SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
SSLCertificateChainFile /etc/ssl/example.com/chain.pem
# Включаем stapling
SSLUseStapling On
# Где хранить кэш stapling (shared memory)
SSLStaplingCache shmcb:/var/run/ocsp(128000)
# Файл доверенных CA для проверки OCSP-ответа
SSLTrustedCAFile /etc/ssl/certs/ca-bundle.pem
# Таймауты и поведение при ошибках респондера
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors Off
# Опционально форсим адрес OCSP (обычно не требуется)
# SSLStaplingForceURL http://ocsp.ca.test/
</VirtualHost>- SSLUseStapling On и SSLTrustedCAFile — минимум, чтобы stapling заработал.
- SSLStaplingCache — нужен для межпроцессного кэша; используйте shmcb: с достаточным размером. Кэш не переживает перезагрузку ОС (это не persistent storage).
- SSLStaplingReturnResponderErrors Off — если OCSP-узел возвращает ошибку, Apache не будет ее прикладывать к хендшейку, лучше вообще без ответки, чем с ошибкой.
- SSLStaplingForceURL пригодится только при нештатных сценариях (нестандартная AIA). Используйте осторожно: если CA меняет endpoint, вы останетесь с битой настройкой.
Логи Apache могут помочь: ищите AH01973 (ошибка обновления OCSP), AH01941 (проблемы с верификацией), AH01929 (stapling выключен для сертификата). У меня была ошибка AH02604 (Unable to configure certificate test.example.com:443:0 for stapling) и AH02217 (apache не может инициализировать stapling).
