Назад | Перейти на главную страницу

Ошибка подтверждения Haproxy SSL

У меня проблема с одним конкретным клиентом, который попадает в мой балансировщик нагрузки haproxy. Сообщение об ошибке в журналах haproxy:]

incoming_ssl/1: SSL handshake failure

Рассматриваемый клиент, похоже, является некоторым клиентом Apache Java или сервером ActiveMq - в любом случае, это удаленный сервер, над которым мы не имеем никакого контроля.

Используя ssldump, я вижу эти строки:

11 5  0.4152 (0.1649)  C>S  Alert
    level           fatal
    value           certificate_unknown
11    0.4152 (0.0000)  C>S  TCP FIN

Используя curl / browser, все выглядит нормально, и я сделал несколько проверок ssl, которые не сообщают о таких проблемах.

Я удалил как можно больше из моего файла конфигурации haproxy, чтобы диагностировать проблему. Я даже протестировал прямое подключение к внутреннему серверу (NodeJS), который отлично работает - клиент может подключиться. Это defo haproxy, просто не знаю, как это исправить.

Мой основной файл конфигурации haproxy выглядит так:

frontend incoming_ssl
  bind *:443 ssl crt /etc/haproxy/cert.key ca-file /etc/haproxy/cert.pem ciphers ECDHE-RSA-AES256-SHA:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM
  acl flume hdr_dom(host) -i dom.ain.com
  use_backend flume if flume

backend flume :80
  server flume 10.40.14.1:8000 weight 1 maxconn 1000 check inter 2000

Также пробовали использовать бэкэнд ssl - та же проблема. Также пытались удалить раздел шифра.

Я использую сертификаты godaddy, которые кажутся нормальными для curl / браузеров, если настройка немного раздражает.

Что еще я могу сделать, чтобы это заработало? Я использую последнюю версию 26 haproxy 1.5, но также пробовал другие недавние версии.

Этот клиент не распознает сертификат как действительный.

Промежуточные сертификаты Godaddy должны быть включены в файл, загружаемый с помощью "crt".

Убедитесь, что вся цепочка сертификатов правильно включена в сертификат сервера:

crt /etc/haproxy/cert.key

Из документации haproxy для ключевого слова "crt":

Некоторые центры сертификации (например, Godaddy) предлагают раскрывающийся список типов серверов, которые не включают HAProxy при получении сертификата. Если это произойдет, обязательно выберите веб-сервер, который, по мнению CA, требует промежуточного CA (для Godaddy выбор Apache Tomcat даст правильный пакет, но многие другие, например nginx, приводят к неправильному пакету, который не будет работать для некоторых клиентов) .

Я также установил haproxy (2016-05) и в журнале я получил ошибку

ssl / 1: сбой подтверждения SSL

Кажется, что ssh v2 ждет сервера, прежде чем говорить, в результате чего haproxy принимает его за ssl-соединение.

Исправление заключалось в добавлении следующих строк в ~ / .ssh / config

Host my.host.com
  HostName my.host.com
  Port 443
  User MeMe
  ProxyCommand openssl s_client -connect my.host.com:443 -quiet

Я думаю, вы ошибаетесь насчет того, что делает ca-file.

Сделай это:

cd /etc/haproxy
cat cert.pem cert.key > cert.bundle

bind *:443 ssl crt /etc/haproxy/cert.bundle ciphers ECDHE-RSA-AES256-SHA:-RC4-SHA:HIGH:!MD5:!aNULL:!EDH