日升时奋斗,日落时自省
目录
1、加密解释
2、对称加密
3、非对称加密
4、证书
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层
HTTP协议内容都是按照文本的方式明文传输的,这就导致子传输过程中出现一些被篡改的情况(运营商劫持)
运营商劫持:例如:你想下载一个软件但是,但是你点击下载的那一时间突出的下载却不与原内容不符,
HTTPS 就如同:HTTP + 安全层(SSL)
SSL/TSL用来加密的协议
1、加密解释
网络上明文传输数据很危险,就需要加密才能保证安全
加密:其实不难理解,这里举出一个日常例子,如果你想要让普通人看不到你写的字,但是你又想让某人看见,制作一个加密规则(我用笔蘸花露水在纸上写了一些内容等待纸上的水干了字就消失了,对方拿到纸后将纸放到水中就显示出来字迹了);此处就是进行加密
加密前的数据 : 就是我用花露水写的内容
加密后的数据 : 等花露水干了字迹消失 加密成功
拿到密文的数据:一张白纸
解密后的数据 :将纸放在水中显现纸上内容
这里的密钥 就是 水
2、对称加密
HTTPS其实主要是涉及到其中的SSL部分 SSL不是在HTTPS使用,现在我们知道安全传输依赖于加密,加密是一种最简单的办法 。这里叫做“对称加密”
加密的过程:明文 -> 加密(key) ->密文
解密的过程:密文 -> 解密(key) -> 明文
这里加密和解密都使用的是同一个密钥 称为: 对称加密
对称加密的安全性的前提密钥不能被黑客知道了,如果知道,不就可以直接获取内容了
为什么能获取内容呢??不是加密了吗???
产生这么一个问题:客户端生成密钥,还是服务器生成密钥呢??
由于一个服务器对应多个客户端 ,这些客户端每个人都得有不同的密钥,所以客户端生成密钥同时传内容时也给服务器密钥
此处使用一个事例:客户端生成一个密钥 ,客户端就需要把密钥告知服务器
3、非对称加密
客户端生成密钥,发送给服务器的过程中被黑客入侵网络设备,知道了其中的密文,那这样加密很容易就被侵入了,所以对称加密 就 仍旧不那么安全
有对称加密 就有 非对称加密
对称加密有问题在传输密钥,需要安全的将密钥传输给服务器(对密钥加密)
注:非对称加密是针对对称加密的密钥进行加密
生成一对密钥,公钥和私钥(私钥可以解密公钥可以通过一系列的公式理论可以推导出来)
明文 -> 公钥(加密) -> 密文 使用公钥加密
密文 -> 私钥(加密) -> 明文 使用私钥解密
注:该两种密钥可以 反过来 ,也是可以使用的
公钥是公开的,私钥只有服务器这边才有(谁也拿不到)
试问:公钥可以反推私钥吗???
答案:暂时不行,因为计算量太大了当前计算机算不出来(计算时间太长,可以算做计算不出来)
针对上图进行解析:
服务器生成一对 公钥和私钥
客户端持有公钥 服务器持有私钥 ,此时客户端拿着公钥,从服务器拿的,黑客也能知道公钥,,但是不能知道私钥,服务器肯定不会给的
客户端使用公钥,来对对称密钥进行加密,传输给服务器,服务器就可以拿着自己的私钥来解密得到对称密钥,只需要这一次就针对“ 对称密钥 ”加密即可,后面客户端和服务器直接就可以直接使用这个对称密钥进行后续传输
试问:非对称加密这么安全,还要对称加密干啥呢??主要是都是非对称加密太慢了,行不通
看到非对称密钥那可谓是天衣无缝了
那现在不是就万无一失了,其实还是破除当前僵局还是有迹可循的
黑客:虽然我破解不了(不能以公钥反推私钥解密),但是我能既骗你,也骗服务器(中间人攻击)
如何做到中间人:针对客户端时 自称为 服务器 ;针对服务器时 自称为 客户端
4、证书
针对“非对称加密”情况带来的漏洞如何预防??
问题主要出在了客户端,不能识别服务器的真伪;服务器这边有私钥卡着(涉及不到服务器的问题),解决中间人攻击的关键,在于让客户端能够辨别当前这个响应(公钥)是不是真的是服务器发送来的,针对公钥是不是服务器的操作安全产生了“证书”(第三方的公证机构)相当于是身份认证
服务器创建不是说创建一个公网服务器就创建的,需要去专门的认证机构,申请证书(提供一些资质)像身份证一样,说明你是一个合法公民,审核通过,就会给你颁发证书,服务器生成的公钥,也就包含在这个证书中。
客户端向服务器请求公钥 :此时请求的不仅仅是一个公钥,而是请求整个证书
客户端拿到证书之后,就可以对证书进行校验(验证一下,证书是不是假的,是不是被篡改过)
如果发现证书是无效,浏览器就会直接弹框警告(有些小网站会有这样提示,只要你别手点继续访问)
证书请求的基本流程:
客户端拿到证书以后就可以会证书进行校验,证书上面会有一个特定的字段,叫做证书的签名
这个签名可以比喻做:你在学校以前写请假条的时候,班主任亲笔拿给门卫才会放你出校,因为门卫会认识学校各个班主任老师的亲笔签名(好使)
证书:
(1) 客户端可以使用认证机构提供的公钥 进行解密,解密之后得到的结果相当于是一个hash值,这个hash值类似于tcp udp里校验和根据证书的其他字段,综合计算出来的结果
(2)客户端就可以使用同样的hash算法,针对其他字段再算一次hash值,得到hash2,看看hash(从签名中解出来的)和hash2(客户端自己算的)这两值相同,说明证书正确有效(没有被偷偷更改过)
为什么说这样可以做到安全??
试问:黑客能否把证书给篡改???将公钥替换???
<1>一旦替换了公钥,就意味着客户端算的hash2和签名解密出来的hash就对不上了,客户端就知道此证书是无效的,自然就会报出警告
<2>黑客是不知道认证机构的 私钥,即使黑客自己算好了新的篡改后的hash值,也无法加密成签名
此处公钥和签名就构成绑定关系有一个修改不了(伪装不了)就不能获得对称加密的密钥(解决了中间人的问题)