Q1: 什么是 HTTPS?
BS: HTTPS 是安全的 HTTP
HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间。
Q2: 你说的信息传输安全是什么意思
BS: 信息传输的安全有三个方面:
1、客户端和服务器直接的通信只
2、有自己能看懂,即使第三方拿到数据也看不懂这些信息的真实含义。
3、第三方虽然看不懂数据,但可以 XJB 改,因此客户端和服务器必须有能力判断数据是否被修改过。
4、客户端必须避免中间人攻击,即除了真正的服务器,任何第三方都无法冒充服务器。
很遗憾的是,目前的 HTTP 协议还不满足上述三条要求中的任何一条。
Q3: 这么多要求,一个一个去满足是不是很累?
BS: 不累,第三个要求可以不用管
是的,我没开玩笑,你可以暂时别管第三个要求,因为它实际上隶属于第一个需求。我们都知道加密需要密码,密码不是天下掉下来,也得需要双方经过通信才能协商出来。所以一个设计良好的加密机制必然会防止第三者的干扰和伪造。等搞明白了加密的具体原理,我们自然可以检验是否满足:“任何第三者无法冒充服务器”这一要求。
Q4: 那怎么加密信息呢
BS: 使用对称加密技术
对称加密可以理解为对原始数据的可逆变换。比如 Hello 可以变换成 Ifmmp,规则就是每个字母变成它在字母表上的后一个字母,这里的秘钥就是 1,另一方拿到 Ifmmp 就可以还原成原来的信息 Hello 了。
引入对称加密后,HTTPS 的握手流程就会多了两步,用来传递对称加密的秘钥:
1、客户端: 你好,我需要发起一个 HTTPS 请求
1、服务器: 好的,你的秘钥是 1。
提到了对称加密,那么自然还有非对称加密。它的思想很简单,计算两个质数的乘积很容易,但反过来分解成两个质数的乘积就很难,要经过极为复杂的运算。非对称加密有两个秘钥,一个是公钥,一个是私钥。公钥加密的内容只有私钥可以解密,私钥加密的内容只有公钥可以解密。一般我们把服务器自己留着,不对外公布的密钥称为私钥,所有人都可以获取的称为公钥。
使用对称加密一般要比非对称加密快得多,对服务器的运算压力也小得多。
Q5: 对称秘钥如何传输
服务器直接返回明文的对称加密密钥是不是不安全。如果有监听者拿到这个密钥,不就知道客户端和服务器后续的通信内容了么?
BS: 利用非对称加密
是这样,所以不能明文传递对称秘钥,而且也不能用一个新的对称加密算法来加密原来的对称秘钥,否则新的对称秘钥同样无法传输,这就是鸡生蛋、蛋生鸡的悖论。
这里我们引入非对称加密的方式,非对称加密的特性决定了服务器用私钥加密的内容并不是真正的加密,因为公钥所有人都有,所以服务器的密文能被所有人解析。但私钥只掌握在服务器手上,这就带来了两个巨大的优势:
1、服务器下发的内容不可能被伪造,因为别人都没有私钥,所以无法加密。强行加密的后果是客户端用公钥无法解开。
2、任何人用公钥加密的内容都是绝对安全的,因为私钥只有服务器有,也就是只有真正的服务器可以看到被加密的原文。
所以传输对称秘钥的问题就迎刃而解了: 秘钥不是由服务器下发,而是由客户端生成并且主动告诉服务器。
所以当引入非对称加密后,HTTPS 的握手流程依然是两步,不过细节略有变化:
客户端: 你好,我需要发起一个 HTTPS 请求,这是我的 (用公钥加密后的) 秘钥。
-
无相关信息