我在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不支持此功能。
如何忽略其他平台上的错误?
答案 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;
}