[英]How to detect Client Certificate Authentication request in HTTPWebRequest?
我正在使用HTTPWebRequest
访问需要客户端证书的页面!
我使用以下代码,一切正常!
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(textBox1.Text);
X509Certificate2 userCert = SelectClientCertificate();
if (userCert != null) myReq.ClientCertificates.Add(userCert);
HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
现在这是我的问题,因为我的调用SelectClientCertificate()
显示一个Dialog让用户选择一个证书,如果服务器没有要求客户端身份验证,我不想显示对话框! 其实我在寻找Internet Explorer的行为主义。 如果访问服务器需要用户客户端身份验证的页面,则会显示“证书选择”对话框,否则不会显示!
我查看了AuthenticationManager
但我不确定是否真的需要注册我自己的AuthenticationModule! 所以对我有任何暗示吗?
我还检查了StatusCode
的403或403.7,但我现在正在使用的服务器,如果缺少证书,也会返回200,内容说我没有被授权!
为什么要检查服务器需要什么? 请求通过https运行,只需要证书。
如果我记得很清楚,服务器没有义务任何人。 客户有责任开始与SSL握手进行通信,并且客户端/服务器在发生任何真正的HTTP通信之前交换其证书。 您无法检测服务器是否“要求”您提供证书。 如果您尝试与它通信,并且如果您不使用证书并且服务器需要证书,则服务器将断开连接并保持静默,或者它可能会返回一些随机错误代码。
在尝试创建/发送请求之前,您可以尝试提前检测服务器是否尝试进行握手,但是您必须在TCP层下面执行下面的层。 尝试检查描述HTTPS协商或可以解决握手的RFC,这可能对您有所帮助。
或者只是尝试执行HTTP w / o S请求,如果失败,请重做并请求证书并使用HTTPS重试。 我认为您的用户将幸存下来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.