由于 Google 使用 HTTPS/SSL,我无法使用 Google.com 的 IP 并传递 Host 标头来访问它。我不明白为什么这不起作用。
这是迄今为止我所尝试过的。
- 我获取了 Google.com 的 IP
tracert google.com
Tracing route to google.com [216.58.207.238]
- 接下来我尝试使用带有主机标头的 IP 进行连接
$ curl -H "Host: google.com" https://216.58.207.238
我收到一个错误:
curl:(51)SSL:证书主题名称“*.google.com”与目标主机名“216.58.207.238”不匹配
- 接下来我尝试了这个
$ curl https://216.58.207.238 --resolve "google.com:443:216.58.207.238" -H "Host: google.com"
但我收到了同样的错误信息。那么,使用 IP 地址真的无法打开 google.com 吗?
答案1
所提供证书中的某些字段应与您要连接的名称或地址相匹配,否则证书将被声明为“假的”,客户端应断开连接。这就是您的 curl 所做的。
如果您通过域名连接,该名称应与证书中的“cname”字段匹配,或者在服务器证书的“subjectAltName”DNS 子字段中列出。
如果您通过指定原始 IP 地址进行连接,则该 IP 地址应列在证书的“subjectAltName”IP 子字段中。
您可以轻松检查,Google 没有在其证书的 SAN 字段中指定任何 IP 地址,因此,是的,他们不希望任何人使用直接 IP 地址连接到他们。他们只希望您使用主机名。
您可以使用 禁用 curl 中的证书检查--insecure
,但您知道,这将使 HTTPS 变得毫无用处。