首页 > 解决方案 > 无法发送请求、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请求。

是什么导致了这个错误?

标签: pythonopenssl

解决方案


您的证书和密钥文件格式不正确。从错误中,它看起来需要 PEM 格式的证书和密钥。

我的猜测是您的证书和密钥是 DER 格式。尝试将文件从 DER 转换为 PEM。

请参阅https://serverfault.com/questions/254627/how-do-i-convert-a-cer-certificate-to-pem作为如何将 CER 转换为 PEM 格式的示例。


推荐阅读