我正在使用androguard从Android .APK文件中提取功能,现在我需要从其签名文件(通常是CERT.RSA)中提取序列号(*)。我找到了asn1crypto,但我不太明白,如何将它与pkcs7一起使用。那么有适合此目的的python包吗?
答案 0 :(得分:2)
评论:我有pkcs7作为内存对象,而不是文件
PyOpenSSL
无法从文件中读取!
OpenSSL.crypto.load_pkcs7_data(type,buffer)
从使用类型类型编码的字符串缓冲区加载pkcs7数据 类型类型必须是FILETYPE_PEM或FILETYPE_ASN1)。
from OpenSSL import crypto
pkcs7 = crypto.load_pkcs7_data(crypto.FILETYPE_ASN1,
open('certs/signature.der', 'rb').read())
certs = get_certificates(pkcs7)
for cert in certs:
print('Subject:{}, Serial Nnumber:{}'.
format(cert.get_subject(), cert.get_serial_number()))
>>>Subject:<X509Name object '/CN=key1'>, Serial Nnumber:13315126025841024674
>>>Subject:<X509Name object '/CN=key2'>, Serial Nnumber:14142490995367396705
问题:用于解析pkcs7的python包?
您可以使用openssl将PKCS#7转换为PEM,使用PrincipalContext.ValidateCredentials Method可读取PEM
openssl pkcs7 -print_certs -in sample.p7b -out sample.cer
阅读相关的SO答案:PyOpenSSL