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

Python requests使用CRT证书与密钥文件遇SSL错误的解决求助

解决Python requests调用API时的SSL CA_MD_TOO_WEAK错误

问题原因

请求失败是因为服务器的CA证书使用了弱消息摘要算法(如MD5或SHA1),现代Python/OpenSSL版本默认拒绝这类证书,而Postman的SSL验证规则更宽松,因此可以正常请求。

解决方案

1. 理想方案:更新CA证书

联系API服务提供者,获取使用强哈希算法(SHA256及以上)签名的CA证书,这是最安全的解决方式。

2. 临时 workaround:放宽SSL验证规则

如果无法更新CA证书,可通过自定义SSL上下文绕过弱摘要检查(注意:此操作会降低安全性,仅在完全信任目标服务器时使用)。

方案A:禁用弱CA摘要检查

通过修改SSL上下文的验证标志,关闭对CA证书摘要强度的检查:

import requests
import json
import ssl
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager

class WeakMDAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        # 关闭弱CA摘要检查
        ctx.verify_flags &= ~ssl.VERIFY_CA_MD_TOO_WEAK
        kwargs['ssl_context'] = ctx
        return super().init_poolmanager(*args, **kwargs)

url = "你的API地址"
cert_path = "证书路径"
key_path = "密钥路径"

try:
    payload = {"key": "val"}
    headers = {'content-type': 'application/json'}

    session = requests.Session()
    session.mount('https://', WeakMDAdapter())
    session.cert = (cert_path, key_path)
    
    response = session.post(url, data=json.dumps(payload), headers=headers)

    print("Response status code:", response.status_code)
    print("Response content:", response.text)

except Exception as err:
    print(f"An error occurred: {err}")

方案B:降低SSL安全级别

通过设置SSL安全级别为1,允许使用较弱的加密算法:

import requests
import json
import ssl
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager

class LowSecurityAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        # 降低SSL安全级别到1
        ctx.set_ciphers('DEFAULT:@SECLEVEL=1')
        kwargs['ssl_context'] = ctx
        return super().init_poolmanager(*args, **kwargs)

url = "你的API地址"
cert_path = "证书路径"
key_path = "密钥路径"

try:
    payload = {"key": "val"}
    headers = {'content-type': 'application/json'}

    session = requests.Session()
    session.mount('https://', LowSecurityAdapter())
    session.cert = (cert_path, key_path)
    
    response = session.post(url, data=json.dumps(payload), headers=headers)

    print("Response status code:", response.status_code)
    print("Response content:", response.text)

except Exception as err:
    print(f"An error occurred: {err}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:28:16