详解 Web 服务器和客户端加密通信的实现原理和演化历史

  前言

  加密通信是网络安全领域的关键技术之一,也广泛应用于现代 web 服务器(server)和客户端(client)之间的通信。web 技术诞生之初,server 和 client 之间是基于明文通信的,也就是 HTTP 1.0. 随着技术的发展,HTTPS 逐渐代替了 HTTP,HTTPS 协议能够保证数据不会泄露,不被篡改,所谓 HTTPS,就是 HTTP + TLS/SSL。本文采用看图说话的形式,带你了解加密通信的演进历史和原理,最后总结了现代 web 技术中采用的加密通信机制。

  上古时代 - 明文

  一对情侣 Jack 和 Rose 之间通信,直接采用明文。一是由于技术原因,二是隐私保护的意识可能还不明显。

  

  明文通信

  远古时代 - 对称加密

  某一天,Jack 和 Rose 发现,他们之间的悄悄话被别人窃听了。于是,他们商量出了一个办法:约定一套只有他们俩知道的规则,给通信内容加密。这样,即使通信内容被劫持,没有密钥,也看不到原始通信内容。这种方式也就是我们常听到的对称加密。

  

  一把密钥,对称加密

  中古时代 - 非对称加密 1.0

  时间久了,人们发现对称加密存在一个问题,那就是通信双方必须知道这个共同的密钥,他们得见面才能完成加密通信。那有没有什么办法能做到在不用见面的前提下实现加密通信呢?数学家们给出了答案。

  

  非对称加密 1.0

  Jack 和 Rose 分别在本地独自生成了一对密钥,分别是 public key(公钥)和 private key(私钥)。通信开始前,双方互相交换各自的 public key。交换之后,Jack 知道了 public key 2,Rose 也知道了 public key 1.

  

  非对称加密 1.0 - 交换各自公钥

  为什么要采用一对密钥呢?

  先来看看 Jack 如何给数据加密的:

  

  非对称加密 1.0 - 发送方给数据加密

  发送方根据信的内容,采用某种 hash 算法,生成摘要(Digest),然后用自己的私钥(private key 1)加密,生成数字签名(Sinature),再把数字签名和信件一起发送出去。

  Rose 如何处理收到的加密信件:

  

  非对称加密 1.0 - 接收方解密数据

  Rose 收到 Jack 的加密信件后,采用和 Jack 同样的 hash 算法,对信件内容进行 hash 运算,得到 Digest A。接着,用之前收到的 Jack 的公钥(也就是 public key 1)解密 Sinature 文件,得到 Digest B。比较摘要 A 和摘要 B,如果 Digest A 和 Digest B 相等,表明信件内容没有被篡改。

  虽然非对称加密比对称加密方便很多,通信双方不需要互相见面就能实现加密通信。然而,还是有个问题:在互相交换公钥的过程中,很容易被第三方黑客劫持。黑客拦截了双方的公钥之后,再伪造两个公钥匙分别发给 Jack 和 Rose,那么通信内容就彻底泄露了。

  

  非对称加密 1.0 - 公钥被劫持

  现代 - 非对称加密 2.0

  为了解决非对称加密的弊端,科学家们想出了一个办法,那就是引入 CA(Certificate Authority,认证中心),CA 出现的意义就是去保证 public key 的真实性。

  CA 的功能有两个:一是颁发 CA 证书;二是制作数字证书(Digital Certificate)。具体是怎么做的呢?

  

  非对称加密 2.0 - CA 的功能

  CA 自己生成一对公钥和私钥(私钥是绝对保密,不可能泄露的)。CA 证书是客户端(这里对应的是 Rose)使用的,简单理解就是 CA 的公钥,CA 证书一般内置在客户端的浏览器或操作系统里。

  

  非对称加密 2.0 - 数字证书的生成

  而数字证书的目的就是用 CA 的私钥给 web 服务器(这里对应的是 Jack) 的 public key 加密,如上图所示。Jack 拿到 CA 的数字证书之后,和信件内容,数字签名(Sinature)一起打包发给 Rose.

  

  非对称加密 2.0 - 解密流程

  Rose 拿到加密数据后,用 CA 证书里的 CA 公钥解密数字证书,获取 Jack 的 public key 1,然后用 Jack 的公钥(public key 1)解密 Sinature,得到 Digest B。接下来流程就是和非对称加密 1.0 时代相同了。

  总结 - 现代 web 技术中的加密通信机制

  上文宏观地介绍了加密通信的实现原理和演进历史,其中 hash 算法、公、私钥的生成方法等有很多种实现形式,感兴趣的同学可以进一步研究。值得注意的是,虽然非对称加密是最理想的加密手段,但是实现复杂度较高,比较浪费系统资源。所以,现代 web 加密通信中,数据传输采用对称加密,而对称加密所使用的密钥是基于非对称加密 2.0 技术传输的,具体流程如下:

  客户端 向 web 服务器发起一个安全连接的请求服务器返回经过 CA 认证的数字证书,证书里面包含了服务器的 public key(注意:服务器的 public 可以,不是 CA 的 public key)客户端 拿到数字证书,用自己浏览器内置的 CA 证书(包含CA公钥)解密得到服务器的 public key客户端 用服务器的 public key 加密一个用于接下来的对称加密算法的密钥,传给 web 服务器(因为只有服务器有private key可以解密,所以不用担心中间人拦截这个加密的密钥)服务器拿到这个加密的密钥,解密获取密钥,再使用对称加密算法,和用户完成接下来的网络通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值