如何通过HTTPS测试特定的负载均衡器实例?

时间:2017-08-29 19:42:40

标签: curl nginx https proxy dns

我有一组Nginx服务作为单个地址的负载均衡器,比方说www.example.com。我希望有一个测试套件,可以单独针对这些机器,而不是通过DNS负载平衡,就像直接到达地址一样。

当我尝试在curl中做同样的事情时,我得到:

 $ curl -H "Host: www.example.com" -v  https://10.10.10.10/                         
*   Trying 10.10.10.10...
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 697 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
*    server certificate verification OK
*    server certificate status verification SKIPPED
* SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10'
* Closing connection 0
curl: (51) SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10'

我知道10.10.10.10不是同一个名字,但我想指示该工具相信它(因为我知道它们都是服务于同一域的负载均衡器)。

有没有办法不涉及处理DNS解析?

1 个答案:

答案 0 :(得分:4)

您遇到的问题是因为您正在设置的主机标头正在发送到服务器,但curl没有将其用于SSL验证。

你可以在卷曲输出中看到这一点,注意“连接到10.10.10.10”:

 $ curl -H "Host: www.example.com" -v  https://10.10.10.10/                         
*   Trying 10.10.10.10...
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0)

您可能正在寻找--resolve标志:

  

- 解决<host:port:address>

     

为特定主机和端口对提供自定义地址。使用此方法,您可以使curl请求使用指定的地址,并防止使用通常解析的地址。将其视为命令行上提供的一种/ etc / hosts替代方案。

     

请参阅:curl man page

考虑到这一点,您可能想尝试:

curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com

在输出中应该明白curl现在正在使用主机名,因此,允许验证证书主题名称:

$ curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com
* Added www.example.com:443:10.10.10.10 to DNS cache
* About to connect() to www.example.com port 443 (#0)
*   Trying 10.10.10.10...
* Connected to www.example.com (10.10.10.10) port 443 (#0)