Ssl 浏览器没有';t应用客户端证书:403.7
我正在尝试设置客户端证书身份验证。我能够生成CA、服务器和客户端证书。只要我使用Fiddler,一切正常。然而,一旦我开始使用浏览器,它就不再工作了(HTTP错误403.7-禁止) 当然,我在个人存储中导入了客户端证书,并确保启用了客户端证书协商 我还尝试了Ssl 浏览器没有';t应用客户端证书:403.7,ssl,ssl-certificate,authentication,Ssl,Ssl Certificate,Authentication,我正在尝试设置客户端证书身份验证。我能够生成CA、服务器和客户端证书。只要我使用Fiddler,一切正常。然而,一旦我开始使用浏览器,它就不再工作了(HTTP错误403.7-禁止) 当然,我在个人存储中导入了客户端证书,并确保启用了客户端证书协商 我还尝试了openssl s_客户端-connect127.0.0.1:443-state-debug,但我无法真正理解结果。。。唯一奇怪的是,我的CA没有出现在可接受的客户端证书CA名称部分 还有什么我可以试试的吗 更新: 我认为这无关紧要,但我的服
openssl s_客户端-connect127.0.0.1:443-state-debug
,但我无法真正理解结果。。。唯一奇怪的是,我的CA没有出现在可接受的客户端证书CA名称
部分
还有什么我可以试试的吗
更新:
我认为这无关紧要,但我的服务器证书设置为127.0.0.1。因此,我使用https://127.0.0.1/...
在我的浏览器中
更新2:
使用Wireshark,我注意到服务器的响应取决于客户端:
小提琴手(OK):
浏览器(不正常):
更新3:
启用clientcertnegotiation
后,服务器响应不同,但仍然不起作用:
Server Hello, Certificate
Certificate Request
Certificate, Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
我的自签名CA似乎不在可分辨名称列表中
更新4:
SSL设置:选中
需要SSL
,并将客户端证书设置为需要
。客户端证书以个人身份显示,其目的是进行客户端身份验证。客户端证书应使用私钥(即通常为p12或pfx文件)导入到CurrentUser\My存储中。
CA证书应位于LocalMachine\Root存储中,以便IIS信任CA颁发的所有证书,并且计算机上的每个用户都信任CA
CA发布的CRL应通过URL(在CA发布的每个终端实体证书中指定)提供,或导入到LocalMachine\My存储中
注意:openssl不使用windows证书存储,因此这对
openssl s_客户端-connect 127.0.0.1:443-state
没有影响。我终于找到了问题和解决方法:
正如Update3中提到的,可分辨名称
不包含我的CA。这是因为可分辨名称
的限制为2^14字节(16384字节)。因为我的机器上安装了很多CA,所以我的CA根本就没有安装进去。TLS标准允许发送多条消息,但不幸的是Windows不支持
如前所述,您有一些可能性。最简单的是:
在服务器上,在注册表的HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
下添加一个名为SendTrustedIssuerList
的DWORD
(不是QWORD
)值,并将其设置为0
。这将阻止服务器发送列表,让客户端从任何已安装的客户端证书中进行选择
不幸的是,我在事件查看器中看不到任何痕迹(如其他地方所报告的)。因此,问题不容易发现(我必须使用Wireshark来检查可分辨名称)。使用Accept选项,而不是“客户端证书”功能的Require选项
我想我已经这样做了:我可以在当前用户个人证书中看到我的客户端证书,在本地计算机个人证书中看到我的服务器证书,在本地计算机可信根证书颁发机构证书中看到我的CA。。。对于服务器和客户端证书,我使用了pfx文件。CRL呢?有吗?IIS通过检查吊销信息来验证客户端证书。我启用/禁用了“验证客户端证书吊销”。在这两种情况下都不起作用…尝试IE中的网络捕获,然后查看请求的去向。也许Fiddler中的某些东西仍在配置中,而您的请求并没有直接发送到IIS。这很奇怪。我唯一想尝试的是将它带到不同的计算机/VM。这样,我们可以检查您的计算机是否有问题,或者颁发的证书中是否有错误。我希望只有一条路径是错误的:)更新2中的“浏览器”是会话恢复;此浏览器在wireshark捕获之前已连接到此服务器。重新启动浏览器以获得完全握手。更新3在CertRequest之后应该有ServerHelloDone,您是否忽略了它?您说openssl s_客户端没有在“可接受的客户端CA”中显示您的CA;那是显示了其他CA还是没有CA?如果服务器指定一个空的首选项列表,则客户端(例如浏览器)可以并且应该使用它想要的任何密钥/证书。。。。。。如果服务器提供的首选项列表不包括您的CA,浏览器通常不会进行身份验证,这显然是您得到的,尽管要确认检查客户端证书消息(第二条),它是否不包含证书?在这种情况下,必须更改或删除服务器的首选项。服务器是什么?编辑速度太慢,但我没有注意到您接受了pepo的假设服务器是IIS,所以请查看可能的答案。我没有忽略服务器Hellodone。它没有出现。。。是,CA列表不是空的,但我的CA不在。客户端不包含证书(
证书长度:0
)。服务器是Win 7,IIS 7.5。更具体地说,如果将根目录放在LocalComputer TrustedRoot中,则应该将其放在客户端CA列表中。
Client Hello
Server Hello, Change Cipher Spec, Encrypted Handshake Message
Server Hello, Certificate
Certificate Request
Certificate, Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message