我使用https连接到https服务器 具体来说,我使用apache httpclient,并配置ssl上下文以使用我的密钥库和信任库 我使用的https服务器是IIS7,并配置为要求客户端身份验证 我想我已经正确设置了它 无论如何,如果我使用对IIS有效的密钥库(即使用客户端证书)配置httpClent的ssl上下文,则连接没有问题。
现在我的问题如下:
如果我不配置ssl上下文以及要发送到IIS的任何客户端证书,则与服务器没有任何关联。是什么让我想到的是,我希望在代码中看到一些由于hanshake故障警告而导致的异常。
通过wireshark监控正在发生的事情,我看不到从IIS到我的应用程序的证书请求,但我注意到在ServerHelloDone之后所有内容都被加密了。
我没想到的是。我认为握手通常是明文的
我使用私钥来解密跟踪,我看到了IIS的证书请求,但是在多次启动和打开新连接之后
我的应用程序作为响应发送回长度为0的证书,IIS回复TLSv1 已完成。
之后,数据包停止(即通信结束)
我期待握手警报。
我的问题是,这是它应该如何工作或至少IIS如何工作?
或者,如果我没有看到警报,我的用例有问题?
由于
答案 0 :(得分:1)
听起来IIS只需要某些URL的客户端证书(例如,例如http://www.foo,但不是example.com/bar)。
在初始握手中,它不知道您要求的URL,因此它不需要证书。当它发现您正在请求受限资源(/ foo)时,它会重新发送,需要证书。
但是,我仍然希望发生handshake_failure。
答案 1 :(得分:0)
无法提供证书以响应CertificateRequest不是SSL协议错误,因此没有handshake_error。 SSL库会添加“需要”而不仅仅是“需要”客户端证书,如果您不发送一个就可以执行的只是关闭连接。
答案 2 :(得分:0)
正如我在an answer to this question中所说,据我所知,IIS使用重新协商来获取客户端证书。您应该能够使用netsh
和clientcertnegotiate=enable
更改此行为(取决于您使用的IIS版本)。
您可能也对此similar question感兴趣。