HAproxy REQ_SSL_SNI und SSL-Terminierung

HAproxy REQ_SSL_SNI und SSL-Terminierung

Ich versuche, Haproxy mit REQ_SSL_SNI und SSL-Terminierung zum Laufen zu bringen.

Anleitungen, denen ich gefolgt binhttps://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ https://stuff-things.net/2016/11/30/haproxy-sni/

Setup: HA-Proxy Version 1.6.3 Ubuntu 16.04

Das Protokoll generiert Folgendes:

HTTP-in ~ 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

Was vermisse ich?

Kann mir jemand den richtigen Weg weisen?

Antwort1

Versuchen Sie es mit ssl_fc_sni:

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

Grundsätzlich müssen Sie beim Beenden/Entschlüsseln von SSL Folgendes verwenden ssl_fc_sni(ruft SNI von der OpenSSL-API ab).

Wenn Sie es über den TCP-Modus weiterleiten, müssen Sie verwenden req_ssl_sni(analysiert SNI in einem TCP-Paket).

Aus den Dokumenten:

ssl_fc_sni: Zeichenfolge

Dadurch wird das TLS-Erweiterungsfeld (Server Name Indication, SNI) aus einer eingehenden Verbindung extrahiert, die über eine SSL/TLS-Transportschicht hergestellt und lokal von haproxy entschlüsselt wurde. Das Ergebnis (sofern vorhanden) ist normalerweise eine Zeichenfolge, die dem HTTPS-Hostnamen entspricht (253 Zeichen oder weniger). Die SSL-Bibliothek muss mit aktivierter Unterstützung für TLS-Erweiterungen erstellt worden sein (prüfen Sie haproxy -vv).

Dieser Abruf unterscheidet sich von „req_ssl_sni“ oben darin, dass er für die von haproxy entschlüsselte Verbindung gilt und nicht für SSL-Inhalte, die blind weitergeleitet werden. Siehe auch „ssl_fc_sni_end“ und „ssl_fc_sni_reg“ unten. Dies erfordert, dass die SSL-Bibliothek mit aktivierter Unterstützung für TLS-Erweiterungen erstellt wird (prüfen Sie haproxy -vv).

ACL-Derivate:

  • ssl_fc_sni_end: Suffix-Übereinstimmung
  • ssl_fc_sni_reg: Regex-Übereinstimmung

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

verwandte Informationen