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

Python requests请求触发SSLError(9, '[SSL] PEM lib (_ssl.c:4027)')求助

解决requests SSL错误:[SSL] PEM lib (_ssl.c:4027)

问题根源

你遇到的错误核心有两个:

  1. requests的cert参数用法错误:该参数仅接受客户端证书和私钥的二元组,根证书不能放在这里,应该用verify参数指定。
  2. 客户端证书格式不兼容:你提供的certificate.0025598.der是DER二进制格式,而requests要求PEM文本格式的证书。

修复步骤

1. 转换DER证书为PEM格式

用OpenSSL命令把DER格式的证书转成PEM:

openssl x509 -inform der -in certificate.0025598.der -out client_cert.pem

2. 修正requests请求代码

调整参数,把根证书放到verify,客户端证书和密钥放到cert:

import requests

url = 'https://ecomm.pashabank.az:18443/ecomm2/MerchantHandler'
headers = {'content-type': 'application/json'}
data = {
    "command": "v",
    "amount": "10",
    "currency": "932",
    "client_ip_addr": "167.992.139.153",
    "msg_type": "SMS"
}

# 证书路径(转换后的客户端证书、密钥、根证书)
client_cert = "client_cert.pem"
key_file = "certificate.0025598.pem"
root_cert = "PSroot.pem"

# 正确的参数传递方式
response = requests.post(
    url,
    json=data,  # 用json参数自动设置Content-Type,比手动加headers更可靠
    cert=(client_cert, key_file),
    verify=root_cert
)

print(response.status_code)
print(response.text)

额外注意事项

  • 如果你的私钥文件(certificate.0025598.pem)设置了密码,需要在cert参数里加上密码,比如cert=(client_cert, key_file, "your_password"),或者用OpenSSL去掉密码:
    openssl rsa -in certificate.0025598.pem -out unencrypted_key.pem
    
  • 确保所有证书文件路径正确,脚本所在目录能读取到这些文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:22