当前位置: 首页 > news >正文

Python SSL与TLS安全连接实现细节

Python SSL与TLS安全连接实现细节

ssl模块提供TLS/SSL协议的Python封装。它基于OpenSSL库,支持客户端和服务器的安全通信。

创建TLS上下文:

import ssl

# 创建客户端上下文
ctx = ssl.create_default_context()
# 自动加载系统CA证书

# 创建服务器上下文
server_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
server_ctx.load_cert_chain(certfile='server.crt', keyfile='server.key')

create_default_context根据用途预设安全选项。ssl.Purpose.SERVER_AUTH用于客户端连接,ssl.Purpose.CLIENT_AUTH用于服务器连接。

自定义上下文选项:

ctx = ssl.create_default_context()

# 设置最低TLS版本
ctx.minimum_version = ssl.TLSVersion.TLSv1_2

# 设置密码套件
ctx.set_ciphers('ECDHE+AESGCM:!aNULL:!MD5')

# 禁用不安全的协议
ctx.options |= ssl.OP_NO_TLSv1
ctx.options |= ssl.OP_NO_TLSv1_1

TLS版本和密码套件的配置直接影响安全性。SSLv2/3已完全废弃。

安全客户端连接:

import socket
import ssl

hostname = 'example.com'
ctx = ssl.create_default_context()

with socket.create_connection((hostname, 443)) as sock:
with ctx.wrap_socket(sock, server_hostname=hostname) as ssock:
print(f"TLS version: {ssock.version()}")
print(f"Cipher: {ssock.cipher()}")
print(f"Certificate: {ssock.getpeercert()}")
ssock.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
data = ssock.read(1024)

wrap_socket将普通socket包装为TLS socket。server_hostname启用SNI和主机名校验。

证书验证细节:

cert = ssock.getpeercert()
if cert:
print(f"Subject: {dict(x[0] for x in cert['subject'])}")
print(f"Issuer: {dict(x[0] for x in cert['issuer'])}")
print(f"Valid from: {cert['notBefore']}")
print(f"Valid to: {cert['notAfter']}")
print(f"Serial: {cert['serialNumber']}")

getpeercert(binary_form=True)返回DER格式的原始证书。配合cryptography库深入解析。

自定义证书验证:

def verify_cert(conn, cert, errno, depth, ok):
if depth == 0: # 叶子证书
if cert.subject.get_attributes_for_oid('2.5.4.3')[0].value != 'example.com':
return False
return ok

ctx = ssl.create_default_context()
ctx.verify_flags = ssl.VERIFY_X509_STRICT
# 通过set_verify回调自定义验证逻辑

服务器端TLS:

import socket
import ssl

ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('server.crt', 'server.key')

# 要求客户端证书
ctx.verify_mode = ssl.CERT_REQUIRED
ctx.load_verify_locations('ca.crt')

with socket.socket() as sock:
sock.bind(('localhost', 8443))
sock.listen(5)
with ctx.wrap_socket(sock, server_side=True) as ssock:
conn, addr = ssock.accept()
# 处理连接

CERT_REQUIRED要求客户端提供证书。CERT_OPTIONAL接受但不强制。CERT_NONE不验证客户端证书。

内存中的证书加载:

# 从字符串加载证书
cert_pem = b"-----BEGIN CERTIFICATE-----\n..."
key_pem = b"-----BEGIN PRIVATE KEY-----\n..."
ctx.load_cert_chain(cadata=cert_pem, keyfile=key_pem)

# 从内存加载CA证书
ctx.load_verify_locations(cadata=cert_pem)

SSL上下文对象线程安全,但在多线程中应避免同时修改。

会话复用:

ctx.set_session_id(b"MyApplication")

# 创建会话对象
session = ssock.session

# 在新连接上复用会话
new_ssock.session = session

会话复用减少TLS握手次数,提升性能。

ALPN协议协商:

ctx.set_alpn_protocols(['h2', 'http/1.1'])
# 服务器端设置
# ctx.set_alpn_protocols(['h2', 'http/1.1'])

