我正在尝试向 IP 地址为 xxxx 的服务器发送 cURL 请求。它是健康监测系统的一部分。在服务器上,我在端口 80 和 443 上为 subdomain.example.com 配置了虚拟主机。对于 SSL 证书,我使用的是 *.example.com 通配符证书,我在此服务器以及其他几台服务器上都使用了该证书。
当我尝试 curl 时,http://x.x.x.x
它会得到适当的响应。但是当我 curl 时,https://x.x.x.x
会出现以下证书错误:
curl:(51)SSL:证书主题名称“*.example.com”与目标主机名“xxxx”不匹配
我知道这是因为证书特定于域名,而我正尝试使用 IP 地址发送请求。但正如我所说,这是我的一个限制(rackspace 负载平衡器健康监控)。
有没有什么办法?
答案1
我将把这个作为一个新的答案,因为它的方向完全不同。事实上,它并没有回答提出的问题,但也许是原帖作者应该关注的方向。
使用负载均衡器时的通常配置是 SSL 证书根本不存在于 Web 服务器上,而是将 SSL 交给负载均衡器。
最终用户向负载均衡器发出 HTTPS 请求。负载均衡器解开 SSL,并通过未加密的 HTTP 将请求转发到 Web 服务器,并带有一个标头,告知 Web 服务器原始请求已加密。(这对于在响应中嵌入 URL 以及避免通过 http 提供安全内容很重要)。
答案2
您可以照常使用域名,但覆盖解析器,如下所示:
curl -v --resolve subdomain.example.com:443:x.x.x.x https://subdomain.example.com/
不过,维护大量这样的映射可能会很麻烦。您可能更愿意忽略证书不匹配:
curl --insecure https://subdomain.example.com/
如果你愿意,你可以使用--insecure --verbose
并解析消息来检查证书是否适用于预期的域,但这可能比使用--resolve