我正在使用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!对我有什么提示吗?我还检查了
StatusCode
是否为403或403.7,但是现在我正在使用的服务器在缺少证书的情况下也会返回200,其中内容说我未经授权! 最佳答案
为什么要检查服务器需要什么?如果请求通过https运行,则只要求提供证书。
如果我没记错的话,服务器没有义务让任何人承担任何责任。客户端有责任通过SSL握手开始通信,并且客户端/服务器在发生任何实际的HTTP通信之前交换其证书。您无法检测服务器是否“要求”您提供证书。如果您尝试与其进行对话,并且如果您不是以证书开头的,并且服务器想要证书,则服务器将断开连接并保持沉默,或者可能会返回一些随机错误代码。
您可以尝试尽早检测服务器是否尝试进行握手,然后再尝试向其创建/发送请求,但是您必须在TCP层的下一层进行处理。尝试检查描述HTTPS协商的RFC或握手的内容,也许会有所帮助。
或者只是尝试执行HTTP w / o S请求,如果失败,请重做以请求证书,然后使用HTTPS重试。我认为您的用户将幸免于难。