如何根据本地计算机证书存储中存在的根证书验证 SSL 证书?

问题描述 投票:0回答:1

我以标准用户权限运行我的程序,并且我假设 API

ValidateServerCertificate
使用本地用户证书存储中的根证书来验证 SSL 证书。

C# 的代码示例。

// The following method is invoked by the RemoteCertificateValidationDelegate.
public static bool ValidateServerCertificate(
      object sender,
      X509Certificate certificate,
      X509Chain chain,
      SslPolicyErrors sslPolicyErrors)
{
   if (sslPolicyErrors == SslPolicyErrors.None)
        return true;

    Console.WriteLine("Certificate error: {0}", sslPolicyErrors);

    // Do not allow this client to communicate with unauthenticated servers.
    return false;
}

要求:我需要基于本地计算机证书存储中存在的根证书进行 SSL 证书验证。

我想出了一个逻辑,将提供的根 - SSL 证书的指纹与本地计算机证书存储中存在的指纹进行比较。

X509Store store = new X509Store("Root", StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

X509ChainElement rootElement = chain.ChainElements[chain.ChainElements.Count - 1]; //To get the root of the chain
X509Certificate2 rootCert = rootElement.Certificate;

foreach (X509Certificate2 cert in store.Certificates)
{
    // Compare the thumbprint of each certificate
    if (cert.Thumbprint.Equals(rootCert.GetCertHashString(), StringComparison.OrdinalIgnoreCase))
    {
        // Certificate found
        return true;
    }
}
return false;

但是有更好的方法来执行此操作吗?我正在使用 .NET-FW 版本 4。

c# validation ssl ssl-certificate
1个回答
0
投票

您可以尝试其他方法:

以 .pfx 格式(带密码)导出您的证书(私钥)并将其保存在某个文件夹位置。

要导出证书,您还可以使用 DigiCert Utility,可以从以下链接下载:

var cert_Path = "D:\YourFolderLocation\YourCertificate.pfx";
var cert = new X509Certificate2(cert_Path, "Certificate_Password", X509KeyStorageFlags.MachineKeySet);

现在,用这个尝试你的代码。

© www.soinside.com 2019 - 2024. All rights reserved.