HTTPS调用未引用相应站点的正确SSL证书

时间:2015-08-03 08:58:13

标签: apache ssl https coldfusion

我有两个在Apache Web服务器上运行的coldfusion应用程序

  

https://site1.com

     

https://site2.com

两者都拥有自己的SSL证书,并在httpd-ssl.conf文件中配置了每个站点的基于名称的虚拟主机。

当我从Site1.com到Site2.com进行HTTPS调用时,

    httpService = new http(); 
    httpService.setMethod("get");
    httpService.setUrl("https://site2.com/comp.cfc?method=amethod&ID=12");
    result = httpService.send().getPrefix();

它出现以下错误

I/O Exception: hostname in certificate didn't match: <site2.com> != <site1.com>

实际上它应该使用site2的SSL证书。但不确定为什么它使用Site1的SSL证书并给出错误。

2 个答案:

答案 0 :(得分:3)

这看起来像服务器名称指示(SNI)问题。 SNI是一个TLS扩展,允许在同一台服务器上托管多个HTTPS服务器。

您可以使用以下方式确认此问题:

echo "" | openssl s_client -connect site2.com:443 | openssl x509 -noout -subject

如果您看到类似CN=site1.com的内容,请尝试以下操作:

echo "" | openssl s_client -connect site2.com:443 -servername site2.com | openssl x509 -noout -subject

如果你得到CN=site2.com,这是一个SNI问题。

您可以查看此bug,更具体地说是此评论:

  

在ColdFusion 11中添加了SNI支持。支持此功能所需的更改非常大,因此无法向后移植到ColdFusion 10。

其他解决方法可能是在 2个单独的服务器上托管您的2个HTTPS站点,以设置对两个名称都有效的唯一SSL证书(使用X509 SubjectAltName扩展名)或禁用证书CN验证(如果可能)。

答案 1 :(得分:0)

您需要将SSL证书导入ColdFusion / Java密钥库。如果这没有帮助,请在jvm.config中为ColdFusion添加-Djavax.net.debug = all。这将需要重新启动CF服务。然后尝试SSL调用。