我需要验证一个证书(X509Certificate2),就像在它用于通信之前验证它一样。
在这种情况下,X509Certificate2.Verify()将返回true,而证书未颁发给安装它的服务器。
是否有任何完成的代码块来完成X509证书的完整验证?
问候
编辑:这是我尝试过的代码:
var certificate = GetServerCertificate(CertificateStore,CertificateLocation,Thumbprint);
if(certificate != null)
{
if(certificate.Verify())
_logger.Log(NLog.LogLevel.Info, $"Yes");
else
_logger.Log(NLog.LogLevel.Info, $"No");
}
1条答案
按热度按时间jm2pwxwz1#
在这种情况下,X509Certificate2.Verify()将返回true,而证书未颁发给安装它的服务器。
Verify
方法不检查任何关于主机名的内容。验证了它正好等于
是否有任何完成的代码块来完成X509证书的完整验证?
如果“完全验证”只是指
Verify
所做的所有事情,那么是的。如果您还关心它是否可以用作TLS客户端证书(或TLS服务器证书),那么您可以使用较长的形式(直接使用X509 Chain),并在调用chain之前添加应用程序策略要求。hostname比较难。客户端证书没有可验证的名称,这取决于服务器如何使用它。服务器证书具有与SAN/Subject-CN匹配的主机名,但是除了使用TLS(
SslStream
)连接之外,没有任何内置的检查。更新(2023-09-08):从.NET 7开始,可以通过MatchesHostname方法在X509 Certificate 2示例上验证主机名。