python - 无法发送请求、OpenSSL 密钥和证书错误
问题描述
我对 Linux 和 Windows 有不同的错误输出(都使用 python 3.7.3 和 PyOpenSSL 19.0)。
response = s.post(url=my_url,
data=json.dumps(data.__dict__),
timeout=15,
headers={'accept': 'application/json', 'content-type':'application/json'},
cert=(str(Path(__file__).parents[1]) + "/my_key.key",str(Path(__file__).parents[1]) + "/my_cert.crt"),
verify=False)
我已经OpenSSL
在两个系统上都安装了 Python 的包装器。
在 Windows 上:
OpenSSL.SSL.Error: [('PEM routines', 'get_name', 'no start line'), ('SSL routines', 'use_certificate_chain_file', 'PEM lib')]
在 Linux 上
[('PEM routines', 'get_name', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
而且我确定证书和密钥都可以,因为我已经尝试过curl
请求。
是什么导致了这个错误?
解决方案
您的证书和密钥文件格式不正确。从错误中,它看起来需要 PEM 格式的证书和密钥。
我的猜测是您的证书和密钥是 DER 格式。尝试将文件从 DER 转换为 PEM。
请参阅https://serverfault.com/questions/254627/how-do-i-convert-a-cer-certificate-to-pem作为如何将 CER 转换为 PEM 格式的示例。
推荐阅读
- python - 为什么我不能使用 sendkeys 在文本框中输入文本?
- java - 如何在Java插入准备好的语句中用空字符串替换Null
- ansible - 如何在我的剧本上创建断言?
- java - 使用 java 以编程方式更新时,有没有办法保持文件的初始 yaml 格式?
- java - 将 HTML 转换为图像获取 java.io.IOException:流已关闭
- php - 逐行循环多维
- python-3.x - Keras 自定义损失 - 合并多个分支的损失
- python - 如何删除具有非 NaN 值的列的行
- reactjs - 反应复选框未初始获取对象的值
- cordova - 更改 Cordova Geolocation iOS 的显示名称