2013-12-13 100 views
1

我尝试使用自签名证书通过SSL建立服务器客户端通信。在服务器端,我在创建证书时添加了CN =。我的客户端使用libCurl进行通信,CURLOPT_SSL_VERIFYPEER设置为1,CURLOPT_SSL_VERIFYHOST设置为2.SSL证书问题:CN条目与URL中的主机名不匹配

当客户端尝试在URL中使用服务器的FQDN发送请求时,它工作正常。但是如果客户端使用IP地址,我得到的错误信息为 'SSL:证书使用者名称''与目标主机名'''不匹配'''我明白问题是'使用的URL中的主机名应与主题名称匹配'证书。

但是这个问题的解决方案是什么?客户端应该能够使用IP地址/短主机名/ FQDN进行连接。我尝试在证书中添加多个CN条目(对于FQDN和IP),但它不起作用。

+2

DNS名称不应放置在通用名称(CN)中。该行为已被IETF和CA /浏览器论坛弃用。相反,在CN中使用友好名称是因为它显示给用户。 DNS名称应放置在主题备用名称(SAN)中。这由IETF和CA/B论坛进行了规定。 *注意*:CA /浏览器论坛非常重要,因为这是浏览器和CA联合在一起并决定策略的地方。浏览器遵循CA/B论坛,不遵循IETF的建议。 – jww

回答

5

使用libcurl的URL中的真实主机名,以便主机名验证起作用。

如果要指向另一个主机,而不是该名称通常要解析的名称,请使用CURLOPT_RESOLVE强制libcurl使用本地/临时IP。

请参阅resolve.c示例了解如何完成。

如果要在证书中添加多个名称,请使用SubjectAltName而不是CN。

+0

谢谢Daniel! SubjectAltName正是我所期待的。 – user2078670

+0

我正在使用OpenSSL v5.0.8.1,并且在证书中使用SubjectAltName似乎存在一个漏洞https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4248对于OpenSSL v <5.5.2。除升级OpenSSL版本外,是否还有其他方法? – user2078670

+0

该CVE引用PHP版本,而不是OpenSSL。该漏洞实际上在PHP中。 该漏洞在当前的libcurl中不存在,但它确实遭受了类似的漏洞,我们在2009年修复了这个漏洞:CVE-2009-2417:http://curl.haxx.se/docs/adv_20090812.html –

相关问题