通信--HTTPS连接过程

1,314 阅读3分钟

HTTPS 是什么?

HTTPS 是在 HTTP 的基础上增加了安全传输层协议 TLS,即 HTTPS = HTTP + TLS。

HTTPS 有什么用?

HTTP 协议是明文传输,使用 HTTP 协议传输的网络包可以被通信过程中的任何节点获取(如路由器、DNS 服务器、网络服务供应商),这些节点可能会读取、篡改网络包的内容,从而导致通信不能正常进行或造成危害和损失。而使用 HTTPS 协议传输的网络包经过加密,通信过程中的中间节点即使获取到网络包也无法进行有效读取和篡改,这使得通信过程安全可靠。

HTTPS 原理是什么?

想要中间节点看不懂网络包中的数据,需要对数据加密,要加密就要用到密钥,只有通信双方才知道、其他任何地方都不知道的密钥才是好密钥。那么怎么让密钥只被通信双方知道呢?

如果设备数量少,一台一台去部署也是可以的,然而一般来说,通信双方在通信前是不知道对方存在的,而一方告诉另一方密钥又会被中间节点获取到,这时就需要一个可靠的第三方了。如果通信双方都信任这个第三方,那么在这个第三方的作用下,通信双方就可以建立起信任,从而完成可靠的通信。这个第三方就是 CA 证书。

CA 证书是 CA 机构颁发给公司服务器的一个凭证(公司花钱买),里面有指纹、签名算法、服务器的公钥等。浏览器厂商和 CA 机构都是有深度合作的,浏览器会内置顶级 CA 证书。

在可靠第三方的帮助下,浏览器和服务器开始了 HTTPS 通信:

  • 浏览器向服务器发送 HTTPS 通信请求,发送自己支持的 TLS 版本号、密码套件、随机数 C

  • 服务器从中选择合适的加密协议并发送证书、使用的 TLS 版本号、密码套件、随机数 S

  • 浏览器使用顶级证书验证服务器发送的证书的合法性

  • 浏览器生成随机数 pre-master,并用服务器发送的证书内的公钥加密

  • 浏览器把加密后的 pre-master 发送给服务器

  • 浏览器根据随机数 C、随机数 S、pre-master 计算出密钥用于后续通信(对称加密密钥)

  • 浏览器发送 Change Cipher Spec 表示后续会话改用加密通信

  • 浏览器发送 Finished 请求,报文包含握手数据的校验信息

  • 服务器使用私钥解密得到 pre-master,根据随机数 C、随机数 S、pre-master 计算出密钥(和浏览器的相同)

  • 服务器发送 Change Cipher Spec 表示后续会话改用加密通信

  • 服务器发送 Finished 请求,报文包含握手数据的校验信息

为什么要用两种加密方式?

CA 证书加解密是服务器上生成了一对公钥和私钥,公钥给 CA 机构,CA 机构做成 CA 证书再给服务器,私钥服务器自己留着谁都不给。这种用公钥加密私钥解密、私钥加密公钥解密的方式叫做非对称加密,主要的算法是 RSA,非常消耗 CPU 算力,而且加密长度一般为 2048 位,意味着加密内容不超过 256 个字节,一般只用于加密密钥。

浏览器生成密钥,服务器再用相同算法和参数生成相同的密钥叫做对称加密。常用的算法有 AES、DES,这种加密算法计算量小,只占非对称加密算法的千分之一,适合用来对应用层数据加密。

参考:

面试题-网络基础-HTTPS连接过程

HTTPS建立连接详细过程

HTTPS为什么安全 &分析 HTTPS 连接建立全过程