gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:24 27 4
gpt4 key购买 nike

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

这个功能是tls1.1新引入的吗?和 tls 1.2?如果有人指出 OpenSSL 代码失败并返回错误的证书错误,那就太好了。

最佳答案

Why do we get bad certificate error while accessing the server using IP address instead dns name?

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

一般来说,假设 www.example.com 的 IP 地址为 www.xxx .yyy.zzz。如果您通过 https://www.example.com/... 连接,则连接应该会成功。如果您使用浏览器通过 https://www.xxx.yyy.zzz/... 连接那么它应该总是失败。如果您通过 https://www.xxx.yyy.zzz/...使用另一个用户代理> 那么如果证书包含 www.xxx.yyy.zzz 应该会成功;否则失败。

颁发/验证政策

有两个机构主导发布/验证政策。他们是 CA/Browser Forum , 和 Internet 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 地址。

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

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

其他用户代理允许在主题备用名称 (SAN) 中使用任何名称。它们还将匹配 Common Name (CN)Subject Alternate Name (SAN) 中的名称。名称包括一个 DNS 名称,如 www.example.com、一个公共(public) IP 地址、一个私有(private) IP 地址,如 192.168.10.10 和本地名称,例如 localhostlocalhost.localdomain

OpenSSL 版本

OpenSSL 版本 1.0.2 及以下没有执行主机名验证。也就是说,您必须自己执行匹配。如果您自己没有执行主机名验证,那么看起来连接总是成功的。另见 Hostname ValidationTLS Client在 OpenSSL wiki 上。

OpenSSL 1.1.0 及以上版本执行主机名匹配。如果您切换到 1.1.0,那么您应该开始遇到故障如果您没有执行自己的主机名匹配或者您没有严格遵守发布策略。


It would be good if someone would point out OpenSSL code where it fails and return the bad certificate error.

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


有关名称及其位置规则的更多信息,请访问 How do you sign Certificate Signing Request with your Certification Authority。和 How to create a self-signed certificate with openssl .至少还有四六个文件涵盖了它们,比如需要如何为 HTTP Strict Transport Security (HSTS) 呈现事物。和 Public Key Pinning with Overrides for HTTP .

关于ssl - 为什么通过 IP 地址而不是主机名连接到服务器时验证失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com