5

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

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

是否有使用提供的证书集合来解密和验证签名的标准方法?我在系统存储中有几个证书,如果客户端 A 签名的消息来自客户端 B,则它们应该被拒绝。

4

1 回答 1

0

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

检查此链接: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;

更新

如果要检查 a 的发送者,SignedCms可以使用Certificates属性,它将保存客户端的证书。

于 2012-12-05T17:03:16.823 回答