Apache Error AH02808: Unexpected protocol message during TLS — Решение
В журнале ошибок error.log веб-сервера Apache регулярно фиксируются сообщения об аномалиях сетевого рукопожатия: [ssl:error] [pid 1234:tid 5678] [client 203.0.113.15:43210] AH02808: Alert: Client sent unexpected protocol message during TLS handshake.
| Источник запроса | Что реально отправлено клиентом | Что ожидал Apache mod_ssl |
|---|---|---|
| Незашифрованный HTTP клиент | Обычный текстовый запрос GET / HTTP/1.1 на 443 порт | Бинарный пакет ClientHello протокола TLS |
| Сетевые сканеры / Боты | Мусорные пакеты, SSH/RDP зонды, fuzzing-тесты | Корректная структура криптографического пакета |
| Мониторинг / Health check | Сырой TCP-ping без закрытия сессии | Полноценное согласование шифров (Cipher Suites) |
- Сервер сбрасывает TCP-соединение, отправляя клиенту TLS Alert (Handshake Failure).
- В подавляющем большинстве случаев ошибка вызвана внешними ботами или ошибочными запросами по протоколу
http://на порт443.
- Проверьте, какой IP-адрес генерирует ошибку в
error.log. Если это внешний публичный IP, в 99% случаев это автоматизированные сканеры интернета (Shodan, Censys) или боты. - Если ошибку генерирует ваш собственный сервис или балансировщик нагрузки (AWS ELB, HAProxy, Kubernetes Ingress), убедитесь, что проверка здоровья (Health Check) использует правильный протокол:
# НЕПРАВИЛЬНО (TCP/HTTP пинг на SSL порт): curl http://yourdomain.com:443/ # ПРАВИЛЬНО: curl https://yourdomain.com/ - Убедитесь, что порт 443 на сервере настроен строго с включенным SSLEngine:
<VirtualHost *:443> ServerName yourdomain.com SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/privkey.pem </VirtualHost> - Проверьте поддерживаемые версии протоколов TLS в
/etc/apache2/mods-available/ssl.conf(рекомендуется отключить устаревшие TLSv1.0 и TLSv1.1):SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 - Если логи перегружены подобными записями от внешних ботов, понизьте детализацию логирования для модуля ssl:
LogLevel ssl:warn - Перезагрузите веб-сервер:
sudo systemctl reload apache2 # или httpd.
http://domain.com:443, браузер отправит незашифрованный текстовый HTTP-запрос в зашифрованный SSL-порт. Apache не сможет расшифровать первый байт и запишет в лог ошибку AH02808.Частые вопросы (FAQ)
Опасна ли ошибка AH02808 для безопасности сервера?
Нет, это стандартная реакция библиотеки OpenSSL на некорректно сформированный пакет данных. Соединение мгновенно изолируется и закрывается.
Как настроить автоматический редирект с HTTP на HTTPS?
В блоке <VirtualHost *:80> пропишите: RewriteEngine On и RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L].
Что делать, если ошибка повторяется каждую секунду с одного IP?
Это признак сканирования портов или DoS-атаки. Заблокируйте проблемный IP-адрес через фаервол: sudo ufw insert 1 deny from 203.0.113.15 to any.
Может ли устаревший браузер вызывать AH02808?
Да, если старый клиент (например, на Windows XP) пытается использовать протоколы SSLv2/SSLv3, которые полностью отключены в современном веб-сервере.