老青菜

TLS1.2 Client Certificate

2019-06-09

当Client收到Server Hello Done之后,开始校验Server证书链有效性,有效期、域名、证书是否收信任等等。校验通过后,如果之前收到Certificate Request,即需要验证客户端证书。这时候Client会发送
Client Certificate消息。
如果没有对应的证书或者证书无效,Server可以自己决定是否需要继续握手。

消息格式

Certificates

Server证书链信息,包含当前客户端证书和上级证书。

serialNumber

证书序列号。

signature

证书签名算法。

subject

证书持有者信息,包含域名等等信息。

issuer

证书颁发者信息。

validity

证书有效期信息。

注意事项

load certificate failed

尽管已经安装ca.key和client.key到钥匙串,这里我们使用Chrome访问,可能也加载不了Client Certificate,不过我们可以直接使用curl访问,命令如下:

curl https://www.laoqingcai.com/api/user --cert ~/Downloads/ssl/client/client.crt --key ~/Downloads/ssl/client/client.key

no certificate

在无Client证书的情况下,按照rfc5246的描述,客户端应该发送空的证书消息,描述如下:

If no suitable certificate is available,the client MUST send a certificate message containing no certificates.

但是实际使用Chrome测试,Client直接发送了Alert(Fatal)消息,这一点Chrome实现和文档有些不一样。

参考链接

TLS1.2
TLS1.3
HandShake Protocol

Tags: HTTP
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章