我已经提供了一个pfx和pem客户端证书,用于验证特定的服务器,任务是发送一个POST请求与这些证书之一。需要使用这些证书进行调用的应用程序是. net核心webapi。在调用之前,我尝试了多种方法在http客户端中添加此客户端证书,但每次都得到401 Unauthorized。我也试过RestSharp,但没有运气。但有趣的是,这与Postman无缝合作。谁能帮帮忙。下面是命名HttpClient注册和我当前根据Microsoft文档使用的请求代码。
启动时:
var clientCertificate = new X509Certificate2(@"C:\Dir\Client.pfx", "Password");
builder.Services.AddHttpClient("namedClient", c =>
{
}).ConfigurePrimaryHttpMessageHandler(() =>
{
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(clientCertificate);
handler.SslProtocols = SslProtocols.Tls12;
handler.AllowAutoRedirect = true;
handler.PreAuthenticate = true;
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
return handler;
});
builder.Services.AddControllers();
...
商业逻辑:
var client = _httpClientFactory.CreateClient("namedClient");
var request = new HttpRequestMessage()
{
RequestUri = new Uri("https://www.test.com/resource1"),
Method = HttpMethod.Post,
};
request.Headers.Host = "www.test.com";
var response = client.SendAsync(request).GetAwaiter().GetResult();
1条答案
按热度按时间h5qlskok1#
我们遇到了同样的问题。Postman或Python脚本可以使用客户端证书调用远程API而不会出现问题,而我们的c#程序则不能。
最后帮助:我们将.pfx导入到“中级证书颁发机构”存储中(在将调用c#程序的用户下)。C#程序也运行良好。