C# 用C中的公钥验证CA证书#
我有以下情况: 我从CA收到一个证书,我还拥有CA的公钥,我想用它来验证证书的有效性 现在我们使用第三方库SecureBlackBox,但我们希望在项目中消除商业依赖性。SBB的工作原理如下:C# 用C中的公钥验证CA证书#,c#,.net,x509certificate,C#,.net,X509certificate,我有以下情况: 我从CA收到一个证书,我还拥有CA的公钥,我想用它来验证证书的有效性 现在我们使用第三方库SecureBlackBox,但我们希望在项目中消除商业依赖性。SBB的工作原理如下: cert.ValidateWithCA(CACertificate); 有没有办法通过提供的X509Certificate2.NET类实现这一点? 我找到了不带参数的Verify()方法,但我不确定它的作用 谢谢如果不知道更多关于ValidateWithCA的功能,很难明确告诉您Verify是否是一个完
cert.ValidateWithCA(CACertificate);
有没有办法通过提供的X509Certificate2.NET类实现这一点?
我找到了不带参数的Verify()方法,但我不确定它的作用
谢谢如果不知道更多关于
ValidateWithCA
的功能,很难明确告诉您Verify
是否是一个完美的替代品Verify
最终调用值为1的本机函数。验证不仅仅是验证一个证书是否由另一个证书签名,它还检查链中任何证书的撤销等其他事项
我建议您创建一系列测试来验证Verify
与ValidateWithCA
相比是否有效
更新:
阅读了ValidateWithCA
的文档后,它被记录为
验证由证书颁发机构签名的证书
这并不像验证
那样彻底。这取决于你决定,如果验证级别是你想要的。如果不一定是您想要的,您可以设置回调并提供自定义验证(如果您不需要相同级别的验证)。如果您不知道它的作用,请阅读“使用基本验证策略执行X.509链验证”和“抛出System.Security.Cryptography.CryptographyException”@Stijn认为文档是学习它的一个笑话。正如我在问题中所说的,我想使用CA证书的公钥来验证证书。但是Verify()不接受任何参数,所以我不知道如何做。我在OpenSSL X509_verify(X509*X509,EVP_PKEY*PKEY)中找到了一种方法,但是这在.net类中是可能的吗?这就是“链”的来源。对每个证书进行签名,通过验证“链”,它验证“链”(包括CA证书)中每个证书的签名。这意味着,如果CA的证书“无效”(过期等),则您的证书不再有效。通过提供ServerCertificateValidationCallback回调,您可以检测这些其他验证失败并忽略它们(例如,忽略CA证书可能已过期的事实)——如果您只想知道它是否正确签名。