Como verificar a regra baseada em haproxy sni com curl?

3

Eu fiz uma configuração simples do HaProxy para passar o tráfego completo com base no campo SNI. Aqui está o meu haproxy.cfg

defaults
    log global
    timeout client 50s
    timeout client-fin 50s
    timeout connect 5s
    timeout server 10s
    timeout tunnel 50s
frontend tcp-0_0_0_0-443
    bind *:443
    mode tcp

    acl sni_acl_example_com req.ssl_sni -m sub example.com
    use_backend example_com_be if sni_acl_example_com

backend example_com_be
    mode tcp
    server name1 93.184.216.34

Eu corro o HaProxy usando o seguinte Dockerfile:

FROM haproxy:1.7.9-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
EXPOSE 443

e o seguinte comando: docker build -t my-haproxy . && docker run -p 443:443 --rm -d --name my-running-haproxy my-haproxy

Agora, gostaria de verificar se a regra chamada sni_acl_example_com funcionará como esperado usando cURL .

curl -k -X 'GET' -H 'Host: example.com' --resolve example.com:443:127.0.0.1 https://example.com

O resultado é:

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.com:443

Obviamente, as regras não funcionam e não há back-end adequado (é por isso que recebo SSL_ERROR_SYSCALL). Se eu adicionar algum default_backend, ele será usado para executar minha solicitação.

Por que minha solicitação cURL não abre o link usando o HaProxy?

Eu uso o curl 7.54.0 com o mais recente OSX High Sierra.

    
por Derp 26.12.2017 / 00:38

1 resposta

2

Descobri isso. O pedido de cURL está absolutamente correto.

Havia duas instruções de configuração ausentes em haproxy.cfg . Para que o sni-rules funcione, você também precisa:

tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }

na seção frontend .

    
por 26.12.2017 / 23:10