这里我把客户端证书信任库里面清空,及没放服务端证书,Java报错不一样,但抓包是一样的,在此记录下过程。
1. 前3个包是TCP三次握手,在此不解析,对应的包如下:
2. 握手成功后,客户端发送自己支持的加密套,和随机数给服务端,也就是Client Hello
具体内容如下:
其中Random为随机数,其Handshake Type为Client Hello。CIpher Suites为加密套。signature_algorithms为签名算法这里可以。
3. 服务端收到Client Hello后,回复Ack对应的包如下:
4. 服务端发送自己的随机数以及选择一个加密套以及服务端证书给客户端也就是Server Hello
对应的包:
内容如下:
发送了Random随机数,选择的加密套为TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
5. 客户端收到后Server Hello Done后回复Ack,对应的包如下:
6. 客户端收到服务端证书后,进行验证对比自己的信任库,当信任库没有,或者没有对应的服务端证书就会报这个错,对应的包如下Certificate Unknown:
内容如下:
7. 服务端收到后,回复Ack对应的包如下:
8. 最后就是TCP四次分手的过程,对应的包如下: