У вашего сервера есть сертификат, состоящий из частного и открытого ключа. Конечно, сервер никогда не выдаёт закрытый ключ, но каждый может получить открытый ключ. Открытый ключ встроен в формат контейнера сертификата. Этот формат содержит IP-адрес или доменное имя сервера, владельца этого IP-адреса/доменного имени, адрес электронной почты владельца и т. Д.
Все это подписывается доверенным органом. У доверенного органа, также известного как центр сертификации (CA), также есть пара частного/открытого ключа. Вы даете им свой сертификат, они проверяют правильность информации в контейнере и подписывают ее своим личным ключом, к которому они имеют доступ.
Открытый ключ ЦС по умолчанию установлен в пользовательской системе, наиболее известные ЦС включены уже в стандартную установку вашей любимой ОС или браузера.
Когда пользователь подключается к вашему серверу, ваш сервер использует закрытый ключ для подписи некоторых данных, пакетов, которые подписали данные вместе с открытым ключом и отправляет все клиенту.
Что теперь может сделать клиент? Прежде всего, он может использовать открытый ключ, который только что был отправлен для проверки подписанных данных. Поскольку только владелец частного ключа способен правильно подписать данные таким образом, чтобы открытый ключ мог проверить подпись, он знает, что тот, кто подписывает эту часть данных, этот человек владеет закрытым ключом к принятому открытому ключу , Пока все хорошо. Но что мешает хакеру перехватить пакет, заменить подписанные данные на данные, подписанные им другим сертификатом, а также заменить открытый ключ его открытым ключом? Ничего.
Именно поэтому после того, как подтвержденные данные были подтверждены (или до его проверки), клиент проверяет, имеет ли принятый открытый ключ действительную подпись ЦС. Используя уже установленный общедоступный ключ CA, он проверяет, что полученный открытый ключ был подписан известным CA. В противном случае он отклоняется (поскольку хакер, возможно, заменил его на этом пути).
Последнее, но не менее важное: оно проверяет информацию в контейнере открытого ключа. Действительно ли IP-адрес или доменное имя соответствует IP-адресу или доменному имени сервера, с которым в данный момент разговаривает клиент? Если нет, то что-то подозрительное!
Люди могут спросить: что мешает хакеру просто создавать свою собственную пару ключей и просто помещать ваше доменное имя или IP-адрес в сертификат? Легко: если он это сделает, ни один СА не подпишет свой ключ. Чтобы получить подпись ЦС, вы должны доказать, что вы действительно являетесь владельцем этого IP-адреса или имени домена. Хакер - нет, он не может этого доказать, он не получит подпись. Так что это не сработает.
Хорошо, как насчет того, чтобы хакер регистрировал свой домен, создавал для этого сертификат и подписывал его ЦС? Это работает, он получит его CA подписан, это его домен, не проблема. Однако он не может использовать это при взломе вашего соединения. Если он использует этот сертификат, браузер сразу увидит, что подписанный открытый ключ предназначен для домена example.net, но в настоящее время он разговаривает с example.com, а не с одним и тем же доменом, поэтому что-то снова подозрительно.
Хороший ответ! Но у меня есть другой связанный с этим вопрос ... Цитата: «Самые известные ЦС включены уже в установку по умолчанию вашей любимой ОС или браузера». Мне интересно, как браузер расширяет стандарт CA по умолчанию? Будет ли он автоматически проверяться на веб-службу? или он будет делать это только для следующей версии браузера? – forestclown
Сертификаты CA либо отправляются вместе с браузером, либо операционной системой. В Firefox, Chrome, Opera есть собственные копии сертификатов CA, Internet Explorer и Safari используют сертификаты CA, установленные в Windows или OS X. Ничто не останавливает использование браузером как собственных копий, так и сертификатов ОС (некоторые из них, о которых я упоминал, могут даже делать что). Вы получаете только новые сертификаты CA, обновляя браузер, обновляя ОС или вручную устанавливая их (загрузка, а затем добавление их в браузер или вашу ОС, возможно). – Mecki
Единственное, что браузеры проверяют онлайн (если они могут), является ли сертификат CA еще действительным или нет. Каждая служба CA запускает сервер отзыва сертификатов, где браузер может спросить, действительно ли какой-либо сертификат действителен или был отменен; это делается по протоколу OCSP: http://tinyurl.com/pcjk2. Сертификаты содержат адрес сервера OCSP. – Mecki