我们正在使用Python& OpenSSL读取CRL文件以提取已撤销的证书序列号列表。在解析文件之前,我们需要添加一个检查来验证CRL是否已使用受信任的证书导出。
从命令行,相应的OpenSSL命令是:
openssl crl -inform DER -in {crlfile} -CAfile {mycacert} -noout
输出verify OK
或verify failure
是否有Pythonic方法来执行此验证,而不是必须使用命令行脚本?
THX
答案 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
答案 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()