我在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下不支持此功能.
如何忽略其他平台上的错误?
您可以使用.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; }