使用IP地址访问https站点

时间:2015-10-29 16:20:24

标签: ssl

我想知道为什么如果我尝试使用ip地址而不是域名访问网站,我会收到证书错误。让我们说例如nslookupgoogle.com173.194.43.96,所以我试图浏览https://173.194.43.96并且我收到证书错误,说明本网站提供的安全证书是针对不同的网站的地址。为什么会这样?

4 个答案:

答案 0 :(得分:7)

这是因为为特定域名颁发了SSL证书。如果证书名称与访问域不匹配,则浏览器将显示错误。

SSL的一个主要功能是向用户证明他们确实正在连接到他们请求的站点,而不是伪装成终端站点的攻击者。如果不将域名链接到证书,则无法实现。

可以想象,浏览器证书系统可能被设计为在证书中包含IP地址,但这将使得难以使用DNS负载平衡甚至更改主机提供商,因为新证书必须是每次发生这种情况都会发出如果证书仅包含IP地址而不包含域,则这将使用户无法抵御DNS欺骗攻击。因此,前进的唯一方法就是单独使用域名。

感兴趣的是,IP地址为possible to obtain an SSL certificate - 由于Google是他们自己的证书颁发机构,他们可以为173.194.43.96颁发证书,从而可以安全地浏览谷歌ip地址,只要他们使用SNI提供正确的证书。似乎难以置信的是,这值得额外复杂但是......

如果您想了解更多内容,这是对SSL的一个很好的介绍:

https://timnash.co.uk/guessing-ssl-questions/

答案 1 :(得分:1)

证书是发给www.google.com的,而不是IP地址。因此,您的浏览器无法验证证书,该证书将www.google.com列为实体。

有关详细信息,请参阅:www.digicert.com/ssl-support/certificate-name-mismatch-error.htm

答案 2 :(得分:1)

在MAC High Sierra和Python 3.6.4上,我尝试了解决方案:requests toolbelt:HostHeaderSSLAdapter首先,不幸的是,它对我不起作用,然后我尝试了 forcediphttpsadapter,终于有了效果。

作者解释了自述文件中的所有内容,并提供了示例脚本,可以轻松地对其进行操作。

1。通过pip install requests[security] forcediphttpsadapter

安装库

2。运行示例脚本:

import requests
from forcediphttpsadapter.adapters import ForcedIPHTTPSAdapter
session = requests.Session()
session.mount("https://example.com", ForcedIPHTTPSAdapter(dest_ip='1.2.3.4'))
response = session.get(
    '/some/path', headers={'Host': 'example.com'}, verify=False)

注意:在某些情况下,您可能需要从网址中删除前缀“ www”。

答案 3 :(得分:0)

通用名称通常由主机+域名组成,看起来像www.yoursite.comyoursite.com。 SSL服务器证书特定于它们在主机级别颁发的公用名。通用名称必须与连接到安全站点时要访问的Web地址相同。例如,如果访问名为domain.comwww.domain.com的网站,secure.domain.comwww.domain.com不同,则域secure.domain.com的SSL服务器证书将收到警告来自domain.com