我正在尝试发送一个像https://identityserver.github.io/Documentation/docsv2/advanced/clientCerts.html这样的WebRequest请求,并使用包含客户端证书的处理程序。
我已经确定我已经确定ClientCertificate没有通过fiddler发送,所以当调用Owin LoadCertificate时,ServerVariables["CERT_FLAGS"]中没有读取它。
所以我已经删除了除(IdentityServer3.Samples / source / Clients / ClientCertificateConsoleClient / Program.cs)之外的所有步骤
/dev/uinput
但是我仍然没有在原始请求中看到提琴手证书。我查看了HttpWebRequest的源代码,只看到它处理GetConnectionGroupLine中的ClientCertificate,然后是一个我也在fiddler中看不到的哈希码。我正在使用Windows 7,我打开了iis客户端证书映射身份验证,并在2015.vs子文件夹中启用了iis express applicationhost中的设置,并启用了我的docuemnts中的主要设置。我在这里缺少什么?
参考:https://social.msdn.microsoft.com/Forums/en-US/f88a23f2-3dbe-4202-baf2-a5b05b027fe6/httpwebrequest-not-sending-client-certificate-to-server?forum=netfxnetcom https://github.com/IdentityServer/IdentityServer3/issues/3220 - 无法在stackoverflow上找到这个..
答案 0 :(得分:1)
TLDR:你的问题(此时)是Fiddler而不是HttpWebRequest / dotnet。(编辑澄清。)
Fiddler不显示包含证书的TLS信息。 Fiddler处理并以多种格式显示HTTP级数据(请求和响应,包括应用程序数据)。当HTTPS通过SSL / TLS传输此HTTP数据时,Fiddler不会显示特定于SSL / TLS的数据,除了服务器和可选的客户端证书(当前)之外,还包括版本,套件,可能的压缩,曲线,格式和下一个协议协商,随机数,临时密钥,重新协商控制,签名算法控制,服务器名称指示,票证和其他加密选项,如encrypt-then-mac和extended-master-secret。 “原始”选项卡显示所有没有解释的HTTP数据,但不显示SSL / TLS数据。
Fiddler不会请求客户端身份验证。 SSL / TLS会话仅在服务器请求时以及客户端连接到真实IdentityServer时使用客户端证书执行客户端身份验证它可能是要求这个。但是当使用Fiddler时,从客户端到Fiddler有一个SSL / TLS会话,以及从Fiddler到服务器的完全独立的SSL / TLS会话。在从客户端到Fiddler的会话中,Fiddler不会请求客户端身份验证,因此您的客户端不会也不能发送或使用其证书。
无论如何都无法中继客户端身份验证。如果Fiddler确实从您的客户端请求客户端身份验证,则无法使用该信息来验证与真实服务器的会话。客户端身份验证不只是发送客户端证书,它还使用私钥来签署握手消息的串联(称为转录本)。由于您的客户端与Fiddler之间以及Fiddler与服务器之间的握手完全不同,因此该签名对于服务器端握手是无效的,并且发送它将被(正确地)被服务器拒绝为无效。
而不是 Fiddler 可以进行客户端身份验证。如果您想通过Fiddler使用客户端身份验证路由HTTPS流量,则需要配置 Fiddler 在与服务器的会话上进行客户端身份验证;对于固定设置,您可以将识别证书放在Fiddler的配置目录中,对于每个会话设置,您需要编写一些FiddlerScript。私钥(和链)需要位于Windows证书库中,而不是(仅)在文件中。参见:
http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/RespondWithClientCert
https://www.fiddlerbook.com/fiddler/help/httpsclientcerts.asp
Fiddler: Respond to Requests Requiring a Client Certificate(在SO上)
https://security.stackexchange.com/questions/72916/can-fiddler-decrypt-https-traffic-when-using-elliptic-curves-client-cert-authe
如果您的实际问题是让客户端在不使用Fiddler时支持客户端身份验证,则需要将Fiddler从这种情况中解脱出来并使用其他调试工具,例如网络跟踪。