Chrome浏览器如何知道要为网站提示的客户端证书?

Sys*_*tem 21 authentication ssl google-chrome client-certificates tomcat7

我正在使用Tomcat为我的项目设置证书身份验证.它适用于命令行客户端,如cURL.

我在Chrome浏览器中安装了许多客户端证书.有些用于连接到我的网站,其他用于不同目的而与我的项目无关.

每次我连接到我的网站时,Chrome都会显示一个客户端证书列表供您选择.这些正是我安装的证书而不是其他证书.我的问题是:

  1. Chrome如何知道哪些客户端证书可供网站选择?
  2. Tomcat将这些客户端证书存储在其信任库中.在SSL hanshake期间,Tomcat将请求客户端证书.它是否要求在其受信任的商店中知道某些特定的证书,以便Chrome知道要显示的内容?

ped*_*ofb 26

客户端证书身份验证在浏览器实现的SSL/TLS协议的握手阶段进行规则.

  1. 如果服务器需要客户端证书身份验证(它是可选的),请使用接受的证书颁发机构(CA)列表向客户端发送消息.如果服务器接受任何证书,则无效.

  2. 客户端选择安装在客户端密钥库中的证书,这些证书已由任何这些CA颁发,并将列表提供给用户.对于Chrome,浏览器会从操作系统密钥库中选择用户安装的证书.

  3. 用户选择证书,并且客户端使用证书的私钥对握手期间交换的已知数据执行签名.

在步骤2中,只能选择具有私钥的证书.这是因为浏览器未选择设备中安装的可信CA的证书.您没有私钥

  • @CarlosEduardoKiLee,请参阅 https://tools.ietf.org/html/rfc5246#section-7.4.8 客户端对所有先前发送或接收的握手消息进行数字签名 (2认同)