我正在使用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,内容说我没有被授权!
答案 0 :(得分:0)
为什么要检查服务器需要什么?请求通过https运行,只需要证书。
如果我记得很清楚,服务器对任何人都没有义务。客户有责任开始与SSL握手进行通信,并且客户端/服务器在发生任何真正的HTTP通信之前交换其证书。您无法检测服务器是否“要求”您提供证书。如果您尝试与它通信,并且如果您没有使用证书并且服务器需要证书,则服务器将断开连接并保持静默,或者它可能会返回一些随机错误代码。
您可以尝试在尝试创建/发送请求之前尽早检测服务器是否尝试进行握手,但您必须在TCP层下面执行此操作。尝试检查描述HTTPS协商的RFC或可以解决的握手,这可能会对你有所帮助。
或者只是尝试执行HTTP w / o S请求,如果失败,请重新申请证书并使用HTTPS重试。我认为您的用户将幸免于难。