大致流程:
- 浏览器发起Https请求
- 服务端接受请求返回Https证书(包含公钥)
- 客户端验证证书是否合法
验证证书通过后:
- 浏览器本地生成随机数
- 公钥加密随机数,并传输给服务器
- 服务器私钥解密出随机数
- 通过随机数构造对称加密算法,并对结果进行加密后传输
详细:
(概念)数字证书:通信标识,一般由CA中心颁发,或第三方权威机构。包括CA的签名,证书所有的公钥,CA中心的签名算法,指纹及算法,id,版本,有效期等。
证书获取
申请者通过加密算法生成私钥(保存在服务器,不提供给任何人),使用私钥生成证书签名(CSR,附带公钥),需要提供申请者相关信息(域名、拥有者信息),发送给CA机构请求他们的签名,经过签名的才是被信任的证书。
CA机构对申请者进行验证,并在证书中添加信息(颁发机构、有效期、指纹算法、签名算法)形成新证书。
客户端如何识别证书?
浏览器事先准备好了CA机构的相关信息。具体如下:
1.浏览器访问https服务器,并带上自身支持的Cipher Suite(密钥算法套件)
2.服务器接收Cipher并与自身支持的套件对比,如果能够找到双方 都支持的Cipher则返回自己的证书。
3.浏览器确认加密算法并对证书认证。
4.使用证书的认证机构的公钥 按照证书中的签名算法解密获取hash值
5.使用证实的hash摘要算法对证书信息hash计算 对比第4步的hash值,如果相等则被信任。