TLS客户端身份验证

时间:2016-03-22 19:28:26

标签: authentication ssl client x509

TLS(v1.1,1.2等)或X.509标准是否规定了客户端和服务器如何协商客户端身份验证证书?

具体来说,我正在处理一个案例,即服务器在其中发送了大量(大约五个)证书颁发机构的证书请求消息,如下所示:

*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
<CN=AA, DC=BB, DC=cc, DC=dd>
<CN=EE, DC=FF, DC=gg, DC=hh>
<CN=II, DC=JJ, DC=kk, DC=ll>
<CN=MM, DC=NN, DC=oo, DC=pp>

客户端密钥库具有多个客户端证书,这些证书与从服务器接收的这些证书颁发机构之一匹配(由其颁发)。

我看到我的客户端选择并使用密钥库中与服务器的可信CA匹配的第一个证书(在众多证书中)。但是,服务器不接受此证书。服务器将接受的证书存在于客户端密钥库中,但它不是与服务器的证书请求标准匹配的证书列表中的第一个证书。服务器终止连接并且不发送警报。

现在我有两个问题:

  1. 我的客户端或服务器是否行为不端?

  2. 在放弃连接之前,TLS规范是否有任何关于Client-Server尝试所有匹配的客户端证书的内容?

  3. 如果TLS规范没有说明这一点 - 这个问题如何最好地解决?向客户端添加智能(例如,通过指定别名或其他一些此类选择机制)是解决此问题的唯一方法吗?为什么TLS协议不能自行处理?

    我已经阅读了TLS规范以及我可以在网上搜索的任何X.509信息(当然不是详尽无遗)但我没有得到关于此的明确信息。

1 个答案:

答案 0 :(得分:1)

  

我的客户端或服务器是否行为不端?

根据您的描述,服务器请求由特定CA签名的证书,并且客户端发送此类证书,但服务器不接受它。原因可能是证书错误,签名不安全,过期,撤销或类似,在这种情况下客户端不应该发送它。或者可能是服务器错误地接受了完全有效的证书。从你的描述中无法判断出这是哪种情况。

  

在放弃连接之前,TLS规范是否有任何关于Client-Server尝试所有匹配的客户端证书的说法?

不,它希望客户端在第一次尝试时发送符合服务器要求的有效证书,并期望服务器接受此有效证书。客户端的常见行为是,如果多个证书符合服务器的公布要求,则询问用户应使用哪个证书。