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

如何在Python中读取ASN.1(DER)文件并获取证书序列号

解决Python读取ASN.1(DER)格式文件的UnicodeDecodeError问题

嘿,这个问题我碰到过好多次了——你踩了一个很常见的坑:DER格式的证书是二进制文件,不是普通的文本文件,用默认的文本模式打开文件时,Python会自动尝试用UTF-8解码字节数据,这就导致了那个UnicodeDecodeError。

要解决这个问题,只需要把文件打开模式改成二进制读取模式rb就行,直接读取原始字节数据,不需要任何解码操作。修正后的代码如下:

import OpenSSL.crypto

# 用二进制模式打开文件,避免文本解码错误
with open('/Users/me/MyApp/Payload/codesign0', 'rb') as f:
    der_data = f.read()

# 加载证书并获取序列号
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, der_data)
serial_number = cert.get_serial_number()

# 如果需要十六进制格式的序列号(证书里通常这么显示)
hex_serial = hex(serial_number)
print("十进制序列号:", serial_number)
print("十六进制序列号:", hex_serial)

补充几个小提示:

  • 用with语句打开文件是最佳实践,它会在代码块结束后自动关闭文件,避免资源泄漏
  • 证书序列号默认返回的是十进制整数,如果需要和证书查看工具里的十六进制格式对应,记得用hex()转换一下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:36