You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python cryptography库验证分离式PKCS7/SMIME签名?

使用cryptography库复现OpenSSL SMIME签名验证命令

你提到的PKCS7/SMIME签名验证功能,在cryptography 3.4版本及以上已正式支持,无需依赖内部测试代码,以下是对应OpenSSL命令的实现方案:

核心实现代码

from cryptography.hazmat.primitives.serialization import pkcs7
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend

# 加载CA证书(对应OpenSSL的-CAfile ca.crt)
with open("ca.crt", "rb") as f:
    ca_cert = load_pem_x509_certificate(f.read(), default_backend())

# 加载DER格式的签名文件(对应OpenSSL的-inform der -in sig.rsa)
with open("sig.rsa", "rb") as f:
    pkcs7_signature = pkcs7.load_der_pkcs7_signature(f.read())

# 加载原始内容文件(对应OpenSSL的-content data.txt)
with open("data.txt", "rb") as f:
    content = f.read()

# 执行签名验证(对应OpenSSL的-verify -purpose any)
try:
    pkcs7_signature.verify(
        content=content,
        trusted_certificates=[ca_cert],
        purpose=pkcs7.Purpose.ANY
    )
    print("签名验证通过")
except pkcs7.InvalidSignature:
    print("签名验证失败")

关键说明

  • 必须确保cryptography版本≥3.4,旧版本不支持该验证API
  • 代码中pkcs7.Purpose.ANY对应OpenSSL命令的-purpose any,若需特定用途验证,可替换为pkcs7.Purpose.EMAIL_PROTECTION等枚举值
  • 验证失败会抛出pkcs7.InvalidSignature异常,需捕获处理

内容的提问来源于stack exchange,提问作者cegfault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:13:16