繁体   English   中英

如何在HTTPWebRequest中检测客户端证书身份验证请求?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM