首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查电子邮件是否使用VB.Net进行了数字签名

检查电子邮件是否使用VB.Net进行了数字签名
EN

Stack Overflow用户
提问于 2018-11-01 06:07:29
回答 2查看 547关注 0票数 1

我想知道是否可以使用VB.Net检查电子邮件是否经过数字签名,以及谁是证书的颁发者。

使用扩展的MAPI包装器和加密技术,我能够从电子邮件中获得smime.p7m附件,并从中获得证书信息(包括颁发者),所以看起来一切都正常。问题是,如果我发送了一封未签名的电子邮件,并手动附加了一个smime.p7m文件,它将欺骗代码,使其认为该电子邮件已签名。

有人有解决这个问题的办法吗?我也可以使用其他方法,如Outlook Interop。

EN

回答 2

Stack Overflow用户

发布于 2018-11-01 07:30:52

Outlook对象模型始终尝试将签名和加密的邮件表示为常规MailItem对象。MessageClass属性将返回"IPM.Note"“。它甚至可以从MailItem.MAPIOBJECT属性返回一个伪IMessage对象。

如果您使用的是扩展的MAPI,您可以读取PR_MESSAGE_CLASS属性并检查它的值是否对应于一个签名/加密的消息类(例如"IPM.Note.SMIME.MultipartSigned")。如果要从MailItem.MAPIOBJECT属性中检索IMessage对象,请确保将其解包。

您还可以使用Redemption和它的RDOEncryptedMessage对象-它允许使用RDOEncryptedMessage.GetDecryptedMessage消息解密加密消息以及访问证书属性。

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 03:17:33

如果您有一个真正签名的S/MIME邮件,那么"smime.p7m“附件将有一个Content-Typeapplication/pkcs7-mime; smime-type=signed-data -或者-它将有一个Content-Typeapplication/pkcs7-signature,并且将是multipart/signed容器的第二个子MIME部分。

要可视化,请执行以下操作:

选项1:

代码语言:javascript
运行
复制
Content-Type: application/pkcs7-mime; smime-type="signed-data"; name="smime.p7m"
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64

选项2:

代码语言:javascript
运行
复制
Content-Type: multipart/signed; boundary="some-bounary-string"; protocol="application/pkcs7-signature"

--some-boundary-string
Content-Type: text/plain

This is the message content that was signed...

--some-boundary-string
Content-Type: application/pkcs7-signature; name="smime.p7m"
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64

...
--some-boundary-string--

我不熟悉Exchange MAPI wrapper API,但应该有一种方法来获取Content-Type值。根据这是什么,您可以检查我上面提到的其他属性,以验证它实际上是一封签名邮件还是仅仅是一个附件。

注意:它们也可以是application/x-pkcs7-mimeapplication/x-pkcs7-signature,但除了MIME子类型的前导x-之外,逻辑是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53092614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档