Это выглядит какhttps://gmail.comиспользует SSL-сертификат, который предназначен для имени хоста mail.google.com
. Поскольку имя хоста SSL-сертификата не соответствует URL-адресу браузера, почему это работает? Вместо этого я должен получить предупреждение!
Я тестировал с Firefox и Chromium (похоже,раньше это не работало).
Я проверил сертификат с помощью команды: echo | openssl s_client -connect gmail.com:443
которая выдает:
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com
решение1
gmail.com использует хороший сертификат, но сервер, к которому вы подключаетесь, используетИндикация имени серверадля запуска виртуальных хостов на одном адресе+порту. Чтобы это работало, клиент должен сообщить серверу, какой виртуальный хост он ищет, до того, как будет выполнено согласование SSL/TLS. Firefox и Chromium (и другие клиенты аналогичного размера) делают это автоматически.
Чтобы получить эффективный сертификат с помощью openssl s_client
, вам необходимо воспользоваться -servername
опцией.
openssl s_client -servername gmail.com -connect gmail.com:443
Результаты Google длярысь SNIвыглядят не очень хорошо.
решение2
https://gmail.com/
не использует плохой сертификат. Вот его текущий сертификат, перехваченный Fiddler2:
== Server Certificate ==========
[Subject]
CN=gmail.com, O=Google Inc, L=Mountain View, S=California, C=US
[Issuer]
CN=Google Internet Authority G2, O=Google Inc, C=US
[Serial Number]
4F4A246099981C2C
[Not Before]
16/07/2014 10:04:37 PM
[Not After]
14/10/2014 11:00:00 AM
[Thumbprint]
8F1065D237732F71CAD350A3FD0089AEEAAB675E
Обратите внимание CN=gmail.com
.
Фактический тип ответа от HTTP-запроса — a 301 Moved Permanently
to https://mail.google.com/
. Это имеет два эффекта:
Браузер перенаправит на место назначения, сделав новый запрос, с новым туннелем (потому что другой домен) и другим сертификатом. Вот почему вы видите сертификат
mail.google.com
- этопослеперенаправление. Если вы посмотрите на адресную строку, то фактический сайт, на котором вы находитесь, этоhttp://mail.google.com/
, а неhttp://gmail.com/
. Немного сложно поймать сертификат предварительного перенаправления в браузере, поэтому я использовал Fiddler2.Браузер кэширует это перенаправление и автоматически выполнит его в будущем, никогда не делая другого запроса
https://gmail.com/
(в этом и смыслMoved Permanently
). Это не имеет особого значения для этого вопроса, но это немного усложняет обнаружение перенаправления — сначала вам нужно очистить кэши или открыть окно приватного просмотра.