如何将可信CA证书(不是客户端证书)添加到HttpWebRequest?

dan*_*n04 8 .net certificate httpwebrequest

我编写了一个HttpWebRequest用于连接HTTPS站点的C#程序.该GetResponse()方法抛出异常:

SystemError:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系.

我可以使用连接到同一个网站curl.exe --cacert CAFile.pem.我希望能够使用C#程序中相同的可信CA证书.

如何HttpWebRequest使用此CA证书文件(或X509CertificateCollection包含从中解析的证书)?

Jam*_*See 5

尝试设置ServerCertificateValidationCallback以使用它:

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
    return true;

    X509Chain privateChain = new X509Chain();
    privateChain.ChainPolicy.RevocationMode = X509RevocationMode.Offline;

    X509Certificate2 cert2 = new X509Certificate2(certificate);
    X509Certificate2 signerCert2 = new X509Certificate2(@"C:\MyCACert.PEM");

    privateChain.ChainPolicy.ExtraStore.Add(signerCert2);       
    privateChain.Build(cert2);

    bool isValid = true;

    foreach (X509ChainStatus chainStatus in privateChain.ChainStatus)
    {
        if (chainStatus.Status != X509ChainStatusFlags.NoError)
        {
            isValid = false;
            break;
        }
    }

    return isValid;
}
Run Code Online (Sandbox Code Playgroud)

我没有机会测试这个,所以如果你遇到任何错误请告诉我,如果需要我会修改答案.