Ubuntu16.04:Nginx 1.10:Nginx提供多个证书信息。 SSL在浏览器上完美工作,但面临curl的问题。 cURL错误51

我有一个Ubuntu的服务器(16.04)nginx / 1.10.0 + letsencrypt多个网站。

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 error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1' 

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

此外,我已经通过使用Letsencrypt SSL创build域来testing其他服务器中的相同场景,并且都有相同的问题。 当使用SSLlabs ssllabs-checker进行检查时,它能够将domain2证书详细信息与domain1一起获得。即使domain1 Grade也是A.在所有其他检查站点中也是安全的。

如果我使用SSLlabs检查domain2,它将获取同一服务器中的任何其他域证书。 (但是如果有域A,B,C,D其中一个域的SSL检查将只提取一个证书,这不是问题,所有其他人都会遇到这个问题。

附上截图。 (一个长的完整页面截图)。 我认为这将澄清的情况下:(

截图

**我不能在应用程序中使用不安全的Curl请求,而忽略这个问题并使curl请求成功。 如果有人有这个想法,请帮助。 我花了好几个小时,还是…

上面的问题是Wordpress插件,所以无法添加具体的参数随着curl。 (其来自WP核心)

提前致谢。

正在使用的curl版本似乎缺less基本的SNI支持。 当多个使用SSL的域被托pipe在相同的IP地址上时,SNI是必需的。

你基本上有三个select:

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