Ошибка TLS handshake при соединении с сервером, где развернут HAProxy (предполагается, что «happ» — опечатка «haproxy»). Соединение обрывается на этапе согласования SSL/TLS, клиент получает «handshake failure» или «SSL_ERROR_SSL».
Причины (наиболее частые при HAProxy):
1. Сертификат истёк, повреждён или не соответствует имени (CN/SAN).
2. Неполная цепочка сертификатов (отсутствует промежуточный CA).
3. Закрытый ключ не включён в файл сертификата, защищён паролем или имеет неверный формат.
4. Несовместимость версий TLS (например, клиент поддерживает только TLS 1.0, а HAProxy запрещает).
5. Настройка ciphers слишком строгая (не поддерживается клиентом).
6. Конфигурация HAProxy указывает на несуществующий файл или директорию с сертификатами.
Решение:
1. Проверка сертификата и ключа:
bash
openssl x509 -in /etc/haproxy/certs/cert.pem -text -noout # срок, CN, SAN
openssl rsa -in /etc/haproxy/certs/cert.pem -check -noout # проверка ключа
openssl verify -CAfile ca-chain.pem cert.pem # цепочкаЕсли ключ зашифрован паролем — снять:
`openssl rsa -in key.pem -out key_dec.pem && cat cert.pem key_dec.pem > combined.pem`
2. Формат файла сертификата для HAProxy:
Единый PEM-файл: [сертификат][промежуточные][ключ]. Порядок важен.
3. Конфигурация HAProxy (frontend):
haproxy
bind :443 ssl crt /etc/haproxy/certs/combined.pem
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...Альтернатива — указать отдельно `crt` и `key` (два файла) в строке `bind`.
4. Проверка логов HAProxy:
bash
tail -f /var/log/haproxy.log | grep -E "SSL|handshake|error"5. Тест рукопожатия с внешнего хоста:
bash
openssl s_client -connect yourdomain.com:443 -tls1_2 -servername yourdomain.comИскать строку `SSL handshake has read ...` без ошибок.
6. Если проблема на стороне клиента:
- Обновить OpenSSL и системное время (`ntpdate pool.ntp.org`).
- Убедиться, что клиент поддерживает cipher и версию TLS, разрешённые на HAProxy.
7. Если конфигурация HAProxy не перезагружена:**
bash
haproxy -f /etc/haproxy/haproxy.cfg -c # проверка синтаксиса
systemctl reload haproxyВсе действия легальны и направлены на восстановление штатной работы собственного сервера/сервиса. Если под «happ» подразумевается другой софт — уточните.