pyopenssl无法设置x509证书[证书必须是X509实例]

时间:2019-11-04 06:58:40

标签: python python-3.x openssl x509certificate pyopenssl

我正在使用pyopenssl lib,我想使用其crypto.PKCS12对象apis生成p12文件。

因此,此证书值是从API获取的,并保存在以下文件中:

  

echo -e“ -----带有开始和结尾的证书文本-----”> cert.crt

创建文件,当我在命令下运行时,会有正确的输出,即使我在线验证它,也显示一切正常:

  

openssl x509 -in cert.crt -text -noout

现在的问题是,当使用下面的方法将证书设置为PKCS12对象时,会出现错误:

from OpenSSL import crypto

p12 = crypto.PKCS12()
p12.set_certificate("/home/someuser/Documents/path/to/cert.crt")

然后抛出错误:

  

文件   “ /home/someuser/.local/lib/python3.6/site-packages/OpenSSL/crypto.py”,   set_certificate中的第2429行       引发TypeError(“证书必须是X509实例”)

我无法理解lib为什么抱怨该证书。我在这里想念什么吗?

1 个答案:

答案 0 :(得分:0)

在将证书设置为X509容器之前,需要将证书作为PKCS12对象加载。

首先,您应该:

  • 将证书文件的内容读入缓冲区
  • 使用load_certificate从缓冲区创建X509

结果可能如下所示:

from OpenSSL import crypto

with open("/home/someuser/Documents/path/to/cert.crt", "r") as file:
    data = file.read()

x509 = crypto.load_certificate(crypto.FILETYPE_PEM, data);

p12 = crypto.PKCS12()
p12.set_certificate(x509)