如何在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
相关产品推荐
相关产品推荐

