我正在尝试使用pyOpenSSL来检查客户端需要与我的应用程序一起使用的.pfx文件的过期时间。我们向客户颁发证书,并且每两年到期一次。我知道在命令行中使用openssl,通过转换为.pem然后在生成的.pem文件上运行'-noout -enddate'。
客户端很可能没有安装openssl,所以我想尽可能使用该库。我如何检查.pfx到期日期?我已经加载了证书,但不知道如何A)转换为.pem文件(如果我需要)和B)检查该.pem文件(或编码字符串)的到期时间。
谢谢!
到目前为止:
import OpenSSL
from OpenSSL.crypto import *
cert_path = 'C:\\Clients\\Omega\\bos.omegaadv.gtssloader.pfx'
p12 = load_pkcs12(open(cert_path, 'rb').read(), 'globallink')
x = p12.get_certificate()
print(OpenSSL.crypto.dump_certificate(FILETYPE_PEM, p12.get_certificate()))
代码
答案 0 :(得分:0)
您需要转换为x509,然后才能通过访问属性 not_valid_after
来检索到期日期。我使用库密码进行转换
尝试:
from OpenSSL import crypto
from cryptography import x509
from cryptography.hazmat.backends import default_backend
pkcs12 = crypto.load_pkcs12(open('cert.pfx', "rb").read(), '1234')
pem_data = crypto.dump_certificate(crypto.FILETYPE_PEM, pkcs12.get_certificate())
cert = x509.load_pem_x509_certificate(pem_data, default_backend())
print(cert.not_valid_after)
输出: 2019-08-03 19:35:19
答案 1 :(得分:0)
避免:
<块引用>DeprecationWarning: str for passphrase 不再被接受,使用 字节
换四行:
pkcs12 = crypto.load_pkcs12(open('cert.pfx', "rb").read(), '1234'.encode('ascii'))