读取 python 中的证书(.crt)和密钥(.key)文件

read certificate(.crt) and key(.key) file in python

所以我正在使用 JIRA-Python 模块连接到我公司在 JIRA 上的实例,它需要我为此传递证书和密钥。 但是使用 OpenSSL 模块,我无法读取我的本地证书和密钥以将其随请求传递。

阅读代码如下

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 对象吗?

您的 .crt 文件中的哪种格式。 有没有:

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

在前两种情况下有 PEM 格式,但在第二种情况下你缺少起始行,只需添加它以获得正确的 PEM 文件或使用 base64 将文件转换为二进制文件并获得第三种情况。

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

@can-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>