我需要在.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
属性,该属性将保存客户端的证书。