如何忽略" System.Net.Http.CurlException:对等证书无法使用给定的CA证书进行身份验证"在非Windows平台上?

时间:2017-04-06 13:15:36

标签: https .net-core

我在Microsoft Azure中部署了一个Kubernetes集群,并希望使用https从.Net Core c#程序调用一些REST API。部署群集时使用的证书不在受信任的CA中。当我在Mac上运行此程序时,我收到以下错误:" System.Net.Http.CurlException:对等证书无法使用给定的CA证书进行身份验证"

在Windows上,我可以设置自定义ServerCertificateValidationCallback以忽略错误:

    WinHttpHandler winHttpHandler = new WinHttpHandler();
    winHttpHandler.ServerCertificateValidationCallback = ValidateServerCertificate;

public static bool ValidateServerCertificate(
    HttpRequestMessage request,
    X509Certificate certificate,
    X509Chain chain,
    SslPolicyErrors sslPolicyErrors)
{
    return true;
}

但是,非Windows平台上的.Net Core不支持此功能。

如何忽略其他平台上的错误?

1 个答案:

答案 0 :(得分:3)

您可以使用.NET Core执行此操作。我们一直在使用1.1,2.0和2.1。

这可以通过构造HttpHandler并将其传递到HttpClient构造函数来完成。 HttpHandler有一个ServerCertificateCustomValidationCallback,您可以覆盖它以执行自定义证书验证。

样品:

private HttpClient SampleBuildHttpClient()
{
    return new HttpClient(
        new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = MyCallback,
        }); 
}

private bool MyCallback(HttpRequestMessage reqMsg, X509Certificate2 cert, X509Chain certChain, SslPolicyErrors policyErrors)
{
    //custom validation
    return true;
}