c# - 比较 bouncycaSTLe x509 与 x509certificate2

标签 c# .net ssl certificate x509

我的用例: 我收到来自各个交易对手的电子邮件,它们总是签名的。在我们开始沟通之前我已经收到了他们的证书,因此我有正确的证书。

我需要用他们在向我发送签名电子邮件时使用的证书来验证他们最初发送给我的证书。

我浏览了 stackoverflow 和其他论坛,他们似乎都建议指纹或“GetEncoded”(与 DEREncoded 相同?!)

但是我没能找到任何声明这是正确的“官方来源”。

所以我需要的是一些官方来源,说明 X509Certificate2.GetRawCertData 或 Org.BouncyCaSTLe.X509.X509Certificate 是唯一的,因此可以进行比较以检查正确的证书。

我所说的官方资源是指书籍、标准、Microsoft 网站等。

这是我使用 System.Security.Cryptography.X509Certificates.X509Certificate2 验证 Org.BouncyCaSTLe.X509.X509Certificate 的代码:

Org.BouncyCastle.X509.X509Certificate signerCertificate = ((SecureMimeDigitalCertificate)signature.SignerCertificate).Certificate;
System.Security.Cryptography.X509Certificates.X509Certificate2 localCertificate = new X509Certificate2(@"xxx.crt");
bool areEqual =
    StructuralComparisons.StructuralEqualityComparer.Equals(signerCertificate.GetEncoded(),
                                                            localCertificate.GetRawCertData());

你能帮我找到这样的资源或给我指明正确的方向吗?

最佳答案

比较证书的具体用例是什么?

接收签名电子邮件时的正常用例是您想要验证签名以确保邮件是真实的。这不是通过将收到的证书与您存储的证书进行比较来完成的。 您应该做的是验证数字签名,验证它们链接到受信任的(由您)根的证书。 如果您事先有发件人证书,您当然可以认为这是可信的,只需使用您存储的证书来验证收到的消息的签名。 在这种情况下,您可以忽略签名电子邮件中的证书。

您所做的就是通过使用您信任的公钥(在证书中)验证数字签名来验证用于签署消息的私钥实际上属于您认为它属于的人。

关于c# - 比较 bouncycaSTLe x509 与 x509certificate2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23929708/

相关文章:

c# - 从给定路径加载图标以显示在 WPF 窗口中

.net - 如何模拟强制关闭的 TCP 连接?

c# - 如何使用 MailKit 删除 Gmail 中的邮件(不移至垃圾箱文件夹)

c# - 显示 DataTable 的值

c# - 手动加载依赖程序集

google-app-engine - Appengine 谷歌云自定义域。无法包含证书,无法删除域。为什么?

node.js - Socket.io + SSL + 自签名 CA 证书在连接时出错

java - SSLContext.getInstance 中使用的协议(protocol)是什么

javascript - 如何在asp.net mvc中直接打印

c# - 无法将 StringElement.Visible 绑定(bind)到 ViewModel 中的 bool 属性