【发布时间】:2020-02-03 20:09:33
【问题描述】:
想要将带有客户端证书(.p12 或 .pfx)的数据从 Windows 应用程序发送到服务器机器,Windows 应用程序是在 .Net Framework 4.6 中开发的,操作系统是 windows 10。
当邮递员使用客户端证书(.p12 或 .pfx)[加载到设置选项卡 -> 添加客户端证书 -> 输入主机名,选择 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错误。
【问题讨论】:
-
错误是什么?
-
错误类似于 403 Forbidden
-
您的服务器知道客户端证书吗?它需要证书来最终验证它。 @Kahbazi,根据文档,WebRequestHandler 是 HttpClientHandler。
-
@SomnathKadam - 由于 TLS 协议,您可能会收到此错误代码。如果您的服务器应用程序配置了一个固定的 TLS 版本,而您的客户端没有,那么您应该使用提供的 TLS 版本(或所有类似
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;)发送请求。另外,您能否发布结果内容,它应该有错误详细信息。 -
这种失败有很多可能的原因,其中一些相当模糊。我建议打开trace,这将允许您查看握手过程的每个步骤并准确确定出了什么问题。
标签: c# dotnet-httpclient client-certificates x509certificate2