Перейти к основному содержанию

Apache — can't retrieve issuer certificate!

Web Веб Интернет

На одном из серверов в логах 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 on

OCSP 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).

Теги

 

Похожие материалы

Drupal 9 — установка на Nginx в Ubuntu 22

Сегодня мы с вами установим Drupal 9 на веб-сервер Nginx на сервере с операционной системой Ubuntu Server 22.04. Drupal 10 устанавливается аналогично, но сегодня мне нужна именно девятая версия. Погнали.

Теги