Ubuntu16.04:Nginx 1.10:Nginx 提供多个证书信息。SSL 在浏览器上运行良好,但面临 curl 问题。cURL 错误 51

Ubuntu16.04:Nginx 1.10:Nginx 提供多个证书信息。SSL 在浏览器上运行良好,但面临 curl 问题。cURL 错误 51

我在装有 nginx/1.10.0 + letsencrypt 的 ubuntu 服务器(16.04)上有多个站点。

SSL 在浏览器中运行良好且完美。但我们的开发人员应用程序使用 curl 请求(带 SSL),它面临错误,如下所示

Update Failed: Download failed. cURL error 51: SSL: certificate subject name 'domain2.com' does not match target host name 'domain1.com'

使用 SSLLABS 检查后,显示 A_grade,但正在加载多个证书(同一服务器中另一个域的证书)

Certificate #1: RSA 2048 bits (SHA256withRSA)

Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI

在第二个证书下,出现以下错误。

Common names    domain2.com   MISMATCH
Trusted No   NOT TRUSTED

Curl 错误也提到了第二个域名。

cURL error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1'

domain2 是完全不同的站点。不知道 nginx 如何将其信息与 domain1 一起发送。

我还通过使用 Letsencrypt SSL 创建域在其他服务器中测试了同样的场景,并且都存在同样的问题。使用 SSLlabs 检查时ssllabs 检查器它能够与域 1 一起获取域 2 的证书详细信息。仍然域 1 等级为 A。在所有其他检查站点上也是安全的。

如果我使用 SSLlabs 检查域 2,它将获取位于同一服务器中的任何其他域的证书。(但如果有域 A、B、C、D,则其中一个域 SSL 检查将仅获取一个证书。这不是问题,所有其他域都会有此问题。)

附上截图。(一张很长的整页截图)。我认为它会澄清这个案例 :(

截屏

**我无法在应用程序中使用不安全的 Curl 请求,这会忽略此问题并使 curl 请求成功。如果有人对此有想法,请帮忙。我花了很多时间,但仍然......

上述问题与 Wordpress 插件有关,因此无法与 curl 一起添加特定参数。(它来自 WP 核心)

提前致谢。

答案1

使用的 curl 版本似乎缺少基本信噪比支持。当多个带有 SSL 的域名托管在同一个 IP 地址上时,SNI 是必需的。

你基本上有三个选择:

  • 将 curl 更新为支持 SNI 的版本。
    对此的支持在版本 7.18.1 中引入
  • 在客户端上自行添加主机参数:
    -H "Host: domain1.com"
  • 移动域名以使用不同的 IP 地址。这样就无需在客户端上进行任何更改。

相关内容