Что такое SSL и TLS?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
SSL (Secure Sockets Layer) и TLS (Transport Layer Security) — это протоколы шифрования, предназначенные для защиты данных при передаче через компьютерные сети.
- SSL — более старый протокол, представленный Netscape в 1995 году. Он прошел несколько версий (SSLv1, SSLv2, SSLv3).
- TLS — это улучшенная версия SSL, представленная IETF в 1999 году. TLSv1.0 является развитием SSLv3. Последующие версии TLS (1.1, 1.2, 1.3) устранили уязвимости старых протоколов SSL.
Фактически, термин "SSL" часто используется как синоним "TLS", хотя SSL считается устаревшим и небезопасным.
Процесс работы SSL/TLS включает:
- Handshake (Рукопожатие): Клиент и сервер договариваются о параметрах шифрования, включая:
- Версию протокола.
- Набор шифров (алгоритмы шифрования, аутентификации и хеширования).
- Обмен ключами для последующего симметричного шифрования.
- Проверка подлинности сервера (опционально клиента) с использованием цифровых сертификатов.
- Encrypted Data Transfer: После успешного рукопожатия данные передаются, шифруются и расшифровываются с использованием согласованного симметричного ключа.
- Connection Closure: Безопасное завершение соединения.
Цифровые сертификаты важны для аутентификации. Они выдаются удостоверяющими центрами (Certificate Authorities - CA) и содержат информацию о владельце и его публичном ключе.
SSL/TLS обеспечивают три основные гарантии:
- Конфиденциальность: Данные недоступны для прослушивания третьей стороной.
- Целостность: Данные не изменены при передаче.
- Идентификация (Аутентификация): Уверенность в подлинности сервера (и опционально клиента).
Пример использования в Python (на стороне клиента):
import ssl
import socket
# Создание обычного сокета
sock = socket.create_connection(('example.com', 443))
# Обертывание сокета для использования SSL/TLS
# context=None использует контекст по умолчанию, который обычно безопасен
conn = ssl.wrap_socket(sock, server_hostname='example.com')
try:
# Отправка данных (например, HTTP GET-запроса)
conn.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")
# Получение данных
response = b""
while True:
data = conn.recv(1024)
if not data:
break
response += data
print(response.decode('utf-8'))
finally:
# Закрытие соединения
conn.close()
Пример создания SSLContext (для настройки параметров протокола):
import ssl
# Создание контекста
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) # Указываем, что это клиентский контекст и предпочтительно TLS
# Можно настроить минимальную и максимальную версию протокола
context.minimum_version = ssl.TLSVersion.TLSv1_2
context.maximum_version = ssl.TLSVersion.TLSv1_3
# Можно загрузить доверенные CA для проверки сертификата сервера
# context.load_verify_locations(cafile='path/to/ca.crt')
# Можно включить проверку сертификата сервера
context.verify_mode = ssl.CERT_REQUIRED
# Пример использования такого контекста с сокетом
# sock = socket.create_connection(('example.com', 443))
# conn = context.wrap_socket(sock, server_hostname='example.com')
В веб-разработке и сетевых коммуникациях TLS (SSL) широко используется для защиты HTTP-трафика (получается HTTPS), электронной почты (SMTPS, IMAPS, POP3S) и других сетевых протоколов.