You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mitmproxy新版本TLS握手失败:SHA1签名算法缺失解决方案咨询

解决mitmproxy v9+与仅支持SHA1签名算法的IoT设备TLS握手问题

问题背景

  • 使用mitmproxy记录仅支持SHA1签名算法的IoT设备TLS 1.2流量
  • mitmproxy v8.0.0可正常工作,升级至v9.0.0+后出现TLS握手失败,OpenSSL提示无共享签名算法,抓包显示mitmproxy未提供SHA1签名算法
  • 版本依赖差异:
    • v8.0.0:cryptography>=36,<37、pyOpenSSL>=21.0,<22.1
    • v9.0.1:cryptography>=38.0,<38.1、pyOpenSSL>=22.1,<22.2
  • 已尝试操作:
    • 自行编译基于OpenSSL 1.1.1n的cryptography 38.0.4,问题依旧
    • 降低依赖版本会破坏v9.0.1的API兼容性
    • 重新编译v8.0.0的cryptography也无法解决,怀疑与docker镜像python:3.9-slim-bullseye的OpenSSL环境有关

可行解决方案:修改mitmproxy的TLS签名算法配置

mitmproxy允许通过自定义脚本调整TLS上下文的签名算法套件,无需修改核心依赖或破坏API兼容性,具体步骤如下:

1. 编写自定义mitmproxy脚本

创建Python脚本(例如enable_sha1.py),通过configure钩子修改服务器TLS上下文的签名算法列表:

from mitmproxy import ctx
from mitmproxy.proxy.layers.tls import TlsConfig
from cryptography.hazmat._oid import SignatureAlgorithmOID

def load(l):
    ctx.log.info("Loaded SHA1 signature enabler script")

def configure(updated):
    if "tlsconfig" in updated:
        tls_config: TlsConfig = ctx.options.tlsconfig
        # 获取当前签名算法列表并添加SHA1-RSA项
        sig_algs = tls_config.ciphers_server.get_signature_algorithms()
        sig_algs.append(SignatureAlgorithmOID.RSA_WITH_SHA1)
        # 更新TLS配置的签名算法
        tls_config.ciphers_server.set_signature_algorithms(sig_algs)
        ctx.log.info(f"Added SHA1-RSA to server signature algorithms: {sig_algs}")

2. 启动mitmproxy时加载脚本

执行以下命令启动mitmproxy,加载自定义脚本:

mitmproxy -s enable_sha1.py

3. 验证配置生效

  • 查看mitmproxy日志,确认已成功添加SHA1-RSA签名算法
  • 用抓包工具(如Wireshark)检查Server Hello包,确认mitmproxy已包含SHA1相关签名算法
  • 测试IoT设备连接,验证TLS握手成功

关键说明

  • 该方法直接修改mitmproxy的TLS上下文配置,无需调整底层cryptography或pyOpenSSL版本,不会破坏v9+的API兼容性
  • SHA1签名算法存在安全风险,仅建议在无法升级IoT设备的临时场景下使用
  • 若使用Docker部署mitmproxy,需将脚本挂载到容器内,并在启动命令中指定加载该脚本

内容的提问来源于stack exchange,提问作者Schr0nk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:00:53