HTTPS协议介绍与原理¶
约 2912 个字 9 张图片 预计阅读时间 10 分钟
本篇介绍¶
前面已经基本了解了何为HTTP以及HTTP如何进行通信的,但是在HTTP中,所有的信息都是明文显示的,如果有一方截止了客户端的请求或者服务端的响应就可以获取到一定的信息,所以为了保证通信的尽可能安全,提出了HTTPS协议。在本篇会对HTTPS协议和其基本加密的原理进行介绍
Note
本篇不涉及前面的任何代码知识
何为加密和解密¶
加密就是把明文(要传输的信息)进行一系列变换,生成密文
解密就是把密文再进行一系列变换,还原成明文
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥
常见的加密方式¶
常见的加密方式一共有两种:
- 对称加密
- 非对称加密
下面会针对这两点进行介绍
对称加密¶
对称加密,采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。因为只需要一个密钥就可以同时执行加密和解密,所以安全系数相对较低
常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
特点:算法公开、计算量小、加密速度快、加密效率高
非对称加密¶
需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。一般来说公钥可以有很多个,而私钥只有一个
常见非对称加密算法(了解):RSA,DSA,ECDSA
特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
最大的缺点就是运算速度非常慢,比对称加密要慢很多
之所以称为非对称密钥就是因为其对密钥的使用方式不同,一般有两种使用方式:
- 使用私钥进行加密,再使用公钥进行解密:可以加密的人很少,但是可以解密的人很多。在网络通信中一般应用于服务端给客户端发送的信息,即响应
- 使用公钥进行加密,再使用私钥进行解密:可以加密的人很多,但是可以解密的人很少。在网络通信中一般应用于客户端给服务端发送的信息,即请求
猜测的加密方法¶
基于上面的两种加密方式,可以考虑四种加密方案:
Note
注意下面四种方案并不是上面两种加密方式简单的组合
- 只使用对称加密
- 只使用非对称加密,并且公钥和密钥只有一对
- 只使用非对称加密,并且公钥和密钥有两对
- 使用非对称加密和对称加密
下面针对这四种加密方案依次找出其中的不足以解释实际生活中使用的加密方式
只使用对称加密¶
基本示意图如下:
从上图中可以看出,第一次请求和响应时,因为客户端没有服务端的密钥S,所以需要向服务端请求密钥S,有了这一步之后,客户端才有机会对数据进行加密和解密时
但是这样的方式有一个很大的问题:如果第一次请求时服务端发送给客户端的密钥S并不是直接交给客户端,而是被一个中间人先获取到了密钥S,再由这个中间人转发给客户端,那么此时拥有密钥的人就有了三位:
- 客户端
- 中间人
- 服务端
示意图如下:
在中间人获取到密钥S之后,一旦下一次客户端向服务端发送信息,不但服务端可以对这个信息进行解密,中间人也可以对这个信息进行解密;同样,服务端给客户端发送的信息也可以被中间人解密,这个过程被称为中间人攻击(Man-in-the-MiddleAttack)
从上面的过程可以看到,只使用对称加密的方式存在密钥容易被劫持的问题。基于这个问题,最直观的考虑就是对密钥本身进行加密,但是密钥本身进行加密也需要建立通信,这就出现了先有鸡还是先有蛋的问题,所以只使用对称加密的方式无法解决安全问题
只使用非对称加密,并且公钥和密钥只有一对¶
基本示意图如下:
可以看到,使用当前方式如果只是客户端给服务端发送并不存在任何问题,因为服务端只是响应给客户端一个公钥S,这个公钥只是用于加密。但是一旦服务端给客户端发送,那么此时一旦存在中间人攻击,那么这个中间人也会拿到服务端给客户端发送的数据,示意图如下:
因为本次使用的是非对称加密,所以除了不安全的问题以外,还存在加密和解密过程时间消耗大
只使用非对称加密,并且公钥和密钥有两对¶
基本示意图如下:
这一套方案看似没有安全问题,但是实际上也存在安全问题:如果在交换公钥时就已经被中间人攻击,那么不论是请求还是响应,中间人都能看到彼此发送的数据。并且因为此时使用了两套非对称加密,所以时间消耗上是原来一对公钥和密钥的一倍
使用一对非对称加密和对称加密¶
基本示意图如下:
这种方式看似没有问题,但是如果中间人本身有自己的一对公钥和私钥呢?此时就存在巨大的问题,因为客户端本身并不知道获取的公钥是不是来自于服务器的,如果客户端获取到的公钥来自于中间人,那么在下一次使用该公钥时因为中间人有对应的私钥,所以可以获取到其中的密钥A。这样依赖,后续的安全问题还是存在
所以上面的方式只是在一定程度上解决了时间消耗的问题,因为一旦有了对称密钥,后续服务端和客户端的通信就只采用对称密钥,但是并没有解决安全问题
实际的加密方式¶
数据指纹(数据摘要)¶
数字指纹(数据摘要),其基本原理是利用单向散列函数(哈希函数)对信息进行运算,生成一串固定长度的数字摘要
数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。一旦数据被篡改,新的数字指纹就有很大的不同
数据指纹常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比
数字签名¶
对数据指纹使用非对称密钥进行加密就形成了数字签名,数字前面一般用于验证内容是否又被篡改,签名和验证的示意图如下:
签名的基本过程:
- 生成数据摘要:发送方使用哈希算法(如MD5、SHA系列)对原始数据计算出固定长度的数据摘要
- 私钥加密:发送方使用自己的私钥对这个数据摘要进行加密,生成数字签名
- 附加签名:将原始数据和数字签名一起发送给接收方
验证的基本过程:
- 分离数据:接收方获取到原始数据和数字签名
- 计算摘要:接收方使用相同的哈希算法对接收到的原始数据重新计算数据摘要
- 公钥解密:接收方使用发送方的公钥解密数字签名,获得发送方计算的原始数据摘要
- 比对验证:将两个数据摘要进行比对,如果一致,则证明:
- 数据未被篡改(完整性验证)
- 数据确实来自拥有对应私钥的发送方(身份验证)
数字签名能够同时保证数据的完整性和发送方的身份真实性,这是单纯加密无法达到的效果。
CA机构¶
基本介绍¶
CA(Certificate Authority,证书颁发机构)是一种被广泛信任的第三方机构,专门负责签发、管理和验证数字证书,用于解决公钥分发过程中的信任问题
CA机构的主要功能如下:
- 身份验证:严格验证申请证书的实体(如网站、组织)的真实身份
- 签发证书:为经过验证的实体签发数字证书,证书中包含实体身份信息和公钥
- 证书管理:维护证书的有效性,包括更新、撤销已失效或被盗用的证书
CA如何解决中间人攻击问题¶
前面我们看到,即使使用非对称加密和对称加密的组合方式,依然存在公钥分发过程中被中间人劫持替换的风险。CA机构通过以下方式解决这个问题:
- 建立信任锚点:操作系统和浏览器预装了知名CA机构的根证书,作为信任的基础
- 数字签名验证:CA使用自己的私钥对服务器的公钥和身份信息进行签名,客户端可以使用CA的公钥验证签名
- 证书链验证:通过证书链的方式,将信任从根CA传递到最终实体证书
基本示意图如下:
CA证书的基本结构¶
一个典型的数字证书包含:
- 证书持有者的身份信息
- 证书持有者的公钥
- 证书颁发机构的信息
- 证书有效期
- CA对以上信息的数字签名
使用非对称加密、对称加密及CA证书加密¶
基本示意图如下:
这个过程中,因为只有CA机构可以加密,所以中间人即使对原有数据进行解密也无法再使用CA机构的私钥加密
另外,尽管中间人可以对证书进行整体掉包,比如中间人申请一个证书,再把该证书发给客户端,但是证书内部带有服务端信息,这就保证了即使中间掉包证书,里面的信息也是错误的
基于上面两点,实际生活中使用的方式就是当前非对称加密、对称加密及CA证书加密的方式