本文谈谈HTTPS设计演变过程,希望对大家理解HTTPS有帮助,有不对的地方欢迎指出。
在讨论HTTPS之前,需要掌握一些密码学基础概念。
明文: 指没有经过加密的信息/数据。
密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
定义:需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
常用的对称加密算法: DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
加密过程: 明文 + 加密算法 + 私钥 => 密文
解密过程: 密文 + 解密算法 + 私钥 => 明文
由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
定义
常用非对称加密算法: RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
HTTPS发展源头是HTTP(超文本传输协议),所以我们先来看看HTTP传输,如下:
客户端,把一条消息,以明文的方式,发送到服务器。
那么在网络上赤裸裸的明文传输会有什么问题呢?
请君试想,如果HTTP请求被某个不怀好意的中间人截取,并且,消息包含银行密码等敏感信息的话,造成的后果不堪设想吧。
既然明文传输会有问题,那么,我们可以用加密算法加密嘛。
接下来,看看用对称算法加密后,是怎样的,如图:
这种方式还是有问题,一开始客户端怎么把密钥发过去呢?如果不怀好意的中间人截取到了密钥,发送的消息还是会被盗取和利用呢。
可以考虑非对称加密试试。
OK,我们再来看看,使用非对称加密算法,又是怎样,如图:
纵观整个过程,感觉没啥问题,即使中间人截取了公钥,也没啥用,他没有私钥解密不了。但是,非对称算法(如:RSA)有个弊端,它很慢。试想一下,如果你用浏览器请求,它很久才响应,你能接受吗?
因为对称加密快,但是它安全性不高,非对称加密安全性高,但是它慢,那么,可以考虑非对称加密+对称加密结合一起嘛。
非对称加密+对称加密双剑合璧的流程图如下:
这个流程看来,似乎已经天衣无缝了呢?但是,如果中间人又来搞事情呢?要是中间人截取公钥,把公钥进行篡改呢? 打个比喻,把公钥比喻你自己的手机号,它是公开的,谁都可以给你打电话。假设你发消息给你朋友,告诉他你的手机号,然后消息被中间人截取修改了,改为110,然后你朋友不知情的情况下,拨通110,打电话给你。。。
为了避免公钥被篡改,需要引入数字签名,类似给你的公钥盖个章,证明身份用。
为了避免公钥被篡改,引入了数字证书,如图所下:
介绍完数字证书,完整的HTTPS流程千呼万唤始出来了,如图: