- Проверка самого сертификата и того, что он может быть связан с сертификатом CA, которому вы уже доверяете, позволяет проверить подлинность и действительность сертификата.
- Проверка имени хоста в сертификате позволяет проверить, что вы общаетесь с сервером, с которым вы намеревались разговаривать, при условии, что вы подтвердили, что сертификат действительно действителен.
- (Проверка того, что удаленная сторона действительно имеет личный ключ для этого сертификата, выполняется в рамках рукопожатия SSL / TLS.)
Если вы хотите провести аналогию с проверкой паспорта / удостоверения личности для людей:
- Проверка сертификата аналогична проверке подлинности паспорта или удостоверения личности. Вы можете решить, какие формы удостоверения личности вы хотите принять от лица (например, паспорт, водительские права, карточку сотрудника и т. Д.) И в каких странах-эмитентах вы можете проверить их подлинность.
- Проверка того, что удаленный участник - это тот, кто держит закрытый ключ, аналогична проверке того, что изображение на паспорте / удостоверении личности соответствует лицу лица перед вами.
- Проверка имени хоста похожа на проверку того, что паспорт принадлежит человеку, имя которого вы ищете.
Если вы не проверите имя хоста, любой, у кого есть действительный паспорт, который вы считаете подлинным, может прийти к вам и заявить, что вы ищете (по имени).
В очень ограниченном наборе обстоятельств, когда вы доверяете только определенному ЦС или самозаверяющему сертификату, когда вы позволяете любому потенциальному сертификату выдавать себя за любой другой во всем наборе сертификатов, которым вы доверяете, может быть приемлемо игнорировать эту проверку, но это очень редко и не очень хорошая практика.
Проверка того, что имя в паспорте соответствует имени человека, которого вы ищете, будет считаться здравым смыслом; сделать это для сертификатов тоже. Невыполнение этого условия позволяет любому, у кого есть сертификат, которому вы доверяете как подлинному, выдавать себя за любой другой сертификат, которому вы доверяете, и, следовательно, потенциально выполнять атаки MITM.
Правила проверки имени хоста HTTPS определены в RFC 2818, раздел 3.1 (также совсем недавно в спецификации "передового опыта", RFC 6125 , еще не реализовано).
Короче говоря, имя хоста должно быть в DNS-записи Subject Alternative Name (хотя вы можете использовать CN для Subject DN, где в сертификате нет SAN). Когда вы используете IP-адрес, IP-адрес должен быть в записи IP-адреса SAN (хотя некоторые браузеры позволяют вам избегать использования IP-адреса в CN субъектного DN).