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

如何解析Python cryptography库x509证书的KeyUsage扩展

问题解答

1. KeyUsage对象的类型说明

你拿到的KeyUsage.value就是cryptography.x509.extensions.KeyUsage类的实例,这是cryptography库专门封装X509证书密钥用法扩展的强类型类,对应RFC5280标准定义的9种密钥用法,每个用法的启用状态都以布尔属性的形式存在于实例中。
你之前误以为它是可迭代对象,大概率是混淆了证书扩展集合的属性和单个扩展实例的属性:证书的extensions集合本身是可迭代的,可以遍历所有扩展,但单个KeyUsage实例是固定属性的强类型对象,不是可迭代序列。

2. 转换为dict的实现方法

KeyUsage类没有内置转字典的方法,你可以用以下两种方式实现转换:

手动映射(推荐)

因为KeyUsage的属性是固定不变的,手动映射的稳定性最高,不会受库版本迭代影响:

from cryptography.x509 import ExtensionOID

# 获取KeyUsage扩展实例
key_usage_ext = certDecoded.extensions.get_extension_for_oid(ExtensionOID.KEY_USAGE)
key_usage = key_usage_ext.value

# 构造字典
key_usage_dict = {
    "digital_signature": key_usage.digital_signature,
    "content_commitment": key_usage.content_commitment,
    "key_encipherment": key_usage.key_encipherment,
    "data_encipherment": key_usage.data_encipherment,
    "key_agreement": key_usage.key_agreement,
    "key_cert_sign": key_usage.key_cert_sign,
    "crl_sign": key_usage.crl_sign,
    "encipher_only": key_usage.encipher_only,
    "decipher_only": key_usage.decipher_only
}

通用自动转换

如果不想手动写全所有属性,可以用内置属性过滤实现:

key_usage_dict = {k: v for k, v in key_usage.__dict__.items() if not k.startswith('_')}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:01