如何在HTTPWebRequest中检测客户端证书身份验证请求
本文关键字:客户端 证书 身份验证 请求 检测 HTTPWebRequest | 更新日期: 2023-09-27 18:24:35
我正在使用HTTPWebRequest
访问需要客户端证书的页面!
我使用以下代码,一切正常!
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(textBox1.Text);
X509Certificate2 userCert = SelectClientCertificate();
if (userCert != null) myReq.ClientCertificates.Add(userCert);
HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
现在是我的问题,因为我的调用SelectClientCertificate()
显示了一个对话框,让用户选择证书,所以如果服务器不要求客户端身份验证,我不想显示对话框!事实上,我正在寻找Internet Explorer的行为主义。如果访问服务器需要用户客户端身份验证的页面,则会显示证书选择对话框,否则不会!
我看了AuthenticationManager
,但我不确定是否真的需要注册自己的AuthenticationModule!有什么提示吗?
我也检查了403或403.7的StatusCode
,但目前我正在使用的服务器,如果证书丢失,也会返回200,内容是我没有授权!
为什么要检查服务器想要什么?如果请求在https上运行,只需请求证书即可。
如果我记得很清楚的话,服务器对任何人都没有任何义务。在任何真正的HTTP通信发生之前,客户端有责任通过SSL握手开始通信,并且客户端/服务器交换他们的证书。您无法检测服务器是否"要求"您提供证书。如果你试图与它交谈,如果你没有从证书开始,如果服务器想要证书,服务器会断开连接并保持沉默,或者可能会返回一些随机错误代码。
您可以尝试在尝试创建/向服务器发送请求之前尽早检测服务器是否尝试进行握手,但您必须在TCP层的下层进行握手。试着检查描述HTTPS协商的RFC或握手的预置,也许这会对你有所帮助。
或者,只需尝试执行HTTP w/o S请求,如果失败,请重新请求证书,然后使用HTTPS重试。我认为你的用户会挺过来的。