Python Glossary English

все Python 3до 3.12Удалено из стандартной библиотекифункция

ssl.wrap_socket()

удалено

Оборачивал сокет в TLS без проверки сертификата и имени сервера. Удалён в Python 3.12 — используйте ssl.create_default_context() и context.wrap_socket().

Синтаксис

ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False)  # до 3.12

Функция создавала временный контекст с опасными умолчаниями: не отправляла SNI и не проверяла ни сертификат, ни имя сервера, поэтому соединение было открыто для подмены (CWE-295). Её объявили устаревшей в Python 3.7 и убрали в 3.12. Как переписать: ctx = ssl.create_default_context() — контекст с проверкой сертификата и имени; затем tls = ctx.wrap_socket(sock, server_hostname='example.org'). Для сервера: ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER), ctx.load_cert_chain(certfile, keyfile), затем ctx.wrap_socket(sock, server_side=True).

Примеры

# Python 3.12+
import ssl
try:
    ssl.wrap_socket
except AttributeError as e:
    print(type(e).__name__)  # → AttributeError
# Python 3.12+
import socket, ssl
ctx = ssl.create_default_context()
print(ctx.check_hostname, ctx.verify_mode == ssl.CERT_REQUIRED)  # → True True
with socket.socket() as raw:
    tls = ctx.wrap_socket(raw, server_hostname='example.org')
    print(tls.server_hostname)  # → example.org
import socket, ssl
with socket.socket() as raw:
    tls = ssl.wrap_socket(raw)
    print(type(tls).__name__)  # → SSLSocket

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности