Ssl

如何使用 curl 檢查基於 haproxy sni 的規則?

  • December 26, 2017

我做了簡單的 HaProxy 配置,以通過基於 SNI 欄位的徹底流量。這是我的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

我使用以下 Dockerfile 執行 HaProxy:

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

和以下命令:docker build -t my-haproxy . && docker run -p 443:443 --rm -d --name my-running-haproxy my-haproxy

現在我想檢查呼叫的規則是否sni_acl_example_com會按預期使用cURL.

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

結果是:

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL 連接到 example.com:443

顯然規則不起作用並且沒有合適的後端(這就是我得到 SSL_ERROR_SYSCALL 的原因)。如果我添加一些 default_backend,它將用於執行我的請求。

為什麼我的 cURL 請求沒有使用 HaProxy打開http://example.com ?

我將 curl 7.54.0 與最新的 OSX High Sierra 一起使用。

弄清楚了。cURL 請求絕對正確。

中缺少 2 個配置語句haproxy.cfg。為了使 sni-rules 起作用,您還需要:

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

節下frontend

引用自:https://serverfault.com/questions/889597