https与http区别以及https数据加密解密过程

原文: https://blog.csdn.net/xyz_dream/article/details/88071455





之前只是去了解了https零散的知识,只是大体知道比http安全。但是其中数据交互的来龙去脉,不是很清楚。借助今天的一篇文章总结一下自己的理解。原文可以参考: https://mp.weixin.qq.com/s/7rn4ruT2KemKRJRUkCwyfA

https出现的背景

大家都知道http协议是”明文”传输。 在互联网中,数据要从A到D一定会经过许许多多的网络路由器,http数据其实在每个路由器上都能看得清清楚楚,毫无隐私可言。 http协议带来的3个重要的安全问题:



  1. 数据被篡改

  2. 被监听

  3. 身份伪装


https的出现就是要解决上面3个面临的问题。



数据被篡改


关于这个问题,其实很多人都能想到。双方A与D只要通过对称加密,把明文变成密文传输即可。相信大家谍战剧应该都看过不少, 其中有一部印象比较深刻。大致讲的是,我党地下组织有2名同志(A和D)是某个省的老乡,他们地方的方言晦涩难懂,于是两人约定在摩斯密码发电报的时候,都用他们及其难懂的方言进行沟通,这样小日本就算截获电报也是一脸懵逼,破译不了。上面例子其实就是一个对称加密的过程, 密钥就是”A与D的方言”,假设小日本知道是他们使用的密钥,那么自然电报也就被破解了。

现在回到http请求来进行对照。 A要访问D的网站(其实也就是A与D进行通信, A是客户端浏览器,D是服务端)。A首先发送一个对称加密算法xx告诉D,我们后面都用这种xx加密算法通信。 D收到知道了,下次A发送信息过来就使用xx密钥解密就可以了。 但是由于http是明文传输, 假如第一次,A发送给D关于对称加密xx密钥被截获,那么后面A与D的通信也就被破解了。此时 截获报文的”中间人”可以修改传递的数据, 也可以看着你俩(A和D)都在说些啥(我就看看,不说话)。


1.被监听


http是明文并且从A到D假如经过2个路由器(B,C).最后才到达D. 那么B和C只要可以监听A和D的通信, 你们在说什么,聊天内容是什么都一览无遗。是不是很恐怖?


2.伪装


这个也很容易理解。A本来想访问D的网站, 经过C的时候,C把信息拦下来了不发给D了。直接和A聊天,假装自己就是D。通信的过程中,只要C说话的语气和D相差不大的话,A是不会察觉到的。


3.解决方案


1.首先我们可以用非对称加密的方式,给我们的报文加密。 D给A发送”我的公钥是D_pub_key”, 之后,A使用D_pub_key加密了通信内容”你好,我是A”的信息,再发给D,D使用私钥解开加密内容。得到信息是 “你好,我是A”. 但是还是那个问题,第一次D发送给A公钥的信息还是明文的, C也可以冒充D直接把C的公钥C_pub_key发给A。A以为是D发给他的,所以就用C_pub_key(此时A误以为这个公钥是D的)加密了通信内容,然后发给了C. C用自己的私钥解密,就知道了通信内容。所以到此我们只是把通信的加密方式从对称加密改为了非对称加密而已。


2.为了保证通信双方A和D彼此的身份是可靠的,那么A怎么才能知道D是不是真实的呢? 这要依赖于”信任链”。 例如E是专业做背景调查的机构(几乎所有人都相信E说的话),A十分信赖E. A说我谁都不信,我只相信E。E说谁是真实的就是真实的,说你是冒充的就是冒充的。 那么只要E机构对D做出充分认真,仔细,严格的筛选,验证身份,背景调查等等。最后确认了D是可信任的。 由于A信任E,那么E跟A说D是可信任的,那么A就会相信D确实是可信任的。E这样的机构被称之为”CA机构”。 首先D先向CA机构提供自己的身份证明,例如域名叫什么,域名注册信息,等等。 只要通过CA的各种验证,最后CA会给你两样东西。 一个是你网站D用于加密的私钥D_private_key。 还有一个.crt的”证书”文件(包含了机构用自己的公钥CA_private_key加密了你的公钥D_public_key信息,以及根据你网站的信息生成的”数字签名”, 还有CA机构自身的信息)。这样在C要请求D网站的时候,D不会像当初一样直接给C发送公钥D_public_key,而是给C发送”CA证书”。C浏览器端拿到”CA证书”之后, 由于 绝大多数浏览器厂商诸如Chrome , 火狐等都在本地客户端维护了众多权威CA机构的公钥CA_public_key。这样 浏览器用CA_public_key解密证书信息,然后根据生成数字签名的算法,生成数字签名拿去和证书里面的数字签名对比,是否一致,校验证书的有效性。 证书验证成功之后, C就可以拿D_public_key,使用其加密自己要发送的通信内容以及对称加密方式给D, D拿到后使用D_private_key解密,拿到对称加密密钥,进而解密得出明文信息。


通过上述的过程。https会保证通信双发的身份(依靠CA证书), 数据通过非对称加密对报文加密从而也预防了报文被篡改的情况, 至于监听者看到的都是密密麻麻的密文,自然也束手无策。自己需要多加思考和理解也许才能理清楚。诸如你的浏览器就是C, D是淘宝网(www.taobao.com).你在淘宝输入的账号,密码等信息都会安全的经过众多网络路由器,最终到达淘宝的服务器。 在途中这些路由器,看不懂你的信息,因为都是被加密过了。 (修改也没用,根本不知道意思,能修改什么?) 这样确保了你的信息真实地发送给了淘宝网。 那么会不会有人想做钓鱼网站,做了和淘宝一模一样的页面让你输入账号和密码? 会。 但是,首先假如是DNS劫持这种隐蔽性最高, 在你经过的DNS直接改为了www.taobao.com的ip指向了自己的钓鱼网站,当你在url上看到www.taobao.com的时候十分相信,这就是真的淘宝网。其实不一定。 但是 你要确信, 此时url上绝对不会是https://协议开头并且你的浏览器可能会提示你,你正在浏览的网站不安全。 因为在https的淘宝上的crt证书和私钥冒充者拿不到, 导致了证书验证失败。因为冒充者自颁发证书的私钥不是任何CA机构的私钥,所以在浏览器端没有任何一个CA机构的公钥能解开所谓的”冒充的证书”,证书校验第一步就失败了。 足以证明就是一个假冒的钓鱼网站。 所以在浏览一些十分正规的网站,出名的网站时假如就算url显示https,浏览器会提示证书有问题,这时候就要小心了。 这种情况遇到很少,不过注意自身安全总归是好事。