客户端角度上的HTTPS
这是站在客户端的角度上看HTTPS的一篇总结。以下内容都是个人理解,不确保都正确,如有问题请指正或者我们一起讨论。
HTTP
以往我使用HTTP请求,要么数据明文传输,不进行加密,要么使用非对称加密对传输数据进行加解密。
非对称加密是使用公钥和私钥进行数据加解密的,非对称加密的安全关键是私钥,私钥不能泄露,公钥可以分发给别人。
服务端保存私钥,将公钥给客户端,客户端使用公钥进行数据加密,服务端使用私钥进行数据解密。
HTTPS
HTTPS同时使用了非对称加密和对称加密,非对称加密用于证书验证,对称加密用于传输数据加密。
HTTPS中会有一个CA证书的概念,CA证书是从第三方CA证书机构申请的。
HTTPS的主要环节
-
公司从CA服务商申请到服务器秘钥(公钥和私钥)
-
客户端请求服务器获取公钥,并使用CA机构预置在客户端的CA根证书来验证服务器公钥是否正确,是否在有效期内等等
CA根证书即CA公钥,是放在客户端的,客户端使用这个公钥验证服务端返回的公钥是不是有问题。
-
如果验证服务器公钥没有问题,客户端生成一个用来对称加密的秘钥并使用服务器公钥加密,并发送给服务器端
-
服务端接收到被加密的秘钥后使用私钥解密,并得到实际的对称加密的秘钥值,然后使用对称加密的方式加密之后要传输的信息
-
客户端接收到信息后使用对称加密秘钥解密,获取到服务器传输的实际信息内容
一个HTTPS请求主要有证书验证和数据传输两个阶段。