TCP/IP协议族(三) 数字签名与HTTPS详解

前面几篇博客聊了HTTP的相关东西,今天就来聊一聊HTTPS的东西。因为HTTP协议本身存在着明文传输、不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷。HTTPS确切的的说不是一种协议,而是HTTP + SSL (TSL)的结合体。HTTP报文经过SSL层加密后交付给TCP层进行传输SSL(安全套节层)主要采取的是RSA(非对称加密)与AES(对称加密)结合的加密方式。先通过RSA交互AES的密钥,然后通过AES进行报文加密和解密。本篇博客主要聊的就是HTTPS具体的工作过程。

一、RSA与AES简述

在本篇博客的第一部分呢,先聊一下RAS与AES这两个加密策略,如果你在公司做过支付相关的东西,对数据传输的安全性要求比较高,这时候就得采取一些加密措施将传输的报文进行加密,必要时再进行MD5验签。当然本部分聊的RAS与AES是比较简洁的,关于这两者具体的内容,请自行Google吧。因为HTTPS在传输的过程中使用到了RSA与AES加密算法,所以在聊HTTP+SSL之前呢,我们先简单的聊一下AES与RSA

1、Advanced Encryption Standard (AES: 高级加密标准)

AES,全称:Advanced Encryption Standard----高级加密标准。该加密算法有一个密钥,该密钥可以用来加密,也可以用来解密,所以AES是对称加密算法。下方这个就是AES加密和解密的过程Client端与Server端有一个共同的Key, 这个Key是用来加密和解密的。如果报文在传输的过程中被窃取了,没有这个key, 对加密的内容进行破解是非常困难的,当然窃取者如果有key的话,也是可以轻而易举的解密的。所以在AES中,key是关键。这也就相当于你们家的门钥匙,谁拿到钥匙后都可以打开你们家的门。即使门锁再结实,再安全,在钥匙面前也是不行呢。

所以对于AES加密策略来说这个Key的保密措施要做足一些,如果之后有时间的话可以分享一些具体的AES加密策略。比如每次加密的Key都是从一个密码本中动态生成的,而这个密码本服务端和客户端都有同一本,每次传输的是一些参数。这些参数在经过一些算法的映射,从密码本中取出相应的key用来解密。这样一来,就相当于给AES加了一层防盗门,加大了破解的难度。这样做的好处是每次加密的key都是不同的,而且需要密码本以及映射算法的支持。

  

TCP/IP协议族(三) 数字签名与HTTPS详解

2、RSA 公钥加密算法

RAS这个名字,就是该算法三位发明者的名字的首字母的组合。RAS是非对称加密,其在加密和解密的过程中,需要两个Key,一个公钥(public key),一个是私钥(private key)。公钥负责加密,而私钥负责解密。从名字就可以看出,公钥是可以开放出去的,任何人都可以持有公钥进行加密。而私钥必须得进行保护,因为是用来解密的。

这样一来,加密和解密就可以用不同的钥匙来处理。对于加密放来说,即使你可以对报文进行加密,如果没有私有的话也是不可以对你加密的内容进行解密的。这就相当于一个盒子,盒子上有把锁。你可以把东西放进去,然后再锁上盒子。但是如果你没有钥匙的话,也是打不开这把锁的。

下方这个简图就是服务端单向验证的RAS非对称加密算法,Client内置了一个公钥,该公钥与Server端的私钥是配对的所以Client端可以使用这个内置的Public key加密,而服务端就可以使用这个private key进行解密。目前最常用的是服务端单向认证机制

  

TCP/IP协议族(三) 数字签名与HTTPS详解

二、CA证书

如果你自己通过RAS算法生成了一个私钥和公钥,在公钥发送给客户端的过程中有可能被篡改成其他的公钥,而客户端在没有其他措施的保护下是不知道该公钥是否就是服务器那边的私钥对应的公钥的。这种自己做的RAS的公钥和私钥有可能在公钥分发的过程中被篡改。下方就是Client从Server端获取公钥时被中间者篡改了,将public换成了自己的伪public key, 同样这个中间者持有这个伪public key所对应的伪private key如果客户端使用的伪public key进行加密传输的话,那么中间者是可以使用自己的private key进行解密的

举个例子来类比一下这个问题。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgfjs.html