浏览器不应用客户端证书:403.7

时间:2014-04-01 13:04:05

标签: ssl ssl-certificate authentication

我正在尝试设置客户端证书身份验证。我能够生成CA,服务器和客户端证书。只要我使用Fiddler,一切都按预期工作。但是,一旦我开始使用浏览器,它就不再起作用了(HTTP错误403.7 - 禁止)。

当然,我在个人存储中导入了客户端证书,并确保启用了客户端证书协商。

我也尝试了openssl s_client -connect 127.0.0.1:443 -state -debug但我无法理解结果......唯一奇怪的是我的CA没有显示在Acceptable client certificate CA names部分。

我还能尝试其他什么?

更新 我认为没关系,但我的服务器证书设置为127.0.0.1。因此我在浏览器中使用https://127.0.0.1/...

UPDATE2: 使用Wireshark我注意到服务器的响应取决于客户端:

Fiddler(好):

Client Hello 
Server Hello, Certificate, Server Hello Done

浏览器(不行):

Client Hello
Server Hello, Change Cipher Spec, Encrypted Handshake Message

UPDATE3: 启用clientcertnegotiation后,服务器响应不同但仍无效:

Server Hello, Certificate
Certificate Request
Certificate, Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

我的自签名CA似乎不在“专有名称”列表中......

UPDATE4: SSL设置:选中Require SSL,将客户端证书设置为Required。客户端证书显示在“个人”中,预期目的是“客户端身份验证”。

3 个答案:

答案 0 :(得分:2)

我终于找到了问题和解决方法:

如Update3中所述,Distinguished Names不包含我的CA.这是因为Distinguished Names的限制为2 ^ 14字节(16384字节)。因为我的机器上安装了很多CA,我的CA根本没有安装.TLS标准允许发送多条消息,但遗憾的是Windows不支持这种消息!

正如前面提到的here,你有几种可能性。最简单的是:

在您的服务器上,在DWORD下的注册表中添加名为QWORD的{​​{1}}(不是SendTrustedIssuerList!)值,并将其设置为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL。这将阻止您的服务器发送列表,让客户端从任何已安装的客户端证书中进行选择。

不幸的是,我在事件查看器中看不到任何痕迹(如其他地方所述)。因此,问题不容易发现(我必须使用Wireshark来检查0)。

答案 1 :(得分:0)

应使用私钥(通常为p12或pfx文件)在 CurrentUser \ My 存储中导入

客户端证书 CA证书应位于 LocalMachine \ Root 存储中,以便IIS信任CA颁发的所有证书,并且CA对计算机上的每个用户都是可信任的。

CA颁发的CRL 可通过网址(在CA发布的每个最终实体证书中指定)或在 LocalMachine \ My 商店。

注意:openssl不使用Windows证书存储区,因此openssl s_client -connect 127.0.0.1:443 -state

上没有效果

答案 2 :(得分:0)

使用“接受”选项代替"客户端证书"的“需要”选项;特征。

  1. 在IIS管理器中,找到要为其更改SSL设置的Web应用程序。

  2. 在“功能视图”中,双击“SSL设置”。

  3. 在SSL设置页面上,选择客户端证书下的接受选项。

  4. 在“操作”窗格中,单击“应用”。

  5. More info here