https加密流程

HTTPS是在HTTP协议的基础上引入了一个加密层。

HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。

加密是什么

类比于编码和解码。

加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 。
解密就是把 密文 再进行一系列变换, 还原成 明文 。
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥 (正确发音 yue 四声, 不过大家平时都读作 yao 四声) .

HTTPS的工作过程

既然要保证数据安全, 就需要进行 "加密"。
网络传输中不再直接传输明文了, 而是加密之后的 "密文"。
加密的方式有很多, 但是整体可以分成两大类: 对称加密 非对称加密。

引入对称加密

对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文.
引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的真实内容是啥了.
但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端和每个密钥之间的关联关系, 这也是个很麻烦的事情。
比较理想的做法, 就是能在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥~
但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输!
但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋"的问题了. 此时密钥的传输再用对称加密就行不通了.
就需要引入非对称加密.

引入非对称加密

非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥"。

公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.

  • 通过公钥对明文加密, 变成密文
  • 通过私钥对密文解密, 变成明文
也可以反着用
  • 通过私钥对明文加密, 变成密文
  • 通过公钥对密文解密, 变成明文

简单来说,为了避免要传输的信息直白的在网络上传递,我们引入对称加密,引入密钥,来让直白的信息变成复杂的信息(黑客看不懂的)。但是由于这个密钥需要客户端和服务器都知道(对称加密),又不能让密钥在网络中直白的传递。因此引入非对称加密。非对称加密有公钥和私钥,用公钥或者私钥对对称密钥进行加锁,另一端则用另一个钥来进行解锁。由于解锁的要是在另一端,所以即使黑客截断了也无法进行解锁。

  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器。
  • 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥。
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据。
  • 后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 其他主机/设备不知道密钥即使截获数据也没有意义。
那么接下来问题又来了:
客户端如何获取到公钥?
客户端如何确定这个公钥不是黑客伪造的?
事实上,黑客可以当成一个中间人,自己生成一对非对称密钥,也可以截断信息。
如何解决呢?

引入证书

在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书。
这个证书包含了刚才的公钥, 也包含了网站的身份信息。
这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名
  • ......

当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)。

  • 判定证书的有效期是否过期。
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)。
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等。如果相等, 则说明证书是没有被篡改过的。

简单来说。

1.当我客户端与服务器发生连接的时候。服务器首先会发一个证书给客户端。一是为了证明这个证书是真的(通过本地计算一个值,然后和服务器那边计算的值做对比。这个值也是需要用另一个私钥加密传过来的,这个私钥是申请证书的时候,证书发布机构给服务器的, 不是客户端和服务器传输对称密钥的私钥),二是为了告知客户端公钥是什么。

2.客户端将明文信息进行对称加密,然后用公钥加密。发送给服务器。此时,唯一能打开的私钥在服务器那里,黑客打开不了。

3.服务器接受到以后,用私钥打开,打开对称加密,获取明文,返回信息,对称加密,私钥加密。再发给客户端。此时,唯一能打开的公钥在客户端那里,黑客打开不了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值