gpt4 book ai didi

c# - 在 C# 中使用 HttpClient 的客户端证书

转载 作者:太空狗 更新时间:2023-10-30 00:47:41 24 4
gpt4 key购买 nike

想要从 Windows 应用程序向服务器机器发送带有客户端证书(.p12 或 .pfx)的数据,Windows 应用程序在 .Net Framework 4.6 中开发,操作系统是 windows 10。

当使用客户端证书(.p12 或 .pfx)从 postman 点击时 [在设置选项卡中加载 -> 添加客户端证书 -> 输入主机名,选择 pfx 文件,输入密码],一切正常(客户端证书发送到服务器机器), 但从下面的 c# 代码发出,

X509Certificate2 certificate = new X509Certificate2(certificateFilePath, "password");
WebRequestHandler handler = new WebRequestHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateValidationCallback = (a, b, c, d) => { return true; };
handler.ClientCertificates.Add(certificate);


HttpClient request = new HttpClient(handler);
request.DefaultRequestHeaders.Add("User-Agent", UserAgent);
// added other headers and data
var result = request.PostAsync(url, byteContent).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;

同时与 fiddler 交叉检查 Postman hit 和 c# hit。

当服务器没有收到客户端证书时,返回403错误。

最佳答案

HttpStatus 代码 403 可能是由 TLS 问题引起的,因为未使用预期的服务器 TLS 版本调用 API。您可以从代码行 string resultContent = result.Content.ReadAsStringAsync().Result;

检查 resultContent 的结果

要设置 SslProtocol,您可以像这样设置 Handler(如果您的目标是 .Net 4.7 或 .Net 核心)

WebRequestHandler handler = new WebRequestHandler();
handler.SslProtocols = SslProtocols.Tls13 | SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;

或在应用层使用 ServicePointManager 启动方法(或 .Net framework 4.7 之前的版本)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

旁注建议 - 我建议您使用纯异步/等待模式。不要通过调用 .Result 对 IO 请求使用同步调用。

关于c# - 在 C# 中使用 HttpClient 的客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com