答案1
HTTPS 客户端证书必须有对应的私钥,否则不能用于 HTTPS 客户端身份验证。
在 Windows 上(屏幕截图看起来像是在 Windows 上拍摄的),Chrome 确实使用了 Windows 证书管理器。HTTPS 身份验证的证书存储在个人证书存储区中(中的“个人”部分certmgr.msc
)。
此外,您尝试连接的 HTTPS 服务器可以在其Certificate Request
消息中发送它将接受客户端证书身份验证的 CA 列表:
引自rfc5246
certificate_authorities
:可接受的证书颁发机构的专有名称 [X501] 列表,以 DER 编码格式表示。这些专有名称可以为根 CA 或下属 CA 指定所需的专有名称;因此,此消息可用于描述已知根以及所需的授权空间。如果证书颁发机构列表为空,则客户端可以发送任何适当的 ClientCertificateType 证书,除非有相反的外部安排。
答案2
虽然大多数 HTTPS 网站使用网站发送的证书向服务器进行身份验证,但 HTTPS 还支持双向身份验证,称为 相互认证。
为了请求相互认证,服务器CertificateRequest
在 HTTPS 握手期间向客户端发送一条消息,指定浏览器将用来查找满足服务器请求的客户端证书的标准过滤器。
如果浏览器发现有多个可能的证书(未过期且Client Authentication
设置了用途并有可用的私钥的证书)符合服务器提供的过滤条件,它会要求用户选择一个。这种情况通常很少发生(至少对我来说是这样)。
所选的证书将通过浏览器的以下响应发送到服务器Certificate
。