Python OpenSSL - 验证CRL文件

时间:2014-08-12 12:12:40

标签: python openssl

我们正在使用Python& OpenSSL读取CRL文件以提取已撤销的证书序列号列表。在解析文件之前,我们需要添加一个检查来验证CRL是否已使用受信任的证书导出。

从命令行,相应的OpenSSL命令是: openssl crl -inform DER -in {crlfile} -CAfile {mycacert} -noout

输出verify OKverify failure

是否有Pythonic方法来执行此验证,而不是必须使用命令行脚本?

THX

2 个答案:

答案 0 :(得分:2)

使用python执行此操作的方法之一是使用subprocess模块。

如果您使用的时间晚于Python 2.7,则可以使用要运行的命令调用check_output方法。见下文:

import subprocess

# Files to verify
crlfile = r"path\to\crlfile"
mycacert = r"path\to\mycacert"
# Set up args
args = ["openssl", "crl", "-inform", "DER", "-in", crlfile, "-CAfile", mycacert, "-noout"]
# Run the thing
output = subprocess.check_output(args)
verified = True if output.upper() == "VERIFY OK" else False

根据this拉取请求,此功能现在可在pyOpenSSL中使用。

答案 1 :(得分:1)

通过使用pyOpenSSL,有更多的Pythonic方法可以做到这一点:

import requests
import OpenSSL

# Donwload and load your CRL
resp = requests.get(CRL_URL)
crl = OpenSSL.crypto.load_crl(OpenSSL.crypto.FILETYPE_ASN1, resp.content)

# Export CRL as a cryptography CRL.
crl_crypto = crl.to_cryptography()

# Load CA CERTIFICATE
ca = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, '-----BEGIN...'.encode())    

# Get CA Public Key as _RSAPublicKey
ca_pub_key = ca.get_pubkey().to_cryptography_key()

# Validate CRL against CA
valid_signature = crl_crypto.is_signature_valid()