Apache Error AH02261: Re-negotiation handshake failed — Решение
Клиентское подключение внезапно прерывается во время перехода в защищенный раздел сайта (например, при запросе клиентского сертификата mTLS). В error.log фиксируется отказ TLS: [ssl:error] [pid 1234:tid 5678] [client ...] AH02261: Re-negotiation handshake failed или AH02261: SSL renegotiation handshake failed: sslv3 alert certificate unknown.
| Сценарий | Местоположение директивы | Причина сбоя |
|---|---|---|
| Клиентская mTLS авторизация | Внутри блока <Location /secure> | Попытка повторного рукопожатия TLS поверх активного соединения |
| Протокол HTTP/2 | Глобально или в VirtualHost | HTTP/2 категорически запрещает renegotiation по спецификации RFC 7540 |
| Клиент без сертификата | Директива SSLVerifyClient require | Клиентский браузер отклонил отправку персонального сертификата |
- Браузер пользователя отображает ошибку
ERR_SSL_PROTOCOL_ERRORилиERR_CONNECTION_RESET. - В HTTP/2 соединениях происходит мгновенный разрыв сессии кодом
GOAWAY.
- Главное правило для HTTP/2: Пересогласование TLS (renegotiation) не поддерживается в протоколе HTTP/2. Если вам требуется клиентская аутентификация (
SSLVerifyClient), применяйте ее ко всему виртуальному хосту целиком в контексте<VirtualHost>, а не внутри блоков<Location>или<Directory>:<VirtualHost *:443> ServerName secure.example.com SSLEngine on # Настраиваем проверку сертификатов на уровне всего хоста: SSLCACertificateFile /etc/ssl/certs/ca-bundle.crt SSLVerifyClient require SSLVerifyDepth 2 </VirtualHost> - Если вам необходимо требовать сертификат только для одного каталога, отключите протокол HTTP/2 для этого конкретного виртуального хоста, оставив только стандартный HTTP/1.1:
Protocols http/1.1 - Если ошибка вызвана устаревшими клиентами, разрешите безопасное пересогласование TLS в конфигурации
mod_ssl:SSLOptions +OptRenegotiate - Проверьте права и валидность цепочки доверия в файле
SSLCACertificateFile. - Протестируйте и примените конфигурацию:
sudo apache2ctl configtest && sudo systemctl restart apache2.
SSLVerifyClient устарели — переносите закрытые разделы на отдельные выделенные поддомены (например, auth.example.com).Частые вопросы (FAQ)
Что такое TLS Renegotiation?
Это процедура повторного выполнения TLS-рукопожатия внутри уже установленного зашифрованного канала для изменения параметров шифрования или запроса сертификата пользователя.
Почему TLS renegotiation считается небезопасным?
Исторически уязвимость CVE-2009-3555 позволяла злоумышленникам внедрять префиксные данные в HTTP-сессию при небезопасном пересогласовании, что привело к ограничению этой функции.
Что означает директива SSLOptions +OptRenegotiate?
Она оптимизирует пересогласование сессий, выполняя рукопожатие только при реальном изменении параметров клиентского сертификата.
Как проверить, поддерживает ли клиент mTLS сертификат?
Используйте cURL: curl -v --cert client.crt --key client.key https://secure.example.com/.