尝试使用 Openssl 解密 S/MIME 文件
Posted
技术标签:
【中文标题】尝试使用 Openssl 解密 S/MIME 文件【英文标题】:Trying to decrypt S/MIME file using Openssl 【发布时间】:2015-04-15 15:02:40 【问题描述】:我是 openssl 新手。 我正在尝试编写一个python脚本(调用openssl)来解密多个p12加密的eml文件但失败了。
我可以在 Thunderbird 中打开它们。
这是我尝试过的:
openssl pkcs12 -in keys/pkitepki.p12 -clcerts -nokeys -out file.crt.pem
openssl pkcs12 -in keys/pkitepki.p12 -nocerts -out file.key.pem
openssl smime -decrypt -in smime.p7m -recip file.crt.pem -inkey file.key.pem
我得到的错误是:
Error reading S/MIME message
139955665413864:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:asn_mime.c:451
我的步骤有什么问题?
【问题讨论】:
【参考方案1】:输入不应是 smime.p7m。它应该是其中包含 smime.p7m 的电子邮件。应该有电子邮件标头和 base64 编码的内容。
【讨论】:
【参考方案2】:使用 cms 代替 smime:
openssl cms -decrypt -in smime.p7m -recip file.crt.pem -inkey file.key.pem
【讨论】:
【参考方案3】:就我而言,我从 Gmail 中获得的加密 .p7m 文件附件是 DER 格式,而不是 OpenSSL default(默认为 SMIME 格式)。因此,只需将 -inform DER
添加到您的 OpenSSL 命令中,看看它是否有效。
这是我原来的 OpenSSL 命令:
openssl smime -decrypt -in "smime.p7m" -inkey "georgie_smime.key.pem"
输出了这个错误Error reading S/MIME message 2147483656:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:crypto/asn1/asn_mime.c:391:
所以只需添加-inform DER
openssl smime -decrypt -in "smime.p7m" -inform DER -inkey "georgie_smime.key.pem"
它成功了!
另外,如果该信息对任何人有用,我会使用 BouncyCastle 在 Java 中发送实际的 SMIME 加密电子邮件
【讨论】:
以上是关于尝试使用 Openssl 解密 S/MIME 文件的主要内容,如果未能解决你的问题,请参考以下文章