python - 解码 Scapy ASN1 编码的 SSL/TLS 证书字段

标签 python ssl scapy asn.1

我正在使用我使用 pip 安装的 scapy-ssl_tls 库从 serverhello 数据包中提取 SSL/TLS 证书字段。

问题是,我无法找到从 ASN1 编码字段中提取值的方法:

sign_algo2:  <ASN1_OID['.1.2.840.113549.1.1.11']>
sa2_value:  <ASN1_NULL[0L]>
not_before:  <ASN1_UTC_TIME['170321131500Z']>
not_after:  <ASN1_UTC_TIME['200321131500Z']>
pubkey_algo:  <ASN1_OID['.1.2.840.113549.1.1.1']>
version:  <ASN1_INTEGER[2L]>
sn:  <ASN1_INTEGER[6348220899422160075L]>
sign_algo:  <ASN1_OID['.1.2.840.113549.1.1.11']>
pubkey:  <ASN1_BIT_STRING['\x000\x']>

我已经挖掘出 scapy.layers.ssl_tls、ssl_tls_crypto、scapy.layers.x509 模块,但无法获得任何解码提示。我也尝试使用 asn1crypto.core 包中的 Asn1Value.load() 但它失败并出现以下错误:

TypeError: encoded_data must be a byte string, not scapy.asn1.asn1.ASN1_UTC_TIME

如果有人能帮助我最好使用 scapy 的 native 解码或任何其他可能的方式解决这个问题,那就太好了。

注意:请注意,我必须从我从 pcap 文件读取的 SSL/TLS serverhello 数据包中提取这些值,因为我还需要数据包 header 中的其他字段。我知道 stackoverflow 或 wireshark/tshark 上存在许多用于从 .pem 文件或可能从 .der 文件中提取/读取证书的解决方案(在明确地从 wireshark 导出之后),它们在我的情况下不起作用,因为我需要一个解决方案围绕从数据包中提取证书或证书字段进行工作。

最佳答案

如果您有 X.509 证书的 DER 编码字节字符串,则使用 asn1crypto 的正确方法是:

from asn1crypto import x509

cert = x509.Certificate.load(der_byte_string)
print(cert.native)

从错误消息看来,您已尝试传递一些表示 ASN.1 值的 Python 对象。

关于python - 解码 Scapy ASN1 编码的 SSL/TLS 证书字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460101/

相关文章:

python - python 的可变长度参数 (*args) 会在函数调用时扩展生成器吗?

python - 隐藏 Python 测验的答案

ssl - 将 SSL 证书更改到其他位置

python - Scapy:eth_boundary 选项返回 IndexError:未找到层 [14]

python - Scapy模块: netif = rt[4 + mtu_present + prio_present + refs_present + locked] IndexError: list index out of range

python - Scapy发送探测请求并接收探测响应

python - 通过比较 Pandas 中的多列来选择数据框

python - 如何防止 moto 测试抛出 NoSuchBucket 错误?

C# SOAP 客户端使用 TLS 而不是 SSL 3.0

java - 我可以用 Java 创建自签名证书,它会自动被 Web 浏览器信任吗?