HTTPS是在HTTP协议的基础上引入了一个加密层。
加密是什么
类比于编码和解码。
HTTPS的工作过程
引入对称加密


引入非对称加密
非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥"。
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.
-
通过公钥对明文加密, 变成密文
- 通过私钥对密文解密, 变成明文
-
通过私钥对明文加密, 变成密文
- 通过公钥对密文解密, 变成明文
简单来说,为了避免要传输的信息直白的在网络上传递,我们引入对称加密,引入密钥,来让直白的信息变成复杂的信息(黑客看不懂的)。但是由于这个密钥需要客户端和服务器都知道(对称加密),又不能让密钥在网络中直白的传递。因此引入非对称加密。非对称加密有公钥和私钥,用公钥或者私钥对对称密钥进行加锁,另一端则用另一个钥来进行解锁。由于解锁的要是在另一端,所以即使黑客截断了也无法进行解锁。
- 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器。
- 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥。
- 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据。
- 后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 其他主机/设备不知道密钥即使截获数据也没有意义。
引入证书
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
- ......
当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)。
- 判定证书的有效期是否过期。
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)。
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等。如果相等, 则说明证书是没有被篡改过的。
简单来说。
1.当我客户端与服务器发生连接的时候。服务器首先会发一个证书给客户端。一是为了证明这个证书是真的(通过本地计算一个值,然后和服务器那边计算的值做对比。这个值也是需要用另一个私钥加密传过来的,这个私钥是申请证书的时候,证书发布机构给服务器的, 不是客户端和服务器传输对称密钥的私钥),二是为了告知客户端公钥是什么。
2.客户端将明文信息进行对称加密,然后用公钥加密。发送给服务器。此时,唯一能打开的私钥在服务器那里,黑客打开不了。
3.服务器接受到以后,用私钥打开,打开对称加密,获取明文,返回信息,对称加密,私钥加密。再发给客户端。此时,唯一能打开的公钥在客户端那里,黑客打开不了。