Skip to content

ssl Module

The ssl module wraps socket objects with TLS/SSL encryption, enabling secure communication for network applications.

Complexity Reference

Operation Time Space Notes
wrap_socket() O(1) O(1) Wrap for TLS
Handshake O(1) + crypto O(1) TLS handshake; asymmetric cryptography overhead
Send/receive O(n) O(n) n = data size

Secure Socket Communication

HTTPS Connection

import ssl
import socket

# Create socket - O(1)
context = ssl.create_default_context()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    # Wrap with SSL - O(1)
    with context.wrap_socket(sock, server_hostname='example.com') as ssock:
        # Connect - O(1)
        ssock.connect(('example.com', 443))

        # Send request - O(n)
        ssock.send(b'GET / HTTP/1.1\r\n')

        # Receive - O(n)
        data = ssock.recv(1024)

Server with SSL

import ssl
import socketserver

# Create context - O(1)
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain('server.crt', 'server.key')

class Handler(socketserver.StreamRequestHandler):
    def handle(self):
        data = self.rfile.readline()
        self.wfile.write(b"Secure response")

# Server - O(1) setup
with socketserver.TCPServer(("", 443), Handler) as server:
    server.socket = context.wrap_socket(server.socket, server_side=True)
    server.serve_forever()