Проверяет понимание механизма проверки подлинности сервера с помощью цифровых сертификатов в TLS/SSL.
Когда клиент (например, браузер) устанавливает защищенное соединение с сервером по протоколу HTTPS, происходит TLS-рукопожатие. В ходе этого процесса сервер отправляет клиенту свой цифровой сертификат. Этот сертификат содержит открытый ключ сервера, информацию о владельце (доменное имя) и подпись удостоверяющего центра (CA).
Клиент выполняет несколько проверок, чтобы убедиться в подлинности сервера:
Если все проверки успешны, клиент считает сервер подлинным и продолжает рукопожатие, генерируя общий секретный ключ для шифрования данных.
import ssl
import socket
hostname = 'example.com'
port = 443
# Создаем контекст с доверенными CA
context = ssl.create_default_context()
# Устанавливаем соединение и проверяем сертификат
with socket.create_connection((hostname, port)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
print(cert)
# Проверка домена и срока действия выполняется автоматически
В этом примере библиотека ssl автоматически проверяет подпись CA, срок действия и имя хоста. Если проверка не пройдена, будет выброшено исключение.
Проверка подлинности сервера через сертификаты — это фундаментальный механизм безопасности в интернете. Он защищает от атак типа man-in-the-middle и гарантирует, что клиент общается именно с тем сервером, которому доверяет. Этот подход применяется везде, где используется HTTPS, включая веб-браузеры, мобильные приложения и API-клиенты.
Уровень
Рейтинг:
5
Сложность:
4
Навыки
HTML
Networks
Ключевые слова
Подпишись на Golang Developer в телеграм