客户端证书授权在 .net 中失败,但在 Postman 中有效

问题描述 投票:0回答:2

我已获得用于验证某个服务器的 pfx 和 pem 客户端证书,任务是使用这些证书中的任何一个发送 POST 请求。需要使用这些证书进行调用的应用程序是.net core webapi。在进行调用之前,我尝试了多种方法在 http 客户端中添加此客户端证书,但每次我都会收到 401 Unauthorized。我也尝试过 RestSharp,但没有成功。但有趣的是,这可以与 Postman 无缝配合。有人可以帮忙吗?下面是我当前根据 Microsoft 文档使用的命名 HttpClient 注册和请求代码。

启动时:

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();
.net ssl-certificate certificate client-certificates
2个回答
0
投票

我们遇到了同样的问题,即。 Postman 或 Python 脚本可以使用客户端证书调用远程 API,而不会出现问题,而我们的 C# 程序则不能。

最终有帮助的是:我们将 .pfx 导入到“中级证书颁发机构”存储中(在将调用 c# 程序的用户下)。之后c#程序也可以正常工作了。


0
投票

我也遇到过同样的问题。通过curl和postman调用可以工作,但在代码中不起作用。
尝试打开

HttpClientHandler
SocketsHttpHandler
:

var handler = new SocketsHttpHandler();
handler.SslOptions = new SslClientAuthenticationOptions
{
    ClientCertificates = new X509CertificateCollection { clientCertificate }
};

尽管

HttpClientHandler
是基于
SocketsHttpHandler
的。 |链接这里
这些处理程序的行为是不同的。

© www.soinside.com 2019 - 2024. All rights reserved.