Сервер бэкенда Haproxy недоступен из-за недействительного ответа на уровне 6, не удалось выполнить SSL-рукопожатие?

Вопрос или проблема

У нас есть два сервера, которые находятся в разных сетях. Мы хотим иметь ssl-связь от клиента к фронтэнду и от фронтэнда к бэкенду.

Фронтенд может принимать и завершать ssl-трафик, связь ssl на бэкенде не происходит, с следующей ошибкой:

Серверные узлы/web02 отключены, причина: некорректный ответ Layer6, информация: “ошибка SSL рукопожатия”, время проверки: 546 мс “

Конфигурационный файл haproxy:


global
  log 127.0.0.1 local1 debug
  maxconn 4000
  daemon
  uid 99
  gid 99
  stats socket /tmp/haproxy.stats level admin

defaults
  mode http
  log     global
  option forwardfor
  option http-server-close
  timeout server 5s
  timeout connect 5s
  timeout client 5s

frontend www-https
   bind  <Ip-address>:443 ssl crt /home/user/SSL/domain-name.in.pem
   reqadd X-Forwarded-Proto:\ https
   default_backend nodes

backend nodes
   
    balance roundrobin
    cookie JSESSIONID prefix indirect nocache
   server web01 <IP-address>:8443 ssl verify none check cookie web01
    server web02 <IP-address>:8443  ssl  crt /home/SSL/domain-name.in.pem ca-file /home/SSL/gdig2.crt  verify required   check cookie web02

Любая помощь в этом будет очень признательна

Мы хотим иметь ssl-связь от … фронтэнда к бэкенду

Это не имеет смысла: между фронтендом haproxy и бэкендом haproxy нет TCP-соединения. Это логическое отображение, внутреннее для процесса haproxy. Ваша фактическая настройка TLS бэкенда осуществляется на самом сервере бэкенда <IP-address>:8443 для web02.

Таким образом, ошибка SSL handshake failure, которую вы получаете, возникает из-за того, что HAproxy не может подтвердить сертификат web02, используя данный сертификат ca-file. Либо ваша клиентская аутентификация не проходит (та, которая указана через server web02 ... ssl crt ...). Посмотрев на строку бэкенда:

server web02 <IP-address>:8443  ssl  crt /home/SSL/domain-name.in.pem ca-file /home/SSL/gdig2.crt  verify required   check cookie web02

Вы уверены, что намеревались использовать клиентскую аутентификацию? Если да, пожалуйста, проверьте ваш клиентский сертификат: мне очень необычно использовать один и тот же сертификат для клиентской аутентификации, который вы также используете для обслуживания TLS в своем специфицированном фронтенде haproxy (/home/SSL/domain-name.in.pem).

Ответ или решение

Аргументы по проблеме "Сервер backend недоступен из-за неправильного ответа на уровне 6: сбой SSL-рукопожатия в HAProxy"

Введение

Настройка безопасной связи между клиентом и сервером с использованием прокси-сервера HAProxy часто сопровождается проблемами, связанными с процессом SSL-рукопожатия. Ошибка, упомянутая вами – "Layer 6 invalid response, info: SSL handshake failure" – указывает на то, что HAProxy не может установить безопасное соединение с бэкенд-сервером. Давайте детально проанализируем вашу конфигурацию и возможные причины возникновения данной ошибки.

Анализ конфигурации

  1. SSL-терминация и настройки HAProxy:

    • В вашем конфигурационном файле HAProxy указано, что фронтэнд принимает SSL-трафик, а бэкенд также настроен для работы через SSL, используя адреса серверов на порту 8443. Важно отметить, что на бэкенде сертификаты должны быть настроены корректно, чтобы HAProxy мог их проверить.
  2. Верификация сертификатов:

    • В строке конфигурации сервера web02 указано verify required, что требует обязательной верификации сертификатов. Это значит, что HAProxy будет проверять, действительно ли сертификат web02 подписан удостоверяющим центром (CA), указанным в ca-file /home/SSL/gdig2.crt.
    • Если сертификат web02 не соответствует ожидаемому CA, это приведет к сбою рукопожатия SSL и, как следствие, к статусу DOWN для этого сервера.
  3. Клиентская аутентификация:

    • Ваша конфигурация для web02 также пытается использовать клиентский сертификат (crt /home/SSL/domain-name.in.pem). Убедитесь, что сертификат, используемый для клиентской аутентификации, корректен и соответствует требованиям бэкенд-сервера. Как правило, клиентский сертификат отличается от сертификата, используемого для обеспечения TLS на фронтэнде и бэкенде.
  4. Настройки бэкенда:

    • Проверьте, действительно ли бэкенд-сервер web02 слушает на порту 8443 и может принимать запросы. Использование инструментов вроде curl для тестирования соединения может помочь в диагностике.

Рекомендации по устранению неполадок

  1. Проверьте сертификаты:

    • Убедитесь, что сертификат, установленный на web02, является действительным и подписан корректным удостоверяющим центром, указанным в ca-file. Используйте команду openssl s_client -connect <IP-address>:8443 -CAfile /home/SSL/gdig2.crt для тестирования SSL-соединения.
  2. Перепроверьте конфигурацию:

    • Убедитесь, что необходимо ли использовать клиентскую аутентификацию для web02. Если это не требуется, уберите параметр crt из конфигурации.
  3. Логи и отладка:

    • Увеличьте уровень логирования в секции global до debug и просмотрите логи HAProxy для получения более подробной информации о сбое.
  4. Рассмотрите возможность использования ssl backend:

    • Убедитесь, что вы правильно настроили все параметры для работы с HTTPS на бэкенде. Проверьте, поддерживает ли ваш сервер на 8443 сертификаты, которые он ожидает получить.

Заключение

Ошибки, связанные с SSL-рукопожатием, могут быть вызваны различными факторами, включая неправильные сертификаты, отсутствие необходимых ключей или неверные конфигурации серверов. Внимательно проанализировав ваш текущий конфигурационный файл и следуя приведенным выше рекомендациям, вы сможете устранить возникшие проблемы и восстановить стабильную работу вашего HAProxy.

Оцените материал
Добавить комментарий

Капча загружается...