【发布时间】:2013-10-08 04:27:57
【问题描述】:
我有一个特定的应用程序,它需要使用客户端证书来相互验证 HTTPS 请求。服务器具有灵活的证书验证策略,允许它接受服务器证书存储中不存在的自签名客户端证书。众所周知,使用 curl 作为客户端可以正常工作。
我通过测试和数据包嗅探确定的是,Microsoft 的 ASP.NET HttpClient 在 SSL 握手期间试图过于智能。如果此特定客户端与服务器的受信任根之一具有信任链,则该特定客户端将仅使用客户端证书(来自WebRequestHandler.ClientCertificates 集合)。我观察到的是,如果没有具有信任链的证书,那么客户端在握手期间根本不会发送证书。
这是可以理解的默认行为,但过于严格,似乎无法将其关闭。我尝试了各种其他WebRequestHandler 属性,包括AuthenticationLevel 和ClientCertificateOptions,但无济于事。
有没有办法强制HttpClient 在ClientCertificates 集合中可用时发送客户端证书,即使它似乎不会在服务器端验证?我对直接和肮脏(反射黑客)的解决方案持开放态度,因为我真的需要这个客户端来工作。
【问题讨论】:
-
你找到解决办法了吗?
-
对这个问题有什么想法吗?
-
2018 年仍然如此 :(
标签: asp.net-web-api .net-4.5 client-certificates