对于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
请求。
什么原因导致此错误?
答案 0 :(得分:1)
您的证书和密钥文件格式不正确。从该错误看来,它似乎需要使用PEM格式的证书和密钥。
我的猜测是您的证书和密钥采用DER格式。尝试将文件从DER转换为PEM。
有关如何将CER转换为PEM格式的示例,请参见https://serverfault.com/questions/254627/how-do-i-convert-a-cer-certificate-to-pem。