HAproxy REQ_SSL_SNI e rescisão SSL

HAproxy REQ_SSL_SNI e rescisão SSL

Estou tentando fazer com que o haproxy funcione com REQ_SSL_SNI e terminação SSL.

Guias que seguihttps://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ https://stuff-things.net/2016/11/30/haproxy-sni/

Configuração: HA-Proxy versão 1.6.3 Ubuntu 16.04

O log gera o seguinte:

Entrada HTTP ~ http-in/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

o que estou perdendo?

Alguém pode me apontar na direção certa?

Responder1

Tente usar ssl_fc_sni:

    acl is_site1 ssl_fc_sni foo.foobar.com
    acl is_site2 ssl_fc_sni foobar.com

Basicamente, ao finalizar/decifrar SSL, você deve usar ssl_fc_sni(obtém SNI da API OpenSSL).

Ao passar pelo modo TCP, você deve usar req_ssl_sni(analisa SNI em um pacote TCP).

Dos documentos:

ssl_fc_sni: string

Isso extrai o campo de extensão TLS de indicação de nome de servidor (SNI) de uma conexão de entrada feita por meio de uma camada de transporte SSL/TLS e decifrada localmente por haproxy. O resultado (quando presente) normalmente é uma string que corresponde ao nome do host HTTPS (253 caracteres ou menos). A biblioteca SSL deve ter sido construída com suporte para extensões TLS habilitadas (verifique haproxy -vv).

Essa busca é diferente de "req_ssl_sni" acima porque se aplica à conexão que está sendo decifrada pelo haproxy e não ao conteúdo SSL sendo encaminhado cegamente. Consulte também "ssl_fc_sni_end" e "ssl_fc_sni_reg" abaixo. Isso requer que a biblioteca SSL seja construída com suporte para extensões TLS habilitadas (verifique haproxy -vv).

Derivados de ACL:

  • ssl_fc_sni_end: correspondência de sufixo
  • ssl_fc_sni_reg: correspondência de regex

https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#7.3.4-ssl_fc_sni

informação relacionada