Поскольку Google использует HTTPS / SSL, я не могу получить к нему доступ, используя IP-адрес Google.com и передавая заголовок Host. Я не понимаю, почему это не работает.
Вот что я пробовал до сих пор.
tracert google.com
Tracing route to google.com [216.58.207.238]
$ 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"
Но у меня такое же сообщение об ошибке. Так действительно ли вообще невозможно открыть google.com с помощью IP-адреса?
Некоторые поля в представленном сертификате должны соответствовать имени или адресу, к которому вы подключаетесь, в противном случае сертификат будет объявлен «фальшивым», и клиент должен разорвать соединение. Вот что делает ваш локон.
Если вы подключаетесь по имени домена, это имя должно совпадать с полем «cname» в сертификате или быть перечислено в подполе DNS «subjectAltName» сертификата сервера.
Если вы подключаетесь, указав необработанный IP-адрес, этот IP-адрес должен быть указан в подполе IP «subjectAltName» сертификата.
Как вы можете легко проверить, Google не указывал никаких IP-адресов в поле SAN своего сертификата, поэтому да, они не ожидают, что кто-то подключится к ним с использованием прямого IP-адреса. Они ожидают, что вы будете использовать только имена хостов.
Вы можете отключить проверку сертификата в curl, используя --insecure
, но вы знаете, что это сделает HTTPS бесполезным.
См. Также связанный вопрос о Безопасность и RFC5280