客户端证书授权与.net一起失败,但与Postman一起工作

xqk2d5yq  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(118)

我已经提供了一个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();
h5qlskok

h5qlskok1#

我们遇到了同样的问题。Postman或Python脚本可以使用客户端证书调用远程API而不会出现问题,而我们的c#程序则不能。
最后帮助:我们将.pfx导入到“中级证书颁发机构”存储中(在将调用c#程序的用户下)。C#程序也运行良好。

相关问题