为什么通过IP地址而不是主机名连接到服务器时验证失败?

时间:2016-02-24 14:19:14

标签: ssl openssl certificate ssl-certificate x509certificate

使用IP地址而不是DNS名称访问服务器时,我收到错误的证书错误。

是否在tls1.1中新引入了此功能。和tls 1.2?如果有人指出OpenSSL代码失败并返回错误的证书错误,那将是件好事。

1 个答案:

答案 0 :(得分:5)

  

为什么我们在使用IP地址代替dns名称访问服务器时会出现错误的证书错误?

这取决于您使用的颁发/验证策略,用户代理和OpenSSL的版本。因此,为了给您一个精确的答案,我们需要了解您的配置。

一般来说,假设 www.example.com 的IP地址为 www.xxx.yyy.zzz 。如果您通过 https://www.example.com/... 进行连接,则连接应该会成功。如果您通过 https://www.xxx.yyy.zzz/... 使用浏览器连接,则应始终失败。如果您通过 https://www.xxx.yyy.zzz/... 使用其他用户代理连接,那么如果证书包含 {{ 1}} ;否则就失败了。

颁发/验证政策

有两个机构主导发布/验证政策。它们是CA/Browser ForumInternet Engineering Task Force (IETF)

浏览器,如Chrome,Firefox和Internet Explorer,请点击CA/B Baseline Requirements(CA / B BR)。

其他用户代理(如cURL和Wget)遵循IETF颁发和验证政策,例如RFC 5280, Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) ProfileRFC 6125, Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)。 RFC对CA / B发布策略更为宽松。

用户代理

不同的用户代理具有适用于DNS名称的不同策略。有些人希望在DNS中找到传统的主机名,而其他人则需要IP地址。

浏览器仅允许主题备用名称(SAN)中的DNS主机名。如果SAN中缺少主机名,则匹配将不会发生。将服务器名称放在 Common Name 中是浪费时间和精力,因为浏览器需要SAN中的主机名。

浏览器 匹配SAN中的公共IP地址。他们有时允许来自RFC 1918, Address Allocation for Private Internets的私有IP。

其他用户代理允许主题备用名称(SAN)中的任何名称。它们还将匹配 Common Name(CN) Subject Alternate Name(SAN)中的名称。名称包含DNS名称,例如 www.xxx.yyy.zzz ,公共IP地址,私有IP地址,例如 www.example.com 以及 192.168.10.10 localhost 等本地名称。

OpenSSL版本

OpenSSL版本1.0.2及以下 没有 执行主机名验证。也就是说,你必须自己进行匹配。如果您没有自己执行主机名验证,则表明连接始终成功。另请参阅OpenSSL wiki上的Hostname ValidationTLS Client

OpenSSL 1.1.0及更高版本执行主机名匹配。如果你切换到1.1.0,那么你应该开始遇到失败如果你没有自己匹配主机名,或者你没有严格遵守发布政策。

  

如果有人指出失败的OpenSSL代码并返回错误的证书错误,那将是件好事。

签到发生在2015年初,从那时起,它们已在Master(即1.1.0-dev)中可用。该代码也可以在1.0.2中使用,但您必须执行特殊操作。例程在1.0.1或更低版本中不可用。另请参阅OpenSSL wiki上的Hostname Validation。我没有Git签到,因为我现在在Windows机器上。

有关姓名及其位置规则的更多信息,请访问How do you sign Certificate Signing Request with your Certification AuthorityHow to create a self-signed certificate with openssl。至少还有四到六个文档可以覆盖它们,例如需要为HTTP Strict Transport Security (HSTS)Public Key Pinning with Overrides for HTTP呈现的内容。