HAproxy REQ_SSL_SNI y terminación SSL

HAproxy REQ_SSL_SNI y terminación SSL

Estoy intentando que haproxy funcione con REQ_SSL_SNI y terminación SSL.

Guías que he seguidohttps://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ https://stuff-things.net/2016/11/30/haproxy-sni/

Configuración: HA-Proxy versión 1.6.3 Ubuntu 16.04

El registro genera lo siguiente:

Entrada HTTP ~ entrada 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

¿Qué me estoy perdiendo?

¿Alguien me puede apuntar en la dirección correcta?

Respuesta1

Intenta usar ssl_fc_sni:

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

Básicamente, al terminar/descifrar SSL, debe usar ssl_fc_sni(obtiene SNI de la API de OpenSSL).

Al pasarlo a través del modo TCP, debe usar req_ssl_sni(analiza SNI en un paquete TCP).

De los documentos:

ssl_fc_sni: cadena

Esto extrae el campo de extensión TLS de indicación del nombre del servidor (SNI) de una conexión entrante realizada a través de una capa de transporte SSL/TLS y descifrada localmente por haproxy. El resultado (cuando está presente) normalmente es una cadena que coincide con el nombre de host HTTPS (253 caracteres o menos). La biblioteca SSL debe haberse creado con soporte para extensiones TLS habilitadas (verifique haproxy -vv).

Esta recuperación es diferente de "req_ssl_sni" anterior en que se aplica a la conexión que se descifra mediante haproxy y no al contenido SSL que se reenvía ciegamente. Consulte también "ssl_fc_sni_end" y "ssl_fc_sni_reg" a continuación. Esto requiere que la biblioteca SSL esté compilada con soporte para extensiones TLS habilitadas (verifique haproxy -vv).

Derivados de ACL:

  • ssl_fc_sni_end: coincidencia de sufijo
  • ssl_fc_sni_reg: coincidencia de expresiones regulares

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

información relacionada