使用Python Requests携证书调用API遇ssl.SSLError: [SSL] PEM lib错误求助
解决Python Requests调用API时的ssl.SSLError: [SSL] PEM lib错误
问题原因
你遇到的ssl.SSLError: [SSL] PEM lib错误,核心原因有两个:
.cer格式证书通常是DER二进制格式,而Requests的cert参数要求使用PEM文本格式的证书文件。cert参数的用法有误:当仅提供证书(无对应私钥)时,应直接传入证书路径字符串,而非(证书路径, None)的元组形式(元组格式用于同时指定证书和私钥文件)。
解决方案
1. 将DER格式的.cer证书转换为PEM格式
使用OpenSSL命令将证书转换为PEM格式:
openssl x509 -inform der -in hawkeyeCertificate.cer -out hawkeyeCertificate.pem
转换后,确保新生成的hawkeyeCertificate.pem文件被正确复制到服务器的脚本目录中。
2. 修正Requests代码中的cert参数用法
修改脚本中的证书路径和cert参数:
import os import requests script_directory = os.path.dirname(os.path.abspath(__file__)) # 改为使用转换后的PEM格式证书 certificate_file_path = os.path.join(script_directory, 'hawkeyeCertificate.pem') # 直接传入证书路径字符串,而非元组 response = requests.get(is_epp_api_end_point, headers=access_token, params=params, cert=certificate_file_path)
3. 验证证书文件完整性
确保Jenkins复制到服务器的证书文件未损坏,可通过以下命令验证:
# 验证原.cer文件(DER格式) openssl x509 -inform der -in hawkeyeCertificate.cer -text -noout # 验证转换后的PEM文件 openssl x509 -in hawkeyeCertificate.pem -text -noout
如果命令能正常输出证书的详细信息,说明文件完整有效。
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

