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

How Chrome browser know which client certificate to prompt for a site?

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

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

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

  1. 如何Chrome 知道哪些客户端证书可供站点提供以供选择?
  2. Tomcat 将这些客户端证书存储在其信任库中。期间 SSL 握手,Tomcat 将请求客户端证书。可以 请求它在其信任中知道的一些特定证书 存储以便 Chrome 知道要显示什么?

客户端证书认证在浏览器实现的 SSL/TLS 协议的握手阶段进行规定。

  1. 如果服务器需要客户端证书认证(是 可选),向客户端发送一条消息,其中包含已接受的列表 证书颁发机构 (CA)。如果服务器接受任何,则可以为空 证书.

  2. 客户端 select 安装在客户端密钥库中的证书,这些证书由任何这些 CA 颁发,并将列表呈现给用户。在 Chrome 的情况下,浏览器 selects 用户从操作系统的密钥库安装的证书。

  3. 用户选择证书,客户端用证书的私钥对握手过程中交换的已知数据进行签名。

在第 2 步中只能 select 编辑带有私钥的证书。这就是浏览器不会 select 您的设备中安装受信任 CA 的证书的原因。您不拥有私钥