Как происходит установка соединения по HTTPS между клиентом (браузером) и сервером.
Браузер шлёт запрос на сервер course.to.digital
— о, говорит, дружок, давай-ка мы с тобой установим безопасное соединение, а то кругом враги, надо бы предостеречься. И вот тебе на всякий случай рандомная строка, например, 123.
Сервер отвечает — ну конечно, давай, вот на тебе лови мой сертификат, в нём есть публичный ключ и подпись Let’s Encrypt, и заодно на тоже тебе рандомную строку, например, 567.
В процессе настройки HTTPS на сервере сохраняется публичный и приватный ключ, приватный не передаётся никуда и хранится только на сервере, публичный (исходя из названия) передаётся собеседникам (браузерам). Публичным ключом можно зашифровать сообщение, а расшифровать такое сообщение можно только имея соответствующий этому публичному ключу приватный ключ.
И вот, значит, сервер передаёт сертификат с публичным ключом браузеру.
Браузер через удостоверяющий центр (через Letsencrypt в твоём примере) проверяет, что переданный публичный ключ действительно относится к домену course.to.digital
. Если это не проверить, то хакер сможет перехватить коммуникацию на этом этапе и передать вместо реального публичного ключа course.to.digital
свой хакерский ключ и затем спалить (прочесть) всю дальнейшую коммуникацию. А так удостоверяющий центр (которому все доверяют) подтверждает, что да, всё чики-пуки, публичный ключ правильный, принадлежащий домену course.to.digital
.
Браузер генерирует ещё одну рандомную строку, например, 890 и шифрует её публичным ключом сервера, и передаёт серверу.
Сервер расшифровывает своим приватным ключом рандомную строку от браузера (получает 890). На этом этапе:
а) сервер знает изначальную рандомную строку 123 от браузера
б) сервер знает свою рандомную строку 567
в) знает только что пришедшую зашифрованную рандомную строку 890.
И браузер тоже знает все эти 3 строки. Сервер и браузер использует эти 3 строки, чтобы сгенерировать одинаковый сеансовый ключ.
Дальше все сообщения между клиентом и сервером шифруются одинаковым сеансовым ключом. При этом сам это ключ никогда по сети не передавался (он был рассчитан и сервером, и браузером). Хакер не может вычислить этот ключ, потому что он не может получить строку 890. не зная приватный ключ сервера (при том, что он мог перехватить строки 123 и 567).
В новой версии TLS (1.3) схема обмена несколько иная, но принцип тот же — ассиметричное шифрование используется для безопасного получения симметричного ключа и использование симметричного ключа дальше для шифрования трафика.