Я пытаюсь заставить haproxy работать с REQ_SSL_SNI и терминацией SSL.
Руководства, которым я следовалhttps://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ https://stuff-things.net/2016/11/30/haproxy-sni/
Настройка: HA-Proxy версии 1.6.3 Ubuntu 16.04
В журнале генерируется следующее:
HTTP-вход ~ http-вход/NOSRV-1/-1/12 0 SC 0/0/0/0/0 0/0
frontend http-in
bind *:443 ssl crt /etc/haproxy/certs/
log global
reqadd X-Forwarded-Proto:\ https
mode tcp
option tcplog
# wait up to 5 seconds from the time the tcp socket opens
# until the hello packet comes in (otherwise fallthru to the default)
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
acl is_site1 req_ssl_sni -i foo.foobar.com
acl is_site2 req_ssl_sni -i foobar.com
use_backend www-foo-foobar if is_site1
use_backend www-foobar if is_site2
backend www-foo-foobar
log global
mode tcp
option tcplog
redirect scheme https if !{ ssl_fc }
server www-1 127.0.0.1:3030 check
backend www-foobar
log global
mode tcp
option tcplog
redirect scheme https if !{ ssl_fc }
server www-1 127.0.0.1:5000 check
Что я упускаю?
Может ли кто-нибудь указать мне правильное направление?
решение1
Попробуйте использовать ssl_fc_sni
:
acl is_site1 ssl_fc_sni foo.foobar.com
acl is_site2 ssl_fc_sni foobar.com
По сути, при завершении/расшифровке SSL вам необходимо использовать ssl_fc_sni
(получает SNI из API OpenSSL).
При передаче через режим TCP необходимо использовать req_ssl_sni
(анализирует SNI в пакете TCP).
Из документов:
ssl_fc_sni : строка
Это извлекает поле расширения TLS (SNI) Server Name Indication из входящего соединения, установленного через транспортный уровень SSL/TLS и локально расшифрованного haproxy. Результат (если присутствует) обычно представляет собой строку, соответствующую имени хоста HTTPS (253 символа или меньше). Библиотека SSL должна быть собрана с включенной поддержкой расширений TLS (проверьте haproxy -vv).
Эта выборка отличается от "req_ssl_sni" выше тем, что она применяется к соединению, расшифровываемому haproxy, а не к содержимому SSL, которое слепо пересылается. См. также "ssl_fc_sni_end" и "ssl_fc_sni_reg" ниже. Для этого требуется, чтобы библиотека SSL была собрана с поддержкой включенных расширений TLS (проверьте haproxy -vv).
Производные ACL:
- ssl_fc_sni_end : совпадение суффикса
- ssl_fc_sni_reg : соответствие регулярному выражению
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#7.3.4-ssl_fc_sni