Python 库手册:ssl 加密通信模块

发布于:2025-07-24 ⋅ 阅读:(22) ⋅ 点赞:(0)

ssl 模块是 Python 标准库中用于实现 TLS/SSL 加密通信的模块。它为网络连接提供安全层支持,可用于客户端与服务器之间的加密数据传输,广泛应用于 HTTPS、SMTP over SSL、FTPS 等安全协议场景。

常见应用场景:

(1)构建支持 HTTPS 的客户端或服务器。

(2)为现有的 socket 添加 TLS/SSL 支持。

(3)安全地验证服务器或客户端身份。

(4)配置证书、密钥、CA 文件等以确保通信安全。

(5)与 urllib, smtplib, http.client 等库结合使用进行加密连接。

  ◆  ◆

核心概念

1、TLS/SSL 协议

安全传输协议,为数据加密、身份验证和完整性保护提供标准。

2、加密套件 (Cipher)

包含加密算法、密钥交换算法、消息认证算法等组成部分。

3、证书

用于身份验证的公钥签名文件,通常使用 .pem 格式。

4、上下文(Context)

一个 SSLContext 对象,用于统一管理证书、密钥、参数等配置。

5、包装 socket

使用 wrap_socket() 或 SSLContext.wrap_socket() 将普通 socket 加密。

  ◆  ◆

应用举例

例 1:创建 HTTPS 客户端请求(使用默认上下文)

import sslimport socket
hostname = 'www.python.org'context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:    with context.wrap_socket(sock, server_hostname=hostname) as ssock:        print(ssock.version())  # 输出 SSL/TLS 协议版本

例 2:验证服务器证书并读取内容(与 urllib 配合)

import sslimport gzipfrom urllib.request import urlopenfrom io import BytesIO
context = ssl.create_default_context()response = urlopen("https://www.python.org", context=context)
# 将响应内容解压为文本(如果是 gzip 格式)buffer = BytesIO(response.read())with gzip.GzipFile(fileobj=buffer) as f:    html = f.read().decode('utf-8')
print(html[:1000])  # 打印前1000个字符

例 3:创建安全服务端 socket(加载证书)

import sslimport socket
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)context.load_cert_chain(certfile="server.crt", keyfile="server.key")
with socket.socket() as sock:    sock.bind(('localhost', 8443))    sock.listen(1)    with context.wrap_socket(sock, server_side=True) as ssock:        conn, addr = ssock.accept()        print("连接来自:", addr)

例 4:自定义客户端验证证书(带 CA)

import sslimport socket
context = ssl.create_default_context()context.load_verify_locations(cafile="ca.pem")
with socket.create_connection(('localhost', 8443)) as sock:    with context.wrap_socket(sock, server_hostname='localhost') as ssock:        print("已验证服务器证书")

例 5:查看系统默认 CA 路径

import ssl
paths = ssl.get_default_verify_paths()print("默认 CA 文件路径:", paths.cafile)print("默认 CA 目录路径:", paths.capath)

  ◆  ◆

常用函数速览

ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)

创建一个带默认安全设置的 SSLContext 对象。

参数:

purpose:用途,默认是 SERVER_AUTH(即验证服务器证书)

返回:SSLContext 实例

ssl.SSLContext(protocol)

手动创建 SSL 上下文对象。

参数:

protocol:使用的协议。如 ssl.PROTOCOL_TLS_CLIENT, ssl.PROTOCOL_TLS_SERVER)

返回:一个上下文对象,可用于进一步配置

SSLContext.load_cert_chain(certfile, keyfile=None)

加载本地证书和私钥,通常用于服务端。

参数:

certfile:证书文件路径(.pem)

keyfile:私钥文件路径(可选)

SSLContext.load_verify_locations(cafile=None, capath=None)

指定 CA 文件或目录,用于验证对方证书。

参数:

cafile:CA 证书路径

capath:包含多个 CA 证书的目录路径

SSLContext.wrap_socket(sock, server_side=False, ...)

将普通 socket 对象包装成支持 SSL 的 socket。

参数:

sock:普通 socket 对象

server_side:是否作为服务器端

返回:SSL socket 对象

ssl.get_default_verify_paths()

返回系统默认的证书路径信息,用于调试。

  ◆  ◆

补充说明

1、ssl 模块是 Python 原生支持安全通信的重要工具。

2、通过 SSLContext 对象集中管理证书、密钥、加密套件等。

3、使用简便的 create_default_context() 可快速构建 HTTPS 客户端。

4、搭配 socket 或 http.client, urllib, smtplib 等模块可实现完整的加密通信链路。

5、推荐结合 cryptography 或 certifi 模块进一步提升证书管理能力。

图片

“点赞有美意,赞赏是鼓励”


网站公告

今日签到

点亮在社区的每一天
去签到