文章目录
前言
在互联网发展初期,HTTP协议帮助了众多应用去传递数据,随着互联网的发展,越来越多的应用出现,传递敏感信息的需求变得十分急迫,所以HTTPs应运而生,本文将介绍HTTPs是什么以及它是如何保障我们通信安全的。
HTTPs是什么?
HTTPs,全称HTTP over TLS,意味在TLS之上的HTTP。要了解HTTPs的工作原理,我们就必须理解这个TLS到底是什么?
TLS是什么?
TLS已经非常有名了,不过笔者还是简单介绍一下。
TLS,全称Transport Layer Security,意味传输层安全。挺拗口,咋不叫安全传输层,这样不是更好理解吗?
TLS本身是一种基于传输层协议(TCP/UPD)的网络协议,被称为TLS Protocol,翻译过来全称就是传输层安全协议了。
其最新版是rfc8446定义的TLS Protocol Version 1.3,可以参考下图。
TLS协议提供了安全传输数据的方法,而HTTPs也正是因为用了TLS做数据传输协议,才能保障我们信息传输的安全。TLS是如何保障安全的,这个我们放到后面章节讨论。
协议栈对比:HTTPs vs HTTP
了解了HTTPs之后,为了加深印象,笔者画了HTTPs和HTTP协议栈的对比图。
可以看到对于HTTPs和HTTP来说,最高层的协议没有什么不同。区别仅仅是一个用了TLS协议做了数据加密解密工作。
万能的TLS协议
TLS协议更像一个TCP协议的代理(Proxy),高层协议可以随意在自己直接使用TCP协议或使用TLS协议代理操作TCP协议收发数据,这意味着TLS协议能为任意高层协议添加安全性保障。所以不仅仅是HTTP可以利用TLS做安全性保障成为HTTPs,还有其他有名的协议也有利用TLS协议做安全性保障。
- FTPs:FTP over TLS
- donmian-s:DNS query-response protocol run over TLS
- amqps:amqp protocol over TLS/SSL
- etc…
使用TLS来保证安全的协议有非常多,如在公开在iana注册了专用端口的协议中搜索tls就能出现一大片。
如果有兴趣的读者可以自己去这个网站看:Service Name and Transport Protocol Port Number Registry
截图如下:
如果你需要为自家的私有协议添加安全性保障,可以考虑使用TLS。
TLS如何保障我们的通信安全的?
那么如果说要保障数据安全,防止第三者窃听,无非就俩字:加密。
说到加密,不说一些奇奇怪怪的加密方式(如偏移a→b、b→c、…、z→a,加密解密表),我们主流的加密算法有两种:
- 对称加密:一个密钥,能同时用于数据的加密和解密。
- 非对称加密:两个密钥(公钥、密钥),是用公钥加密数据则用密钥解密,是用密钥加密则用公钥解密
对称加密和非对称加密的优缺点
加密方式 | 优点 | 缺点 |
---|---|---|
对称加密 | 密文数据量较小,运算速度快 | 密钥容易泄露,有安全性隐患 |
非对称加密 | 密钥不易泄露,安全性高 | 密文数据量大,运算速度慢 |
对称加密方式密钥易泄露的问题
我们说一下为什么对称加密密钥容易泄露,假设你是一个新用户,想要去和某个服务器做加密通信,如果使用对称加密,那么一定有一个密钥从服务器到我们这个用户的客户端的一个传递过程,如果不传递密钥信息,仅服务器持有密钥,我们用户(客户端)是没办法解密的。要进行通信一定要传递密钥给客户端。那么密钥传递的过程可以是通过网络传递(明文),也可以是比如你去服务器上拷贝密钥,然后保存到你客户端本地。无论是哪种方式,密钥的拷贝在多个节点存在都会导致密钥泄露风险增加。
改良版之混合加密
混合加密,对称加密和非对称加密都使用。因为两者都有致命缺点,一个是安全性问题,一个是密文数据量大(占带宽资源)和运算速度慢(占CPU等计算资源),为了解决这两个痛点,就有了混合加密。
混合加密首先使用非对称加密去传递对称加密密钥(会话密钥),这样对称加密密钥就是被安全传输的(经过了非对称加密),而且限定了对称加密密钥的生命周期为会话级别(即连接断开后就回收密钥,每次新的连接都是随机生成的不同密钥),大幅提高了安全性。后续的应用数据交换环节就使用之前交换的对称密钥去加密解密,解决了非对称加密的密文数据量大及运算速度慢的痛点。
笔者在19年时写的一篇文章中就详细介绍了三种加密方式,本文就不详细赘述了,有兴趣了解的读者可以看笔者写的这篇文章:《[密码学]对称密钥加密、非对称密钥加密和混合加密的基本原理》
TLS中混合加密的应用
那么我们的TLS支持两种模式,一种是PSK(pre shared key,预共享密钥)模式,另一种是Certificate(认证)模式,PSK通常不使用,我们大部分用到的都是Certificate模式。如刚才我们说的混合加密有两个阶段,一是交换会话密钥(对称加密密钥)的阶段,二是交换应用数据(对称加密密钥加密后的密文)的阶段。这在TLS中表现为
- TLS握手阶段:对应子协议TLS Handshake Protocol,用于交换加密算法、加密参数等信息。
- TLS数据交换阶段:对应子协议TLS Record Protocol,用于交换加密后的应用数据。
附:有时候会看到HTTP over SSL是什么?
SSL,全称Secure Sockets Layer,是TLS的前身,TLS是SSL的后继者。它们的职责相近,都是在如TCP的传输层之上提供安全性保障的协议。所以HTTPs早期被称为HTTP over SSL,现阶段SSL虽被TLS替代,但是HTTPs依然被保留,全称改为了HTTP over TLS。在rfc的注册协议端口资料中,关于https的描述也是
http protocol over TLS/SSL
结语
HTTPs总的来说并不难,如果能很好的理解TLS之于HTTPs的作用,那么理解TLS之于其他协议的作用就很简单了,甚至你可以为自己开发私有协议添加TLS的使用,使其变得更加安全。而TLS保证通信安全的根本是加密,而三种加密方式,TLS通常使用对商业环境最友好的混合加密来完成安全通信工作。
我是虎猫,希望本文对你有帮助。(=・ω・=)