目录

    • HTTP 与 HTTPS 的区别
    • 加密方式
    • HTTPS 基本工作过程
      • 1. 仅使用对称密钥
      • 2. 引入非对称密钥对 key 进行加密
      • 3. 引入证书, 破解中间人攻击

HTTP 与 HTTPS 的区别

其实 HTTPS 与 HTTP 一样都是应用层协议, HTTPS 只是在 HTTP 的基础上再加上了一个加密层.

为啥要对 HTTP 进行加密呢?
HTTP 协议内容都是按照文本格式明文传输的, 这就导致在传输过程中可能会被篡改. (明文传输的各种信息会被别人一览无余, 没有隐私)

曾经就发生过一个大事件 : “运营商劫持”.
就好比我现在进入官网下载一个官方软件, 点击下载后弹出的是其他软件的下载, 这过程就是我发送一个HTTP请求给服务器, 服务器返回一个带有下载链接的HTTP响应, 结果被运营商修改了响应里的下载链接, 这样我得到的就是换掉的链接了.

为啥运营商能劫持数据呢 ?
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据报的内容, 并进行篡改.
其实不止运营商能得到用户与服务器交互的数据报, 黑客也可以.

HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全.

加密方式

网络传输中不再直接传输明文了, 而是加密之后的 “密文”.
加密的方式有很多, 但是整体可以分成两大类: 对称加密非对称加密

对称加密 :
只有一个密钥 key, 通过这个 key 可以将明文加密成密文, 同样的也可以用 key 将密文解密为明文.
对称加密的特点 : 计算起来比较快.

非对称加密 :
非对称加密要用到两个密钥, 一个叫做公钥(pub), 一个叫做私钥(pri). 公钥和私钥是配对的.
非对称加密的使用 :

通过私钥对明文加密, 变成密文, 再通过公钥对密文解密, 变成明文.
也可以反着来 : 通过公钥对明文加密, 变成密文, 再通过私钥对密文解密, 变成明文.

非对称加密缺点 : 运算速度非常慢,比对称加密要慢很多.

HTTPS 基本工作过程

注意 : 加密是针对 HTTP 的各种 header 和 body.

1. 仅使用对称密钥


注意 : 以上交互的前提是服务器存储了客户端的 key.

但实际上服务器所要服务的客户端非常多, 不可能将客户端的 key 都存储下来, 而客户端也不可能都使用一个 key, 如果所有客户端都使用一个 key, 那黑客就直接知道 key 了, 可以对数据报进行修改.

那咋办呢 ” />2. 引入非对称密钥对 key 进行加密

首先明确目标 : 客户端要将 key 安全送达到服务器, 不被黑客拿到.

先是客户端随机自己生成了一个 key, 服务器自己则有一对非对称密钥.
具体加密过程如下图 :

这样难道就真的安全吗” />
中间人攻击的关键在于客户端信任公钥, 同时这也是破解中间人攻击的关键.

3. 引入证书, 破解中间人攻击

证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

证书可以理解为一个对象, 这个对象包含了 :
服务器的 url, 证书的有效期, 颁布证书的机构, 服务器自己的公钥 pub, 签名等等.
注意, 签名前面的都是明文展示的, 签名是进行加密了的.
这个签名其实就是一个校验和, 证书颁布机构会针对所有属性计算一个校验和, 然后用机构自己的私钥对其进行加密.

注意 : 每个机构的非对称密钥都不一样, 每个机构的公钥都内置在操作系统中, 不需要去机构拿.

客户端访问服务器时就询问服务器公钥, 服务器就直接把证书发给客户端.
客户端拿到证书后, 首先就是对证书进行校验.

  1. 得到初始的签名 : 客户端使用系统内置的权威机构的公钥, 对证书中的加密的签名进行解密, 得到初始签名(sum1)
  2. 计算现在签名 : 客户端使用同样的算法计算证书中的各种属性, 得到sum2.
  3. 比较两个sun值是否相同, 如果相同则说明是未被篡改的数据(安全), 如果不同, 则说明证书被篡改了(不安全), 客户端的浏览器就报错.

注意 : 这里为啥黑客就不能破解呢?
黑客也是可以破解签名的, 但是黑客不能对签名进行加密, 黑客没有机构的私钥, 既然无法加密, 那自然无法伪造签名了, 就不能破解了.

其实上述这一套 :
对称加密 + 非对称加密 + 证书, 也是一个协议, 叫 SSL 或者 TLS .
HTTPS 也就等于 HTTP + SSL.