alpn = ssock.selected_alpn_protocol()
print(f"Negotiated: {alpn}") # 'h2'或'http/1.1'

ALPN(应用层协议协商)让TLS握手阶段商定上层协议。

SSL/TLS的最佳实践:

ctx = ssl.create_default_context()

# 禁用压缩(防止CRIME攻击)
ctx.options |= ssl.OP_NO_COMPRESSION

# 启用安全重协商
ctx.options |= ssl.OP_NO_RENEGOTIATION

# 设置DH参数(前向安全性)
# ctx.load_dh_params('dhparam.pem')

# 设置会话缓存
ctx.session_stats()

OP_NO_COMPRESSION防止CRIME攻击。OP_NO_RENEGOTIATION防止重新协商。DH参数提供完美前向安全性。

http://www.rkmt.cn/news/1536338.html

相关文章:

  • 亨得利官方辟谣避坑全指南:线上虚假广告实地核查 + 真伪辨别教程(推荐收藏备用) - 亨得利官方维修中心
  • 2026年营口鲅鱼圈区防身格斗培训真实测评与挑选标准 - 速递信息
  • 5分钟获取免费OpenAI API密钥的终极指南:零成本解锁AI开发能力
  • 柔性化生产怎么抓?2026年异形物料吸盘吸嘴供应商优选指南 - 品牌2026
  • EasyExcel-实战-大数据量导入导出与样式处理
  • 深圳光明区自建10000㎡+现代化实体仓储基地 - 资讯报道
  • 终极指南:3步免费让老款Mac升级到最新macOS系统
  • 2026年郑州企业短视频获客与AI搜索优化完整方案|从内容到转化的全链路服务商对标 - 精选优质企业推荐官
  • 2026年EPP内衬/包装/板材/片材制造企业推荐排行 - 速递信息
  • 2026新游通信服务口碑观察:技术团队与落地能力全面解读 - 速递信息
  • 花生十三公考课程|网课|视频
  • 2026年和平区口碑好的驾校,沈阳和平区考驾照避坑完整指南:东大旁十五年通运驾校,一对一接送零隐形消费,C1/C2/D 证一站式培训 - GrowthUME
  • 短视频无水印下载器
  • 显存不够别硬撑,FP8 量化让 70B 大模型在单卡 Instinct 上流畅运行
  • 终极直播互动革命:三步搭建你的战败惩罚游戏控制器
  • 2026 深圳名包回收榜单!靠谱渠道全盘点 - 讯息早知道
  • 2026 济宁防水补漏深度行业资讯:专业维修公司 TOP3 排名调研解析,漏水检测修复,卫生间免砸砖、屋顶、地下室、阳台飘窗漏水、瓷砖空鼓修补全方位测评 - 泛家庭维修
  • 2026宁波回收黄金门店推荐,专业门店无损检测高价回收 - 名奢变现站
  • Codestral代码生成实战:FIM与Chat双接口深度解析
  • 敏感肌宝宝超薄纸尿裤选购指南 3家品牌7项维度实拍解析 - 热点速览
  • 2026 广东深圳全域彩钢瓦翻新防水修缮 TOP4 权威推荐|厂房金属屋面除锈喷漆公司对比 + 完整避坑指南 - 本地便民网
  • 开发环境端口老打架?试试这3招,给你的本地项目分配专属端口(附避坑指南)
  • MPC8360E的DLL模块:时钟对齐原理、配置与实战调试
  • 2026年电滑环工厂避坑指南:技术极客如何选择靠谱旋转传输伙伴 - 品牌报告
  • 上海宝山金瑞学校:十六年一贯制国际化教育的创新实践 - 资讯报道
  • Chromostatin (bovine) (Chromogranin A (124-143) (bovine))
  • 2026年电动伸缩门怎么选?优质品牌TOP5 实力测评与综合推荐! - 深度智识库
  • 自由度的本质:数据建模中的信息代价与约束逻辑
  • 独立博客搭建指南:静态站点生成器实战与数字主权构建
  • 大模型应用日志体系、Callback 源码链路、Trace 复盘、企业级落地