之前也看过一些 HTTPS 的文章,确实都讲的很好,奈何像协议这种东西,自己忘记的实在是快,所以这次自己按照自己的理解梳理一下 HTTPS 的链接过程。
HTTPS 与 HTTP 的异同点
- HTTP 的请求头信息和响应头信息,HTTPS也是可以直接使用的,所以在设置头信息,传送头部信息,消息实体上,这些都是一样的。
- HTTP 和 HTTPS 的默认端口是不一样的,HTTP 默认端口是
80
, HTTPS 的默认端口是443
。 - HTTP 的传送是明文传输,HTTPS 的传送是通过加密的。
HTTPS 的链接过程
TCP/IP 的三次握手就先不说了。
- 客户端先向服务端发送一些自己支持或者想要的算法集合等。
当前支持的TLS版本集合 当前支持的非对称加密算法集合 当前支持的对称加密算法集合 当前支持的Hash算法集合 其他信息
- 服务端收到消息后,发送一份自己支持和想要的算法集合。
当前支持的TLS版本集合 当前支持的非对称加密算法集合 当前支持的对称加密算法集合 当前支持的Hash算法集合 其他信息
- 经过两方支持的算法集合等的比对,服务端选好相应的算法集合,紧接着服务端将服务器上部署的数字证书信息和公钥部分返回给客户端。(服务器上有证书公钥和证书私钥)
证书里面会携带一些信息,比如: 签名算法 签名值 版本号 发行者 有效时间 证书主体名称 证书主体公钥信息 (公钥算法和公钥值) 发行者唯一 ID 等等
- 客户端(浏览器)验证证书的有效性。(验证过程有点复杂)
- 如果验证有效,客户端生成一份随机数(对称私钥),然后同服务器返回的公钥进行加密,然后将加密后的随机数发送给服务器。
- 服务器收到客户端发送的信息,然后通过服务端部署的证书私钥对信息进行解密,得到客户端生成的随机数。
- 服务器将想要返回的数据通过客户端生成的随机数(对称私钥)进行加密,然后返回给客户端。
- 客户端收到信息后,直接使用刚才的随机数(对称私钥)进行解密得到解密后的信息。
- 之后的客户端和服务端的通信就是用这份随机数进行加密传输。
网上有这样一份图,便于理解:
以上是一份简要的链接过程,真实的链接过程比较复杂。
之后再补充相关内容,这些基本概念是一定需要知道的。