Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH02261: Re-negotiation handshake failed (SSL renegotiation handshake error) Linux / DevOps

Apache Error AH02261: Re-negotiation handshake failed — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиентское подключение внезапно прерывается во время перехода в защищенный раздел сайта (например, при запросе клиентского сертификата 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Глобально или в VirtualHostHTTP/2 категорически запрещает renegotiation по спецификации RFC 7540
Клиент без сертификатаДиректива SSLVerifyClient requireКлиентский браузер отклонил отправку персонального сертификата
  • Браузер пользователя отображает ошибку ERR_SSL_PROTOCOL_ERROR или ERR_CONNECTION_RESET.
  • В HTTP/2 соединениях происходит мгновенный разрыв сессии кодом GOAWAY.
  1. Главное правило для 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>
  2. Если вам необходимо требовать сертификат только для одного каталога, отключите протокол HTTP/2 для этого конкретного виртуального хоста, оставив только стандартный HTTP/1.1:
    Protocols http/1.1
  3. Если ошибка вызвана устаревшими клиентами, разрешите безопасное пересогласование TLS в конфигурации mod_ssl:
    SSLOptions +OptRenegotiate
  4. Проверьте права и валидность цепочки доверия в файле SSLCACertificateFile.
  5. Протестируйте и примените конфигурацию: sudo apache2ctl configtest && sudo systemctl restart apache2.
Архитектура HTTP/2 и TLS 1.3: Протоколы TLS 1.3 и HTTP/2 полностью удалили поддержку механизма TLS Renegotiation из соображений безопасности и скорости. Специфичные для каталогов директивы SSLVerifyClient устарели — переносите закрытые разделы на отдельные выделенные поддомены (например, auth.example.com).
Практический опыт инженера: Если проект работает через балансировщик (Cloudflare, AWS ALB), mTLS пересогласование на уровне Apache работать не будет, так как TLS-сессия терминируется на балансировщике. Настраивайте Client Certificate Authentication на самом балансировщике.

Частые вопросы (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/.