有些概率一直都不是很清晰,列举下方便查看

CA证书:

1、什么是CA证书

首先,有一个权威的证书签发机构,称为CA——全球就那么几个公司比较权威啦,这个机构,先用RSA产生一对公私钥。 私钥自己留着藏起来,你要是能偷到手就厉害了。
申请者(服务端)生成一对公钥私钥对,提供公钥、组织、域名等信息向 CA 提出申请证书。在 CA 判明申请者的身份后,便为你分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并用CA私钥为之签名后,便形成证书发给申请者(服务端)。

2、服务器证书:明文+签名

(1) 有效期:Validity有效期包含生效时间和失效时间,是一个时间区间;
(2) 公钥信息:Subject Public Key Info,包括公钥的加密算法和公钥内容;
(3) Fingerprints信息:fingerprints用于验证证书的完整性,也就是说确保证书没有被修改过。 其原理就是在发布证书时,发布者根据指纹算法(SHA-1、SHA-256等)计算整个证书的hash值(指纹)并和证书放在一起,client在打开证书时,自己也根据指纹算法计算一下证书的hash值(指纹),如果和刚开始的值相同,则说明证书未被修改过;如果hash值不一致,则表明证书内容被篡改过;
(4) 证书的签名:Certificate Signature Value和Certificate Signature Algorithm,对证书签名所使用的Hash算法和Hash值;
(5) 签发该证书的CA机构Issuer;
(6) 该证书是签发给哪个组织/公司信息Subject;
(7) 证书版本Version、证书序列号Serial Number以及Extensions扩展信息等。

证书的签名:发布机构CA的私钥加密【hash算法(证书内容明文)】

3、CA根证书

根证书包含CA公钥。
一般来说,CA根证书会被内置在客户端,若没有内置,请求的时候回提示证书不被信任。
最经典的例子就是12306网站,之前浏览器一直提示网站证书不被信任,因为12306网站的根证书没有被内置在浏览器里。

HTTPS握手过程

序列图:

查看证书公钥keystore ca证书公钥怎么得到_ci


CA证书校验:

1、使用证书hash算法(证书内容明文)获得信息摘要; 使用根证书内的公钥对证书签名解密; 如果一致,则可以确认证书的合法性,即服务端的公钥合法。
2、客户端然后验证证书相关的域名信息、有效时间等信息

enc_key 随机数a、b、c加密生成协商密钥
change_cipher_spec 通知后续的通信都采用协商的通信密钥和加密算法进行
encrypted_msg 计算所有当前的通信参数信息,生成一段数据;并采用协商密钥与算法加密
decrypt_msg 计算之前所有接收信息的 hash 值,然后解密接收的 msg,验证数据和密钥正确性