当前位置: 首页 > 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.jsqmd.com/news/1024475/

相关文章:

  • 2026年6月青岛奢侈品回收分级测评!7家正规平台评级,最优口碑出炉 - 薛定谔的梨花猫
  • LVI-SAM实战:从传感器标定到参数调优,跑通自定义数据全指南
  • 2026 智能外呼系统实测排行:综合能力出众,数企 AI 成企业降本优选 - 兔兔不是荼荼
  • 2026中小艺培校长亲测:培训机构管理系统避坑指南,搞定排课家校
  • 藏饰盘活不踩坑|2026哈尔滨首饰回收实测排行与行情解析 - 名奢变现站
  • 2026年营口鲅鱼圈区防身格斗培训真实测评与挑选标准 - 速递信息
  • 2026珠海甲醛治理品牌测评:海景房高盐高湿环境7大技术指标实测,谁扛得住回南天 - 环保除醛知识库
  • 5分钟获取免费OpenAI API密钥的终极指南:零成本解锁AI开发能力
  • 开发者有必要长期用 ChatGPT Plus 吗?从 Debug、代码解释和数据安全说清楚
  • 单视频生成多样性内容的技术原理与边界
  • 2026年青岛品牌首饰回收TOP榜|七家机构硬核实测 添价收黄金奢侈品回收最值得托付 - 薛定谔的梨花猫
  • Java 三大修饰符
  • 2026年全国知名中空板厂家行业三大趋势解读 - 速递信息
  • 索尼AI乒乓球机器人如何推动物理AI技术发展
  • 2026年西安企业高新技术认定与知识产权保护全攻略:五大服务机构深度对标 - 精选优质企业推荐官
  • 柔性化生产怎么抓?2026年异形物料吸盘吸嘴供应商优选指南 - 品牌2026
  • 3分钟掌握B站缓存视频转换:m4s-converter无损合并全攻略
  • 数据技能跃迁:从工具操作到业务建模的能力重构
  • 数字创作者必备:微观法律合规与知识产权保护实操指南
  • 国内高含金量知名半导体博览会盘点:一场覆盖全产业链的行业盛宴 - 品牌2026
  • 赛马娘DMM版终极本地化指南:3分钟实现中文界面与性能优化
  • iotdb 安装和 ai预测
  • EasyExcel-实战-大数据量导入导出与样式处理
  • 2026沈阳黄金回收避坑终极攻略!内行私藏靠谱门店清单 - 奢侈品回收评测
  • 深圳光明区自建10000㎡+现代化实体仓储基地 - 资讯报道
  • 2026杭州二手奢侈品回收实测排行:拒绝套路,这5家店回收流程全透明 高价透明不压价 - 生活测评君
  • 如何设计让员工主动成长的内部竞争机制
  • 2026年郑州企业短视频获客与AI搜索优化完整方案|从内容到转化的全链路服务商对标 - 精选优质企业推荐官
  • 终极指南:3步免费让老款Mac升级到最新macOS系统
  • 如何发起最美幼师微信评选活动?零刷票零投诉保姆级教程,班主任亲测有效(附避坑指南) - 微信投票小程序