Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 浏览器没有';t应用客户端证书:403.7_Ssl_Ssl Certificate_Authentication - Fatal编程技术网

Ssl 浏览器没有';t应用客户端证书: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名称部分 还有什么我可以试试的吗 更新: 我认为这无关紧要,但我的服

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

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

我还尝试了
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选项

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

  • 在功能视图中,双击SSL设置

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

  • 在操作窗格中,单击应用


  • 我想我已经这样做了:我可以在当前用户个人证书中看到我的客户端证书,在本地计算机个人证书中看到我的服务器证书,在本地计算机可信根证书颁发机构证书中看到我的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