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

提取CRL版本属性遇AttributeError错误,寻求解决方法

解决cryptography提取CRL版本时的AttributeError问题

问题原因

你遇到的AttributeError是因为旧版本的cryptography库中,_CertificateRevocationList对象并没有version属性,或是代码缺少必要的模块导入。


解决方案

1. 补全模块导入

确保代码顶部导入x509模块,否则会先触发NameError:

from cryptography import x509
from cryptography.hazmat.backends import default_backend

2. 升级cryptography库

较新版本(3.0+)的cryptography已经为CertificateRevocationList类添加了version属性。运行以下命令升级:

pip install --upgrade cryptography

升级后,你可以直接通过crl.version获取版本枚举对象:

from cryptography import x509
from cryptography.hazmat.backends import default_backend

def extract_crl_version(crl_file_path):
    with open(crl_file_path, "rb") as file:
        crl_data = file.read()

    crl = x509.load_der_x509_crl(crl_data, default_backend())
    # Version枚举对应关系:v1→CRL版本1,v2→CRL版本2
    # 可以通过.value获取ASN.1中的索引值,或直接打印枚举名称
    return crl.version.name, crl.version.value

crl_file_path = "path/to/crl.crl"
version_name, version_value = extract_crl_version(crl_file_path)
print(f"CRL Version: {version_name} (ASN.1索引: {version_value})")

注:openssl显示的"Version 2"对应枚举x509.Version.v2,其value为1(ASN.1版本索引从0开始计数)。

3. 无法升级时的替代方案

如果受环境限制不能升级库,可以手动解析ASN.1结构获取版本:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asn1 import DerSequence

def extract_crl_version(crl_file_path):
    with open(crl_file_path, "rb") as file:
        crl_data = file.read()

    crl_seq = DerSequence().from_bytes(crl_data, default_backend())
    # CRL的ASN.1结构中,第一个字段是可选的版本索引(缺省为0,对应CRL版本1)
    if isinstance(crl_seq[0], int):
        # 索引+1得到人类可读的CRL版本号
        crl_version = crl_seq[0] + 1
    else:
        crl_version = 1
    return crl_version

crl_file_path = "path/to/crl.crl"
print("CRL Version:", extract_crl_version(crl_file_path))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:35:21