快速了解Https通信原理
公钥和私钥的关系
-
私钥由服务器持有,公钥所有人都知晓
-
私钥加密的数据,使用公钥可以解密
-
公钥加密的数据,只有私钥可以解开
-
私钥和公钥之间的这种关系,是通过特定算法实现的,但是破解难度和成本极大,因此可以认为是相当安全的
-
服务端发给浏览器的数据,由于公钥是公开的,谁都可以解密,因此不能直接用于数据通信
信任建立过程(非对称加密)
-
服务端向权威CA机构,购买一份受信任的SSL证书
-
浏览器向服务器发出请求,并携带自己的加密算法和摘要算法
-
服务器收到浏览器的请求,选择浏览器要求的加密算法和摘要算法
-
服务器将自己申请的数字证书返回给浏览器
-
浏览器根据证书的颁发机构,去内置的证书列表中查找
- 如果是权限证书机构,则取出对应的公钥
- 如果不是可信机构,则警告证书不可信,是否继续使用
-
浏览器用公钥去解密服务器发来的数字证书,得到证书中的域名,有效期等信息
- 如果域名和实际访问地址不一致,或者已过有效期,则提示用户证书无效
-
浏览器生成一个随机数R,保存到本地,用公钥加密后将R发送给服务器
-
服务器用私钥解密,得到随机数R,保存到本地
数据通信过程(对称加密)
-
服务器用R作为密钥,加密网页,发送给浏览器
-
浏览器用R作为密钥,解密网页
-
浏览器用R作为密钥,继续加密新的数据,并发送给服务器
设计原理
非对称加密方式,仅仅用来交换对称加密所需的秘钥R
当R被存储到双方本地后,后面的过程使用对称加密的方式通信,就不用担心安全问题了
在非对称加密阶段
当服务器给浏览器发送证书,由于服务端证书校验依赖于认证中心和私钥,因此是安全的
当浏览器给服务器发送数据时,由于随机数R的解密依赖于私钥,因此也是安全的