4

我正在使用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!所以对我有什么暗示吗?

我还检查了StatusCode403 或 403.7 但我现在正在使用的服务器,如果缺少证书,也会返回 200,内容说我没有被授权!

4

1 回答 1

0

为什么要检查服务器想要什么?如果请求通过 https 运行,只需请求证书。

如果我没记错的话,服务器对任何人都没有义务。客户端有责任通过 SSL 握手开始通信,并且客户端/服务器在任何真正的 HTTP 通信发生之前交换他们的证书。您无法检测服务器是否“要求”您提供证书。如果您尝试与它交谈,并且如果您不以证书开头并且服务器想要证书,则服务器将断开连接并保持沉默,或者它可能会返回一些随机错误代码。

您可以尝试在尝试创建/向其发送请求之前及早检测服务器是否尝试进行握手,但您必须在 TCP 层的下一层进行。尝试检查描述 HTTPS 协商或握手的可预见性的 RFC,也许这会对您有所帮助。

或者只是尝试做一个不带 S 的 HTTP 请求,如果它失败,重做请求证书并使用 HTTPS 重试。我认为您的用户会幸存下来。

于 2012-04-26T22:01:39.853 回答