无法发送请求,OpenSSL密钥和证书错误

时间:2019-08-05 14:36:38

标签: 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')]

而且我确定cert和key都可以,因为我已经尝试过curl请求。

什么原因导致此错误?

1 个答案:

答案 0 :(得分:1)

您的证书和密钥文件格式不正确。从该错误看来,它似乎需要使用PEM格式的证书和密钥。

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

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