2015-01-05 7 views
3

Я пытаюсь создать основанную на SNI настройку frontend/backend в HAProxy. Кажется, что ssl_fc_has_sni всегда оценивает 0 в моем журнале, и я не смог понять, почему.haproxy sni ssl_fc_has_sni always 0

Это упрощенная версия конфигурации Я тестировал с:

global 
    user haproxy 
    group haproxy 
    daemon 
    log /dev/log local0 

defaults 
    timeout connect 5s 
    timeout client 30s 
    timeout server 30s 
    timeout tunnel 1h 
    log-format frontend:%f\ %b/%s\ client_ip:%Ci\ client_port:%Cp\ SSL_version:%sslv\ SSL_cypher:%sslc\ SNI:%[ssl_fc_has_sni]\ %ts 

frontend public_ssl 
    bind :443 
    log global 
    tcp-request inspect-delay 5s 
    tcp-request content accept if { req_ssl_hello_type 1 } 

    use_backend be_sni if { ssl_fc_has_sni } 
    default_backend be_no_sni 

backend be_sni 
    server fe_sni 127.0.0.1:10444 weight 1 send-proxy 

frontend fe_sni 
    #terminate with a cert that matches the sni host 
    bind 127.0.0.1:10444 ssl crt /mycertdir/certs accept-proxy no-sslv3 
    default_backend be_default 

frontend fe_no_sni 
    #terminate with a generic cert 
    bind 127.0.0.1:10443 ssl crt /myothercertdir/default_pub_keys.pem accept-proxy no-sslv3 
    default_backend be_default 

# backend for when sni does not exist, or ssl term needs to happen on the edge 
backend be_no_sni 
    server fe_no_sni 127.0.0.1:10443 weight 1 send-proxy 

backend be_default 
    mode http 
    option forwardfor 
    option http-pretend-keepalive 
    server the_backend 127.0.0.1:8080 

Другие товары примечания:

  • haproxy -vv показывает библиотека OpenSSL поддерживает SNI: да
  • Я бегущая версия haproxy 1.5.9 на fedora 20 через бродягу
  • журнал всегда показывает SNI: 0 haproxy[17807]: frontend:public_ssl be_no_sni/fe_no_sni client_ip:<ip> client_port:42285 SSL_version:- SSL_cypher:- SNI:0 --
  • Я тестирую openssl s_client -servername www.example.com -connect <ip>:443.

Я чувствую, что мне не хватает чего-то очевидного, так как нет версии ssl, cypher или sni.

ответ

2

Похоже, что ssl_fc_has_sni предназначен для использования после прекращения действия. Проверка наличия узла SNI может быть выполнена с помощью:

frontend public_ssl 
    bind :443 
    mode tcp 
    tcp-request inspect-delay 5s 
    tcp-request content accept if { req_ssl_hello_type 1 } 
    use_backend be_sni if { req.ssl_sni -m found } 
    default_backend be_no_sni 

 Смежные вопросы

  • Нет связанных вопросов^_^