如何在 .NET 中解密和检查签名时忽略系统存储



我需要在.NET应用程序中解密消息并验证签名。

我尝试使用EnvelopedCms.Decrypt(X509Certificate2Collection)和SignedCms.CheckSignature(X509Certificate2Collection,bool)。这些方法效果很好,但是它们将证书集合视为附加证书;他们也始终使用系统存储中的证书。

是否有仅使用提供的证书集合来解密和验证签名的标准方法?我在系统存储中有多个证书,如果客户端 A 签名的邮件来自客户端 B,则应拒绝这些证书。

您可能需要定义自定义验证方法:

检查此链接: http://8r13n.wordpress.com/2007/07/24/bypassing-certificate-validation-in-net/

虚拟实现将是这样的:

public static bool TrustAllCertificatesCallback(
        object sender, X509Certificate cert,
        X509Chain chain, SslPolicyErrors errors)
{
    return true;
}

然后您将设置ServerCertificateValidationCallback的值:

// Call this at the start of your app
ServicePointManager.ServerCertificateValidationCallback =
            TrustAllCertificatesCallback;

更新

如果要检查SignedCms的发件人,可以使用 Certificates 属性,该属性将保存客户端的证书。

相关内容

  • 没有找到相关文章

最新更新