在Python中解码传入的电子邮件,我有一个附件"smime.p7s"。
如果我将其写入文件,那么可以使用以下命令提取并查看:
查看OpenSSL API文档,有一个入口点
下面是我正在尝试的代码片段,基于签名代码的天真改编。
它不工作 - 给出
这个函数似乎需要三个参数,不过也许“flags”是可选的? 这行代码(来自旧版的M2Crypto库)也表明入口点需要三个参数。
我不明白为什么在我们试图提取证书时需要一个“certs.stack”作为输入参数,而且我不知道在“flags”中要放什么。
我相当确定我需要一些特殊类型的缓冲区声明来设置调用,并检索结果(就像1中的
另外——
openssl pkcs7 -inform der -print_certs <smime.p7s
我想在Python中执行这个操作。这里有一个示例,展示了相反的过程,即如何签署一封邮件。查看OpenSSL API文档,有一个入口点
PKCS7_get0_signers
,似乎可以实现此功能。下面是我正在尝试的代码片段,基于签名代码的天真改编。
with open(fname, 'wb') as p7sfile:
p7sfile.write(sig)
pkcs7 = crypto._lib.PKCS7_get0_signers(sig, None, 0)
它不工作 - 给出
pkcs7 = crypto._lib.PKCS7_get0_signers(sig, None, 0)
TypeError: initializer for ctype 'PKCS7 *' must be a cdata pointer, not bytes
这个函数似乎需要三个参数,不过也许“flags”是可选的? 这行代码(来自旧版的M2Crypto库)也表明入口点需要三个参数。
我不明白为什么在我们试图提取证书时需要一个“certs.stack”作为输入参数,而且我不知道在“flags”中要放什么。
我相当确定我需要一些特殊类型的缓冲区声明来设置调用,并检索结果(就像1中的
bio_in = crypto._new_mem_buf(data)
引言一样)。有人能否建议如何做到这一点?另外——
M2Crypto
库与Python 3.x不兼容,因此正在寻找替代方案。
M2Crypto
库,不兼容 Python 3.x。我发现了下面使用 PyOpenSSL 库的代码片段,我会将其作为自答提出。 - tuck1s