使用.Net HttpClient绕过证书

时间:2019-05-19 01:47:11

标签: c# .net

我正在尝试将REST消息发布到存在证书问题的网站。在我们的IT人员解决该问题之前,我需要在执行 PostAsync个电话。

由于某些原因,ServerCertificateCustomValidationCallback不再是HttpClientHandler的一部分。还有另一种解决方法 这样可以避免权限错误?谢谢。

这是我在做什么的一个例子。

string json = JsonConvert.SerializeObject(new
            {
                Message = new
                {
                    TestID = "1",
                }
            });


var spHandler = new HttpClientHandler()
{
    ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
    {
        return true;
    }
};

System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(spHandler,true);
client.BaseAddress = new System.Uri("https://test.com");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage msg = client.PostAsync(@"/Test", content).Result;

编辑:(修复了'/'分隔符问题)

来自

 client.BaseAddress = new System.Uri("https://test.com");
 HttpResponseMessage msg = client.PostAsync(@"/Test", content).Result;

收件人

 client.BaseAddress = new System.Uri("https://test.com/");
 HttpResponseMessage msg = client.PostAsync("Test", content).Result;

2 个答案:

答案 0 :(得分:0)

我实际上找到了问题,并编辑了上面的问题。原来,您不能在uri PostAsync查询中使用前导“ /”。这是造成问题的原因。处理程序实际上很好。

答案 1 :(得分:-1)

通过以下步骤,我成功绕过了证书验证:

  1. 获取证书
    X509Certificate2 clientCert = GetClientCertificate();

  2. 创建请求处理程序并通过证书

    WebRequestHandler requestHandler = new WebRequestHandler();             requestHandler.ClientCertificates.Add(clientCert);

  3. 调用处理程序

    System.Net.ServicePointManager.ServerCertificateValidationCallback + =                 委托{return true; };

  4. 创建传递处理程序的HttpClient对象并调用服务。

    HttpClient客户端=新的HttpClient(requestHandler)

我希望这对您有用。