2016-08-05 1167 views
1

因此,我使用JIRA-Python模块连接到我公司在JIRA上的实例,它要求我通过证书和密钥。 但是,使用OpenSSL模块时,我无法读取本地证书和密钥,以便将其沿请求传递。在Python中读取证书(.crt)和密钥(.key)文件

用于读取的代码如下

import OpenSSL.crypto 
c = open('/Users/mpadakan/.certs/mpadakan-blr-mpsot-20160704.crt').read() 
cert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, c) 

错误我得到的是

Traceback (most recent call last): 
File "flaskApp.py", line 19, in <module> 
cert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, c) 
TypeError: must be X509, not str 

有人能告诉我如何看我的地方.CRT和.key文件到X509的对象?

+0

更多信息,请。为什么你无法读取本地证书和密钥? –

+0

肯定的事情。只是做了更改 –

+2

我相信你在这里使用了错误的方法。 'dump_certificate'方法需要X509证书,并将其转储为字符串。您似乎想要从字符串中加载证书。你有没有尝试过使用'load_certificate'? –

回答

0

你的.crt文件中的格式。 是否有:

  1. 文本开始-----BEGIN CERTIFICATE-----
  2. 的base64文本开始MI字符
  3. 二进制数据开始\x30字节?

在头两个案例有PEM格式,但在第二个你缺少凝视线,只需添加它来获得正确的PEM文件或文件转换与base64为二进制并获得第三种情况。

在第三种情况下,你有DER格式,所以加载它,你应该使用OpenSSL.crypto.FILETYPE_ASN1

0

@灿ibanoglu是正确的:

import OpenSSL.crypto 
cert = OpenSSL.crypto.load_certificate(
    OpenSSL.crypto.FILETYPE_PEM, 
    open('/tmp/server.crt').read() 
) 

>>> cert 
<OpenSSL.crypto.X509 object at 0x7f79906a6f50>