一些教程常常提到 POST 比 GET提交数据更安全,真正从安全的角度来讲,只要是 Http 请求,都不安全 。(补充 @王泥煤 的回复 post的确比get更安全,这一点与https无关。由于用get方式传密码会被日志系统记录下明文,或者被第三方的referer带出去,即使你采用了https)php
问题来了,什么是安全?前端
数据传输的安全其实体如今如下几个方面:面试
我发的数据,不应看的人看不懂算法
我发的数据,不应看的人不能伪造或者修改(修改后接收方可察觉)浏览器
我发的数据,过时以后不应看的人不能偷偷拿过来继续用安全
Https 怎样保证数据传输安全?再讲讲 Https的原理以前必须先聊一聊数据加密,目前有如下几种加密方式:服务器
理解了加密方式后咱们就能利用这些算法实现安全数据传输。以一个故事开始:网络
班里来了个新同窗小美,长的特别漂亮,小谷暗恋小美好久,终于有一天小谷鼓起勇气向小美表白。小谷写了个纸条:“我是小谷,我喜欢你,你喜欢我吗?” ,让小王转交给小美。app
正常状况下,小王会把纸条转给小美,小美看到后很开心,回复了纸条:“我是小美,我也喜欢你”,让小王再转递给小谷。post
但是小王也暗恋小美,固然不肯甘作嫁衣。这个时候小王能够有几方法来捣乱:
小谷很聪明,早就看出来小王心怀不轨,但是没办法,要传信必然要通过小王,要怪就怪本身太腼腆不敢下课直接亲手送上。怎么办呢?
有一种办法是把纸条的信息加密(AES 加密),小王就不知道纸条内容了。但是问题来了,小美也不知道密钥,她收到信后也没法解密啊。却是能够把密钥放到纸条里,可这样小王也获得了密钥等于白忙活一场。
再说说小美,小美很漂亮,在之前的学校被称为数学女神,转学到这里后当即被小谷吸引了,她看出来小谷有点喜欢本身但又不十分肯定,她不想主动。她猜到小谷会在上课的时候可能用写纸条的方式表白,也猜到猥琐的小王会在中间捣乱。如何让小谷能顺利向本身表白呢?小美在疯狂的思考:
方案一: 我能够生成一对公钥和私钥,把公钥公开给班里全部的同窗。这样小谷就能获得公钥,把要发的信息用公钥加密,只有我本身能用私钥解密。但是我如何把个人回复发出去呢?若是用个人私钥加密,小谷却是能用公钥解密,但班里任何同窗都能解密,被其余同窗看到就糗大了。并且若是小谷纸条的内容太多,他用公钥加密须要花一整节课的时间,不能耽误他学习
方案二:我能够生成一对公钥和私钥,把公钥公开给班里全部的同窗,这样小谷就能获得公钥。若是小谷够聪明的话,他获得公钥后会生成一个对称加密AES的密钥,而后用个人公钥把 AES 密钥加密(AES 密钥长度很短加密几乎不须要时间),而后把加密后的密钥发给我。我收到后用个人私钥解密,获得小谷和我约定的对对称加密密钥,而后咱们用这个只有咱们俩知道的对称密钥加密数据进行交流。
下课休息的时候,小美给班里的同窗说:“快数学考试了,个人数学很好,考场上须要要我帮忙的同窗能够找我,我公布一下个人公钥,为了安全起见你们用个人公钥加密消息。”
一切貌似完美无缺,但是小美在班里公布本身公钥的时候小谷正好拉肚子去了厕所,回来以后才知道这事,小谷因而问旁边的同窗小花小美公钥是多少。小花之前是班里受欢迎的女生被不少男生仰慕,在小美来以后当即被夺了风头,一直怀恨在心。因而小花告诉了小谷一个假公钥,实际上是本身生成的公钥。这样万一小谷找小美要小抄,本身能够冒充小美给一个错答案。
一切被小美看到眼里,这样不行啊, 别到时候本身和小谷的好事没成,反而同窗考试被陷害栽赃到本身头上。怎么办呢?对了,班长是班里人品很正的人,能够用班长给本身作信用背书,正好前两天班长在班里通知了本身的公钥。 因而小美找到班长,作了一个证书,证书上有本身的名字、学号、公钥、公证人班长的名字,同时把这些信息经过 Hash (sha256)处理后请求班长用本身的私钥进行加密(为何用 Hash 处理?由于东西太多非对称加密很费时),也放到证书上。因而小美再次把证书通报给班里全部的同窗。
小谷此次获得了证书,发现上面的公证人是班长,因而先用班长的公钥对证书上被班长私钥加密后的字段进行解密,获得元素数据的 Hash。 再对元素数据进行 Hash和刚刚解密的 Hash 进行比对。若是比对成功表示证书上的信息无误,且是由班长担保的。这时候小谷确信证书上的公钥就是小美的。任何人由于没有班长的私钥都没法伪造证书。
你觉得故事就这么圆满结束了吗?其实没有,班长前两天在公布本身的证书的时候小谷正好生病请假了。 他根本不知道班长的公钥是否是他本人的。
这个时候他发现班长的证书上有班主任的担保(班主任的公钥作了签名),班主任的证书上有校长的担保,而小谷是有校长的的公钥的,就印在学生证上。
终于,小谷收获了女神的芳心。
故事完了。故事中 小谷是浏览器,小美是服务器,小花和小王是坏蛋,班长是 CA 机构,班主任是上级 CA,校长是根 CA 服务器。当一个网站要使用 https 时先需在一些国际认证的 CA 机构填写网站信息申请证书,而这些 CA机构每每还有上层 CA,最终有一个根 CA。通常来讲浏览器都会内置根 CA 和一些顶级 CA 的证书,但须要验证的时候会经过 CA 链逐级验证。
本文是若愚老师辛苦创造,写篇文章容易,讲个好故事不容易,喜欢的点个赞,须要转载的须要完整保留本文所有信息包括广告~
最近个人文章更新会比较频繁,没办法,由于个人直播班又要开了,酒香也怕巷子深啊,不打点广告不行
有人会说,BAT 出来作培训的不少,你有什么 NB 的
个人 NB 之处在于你以为本身须要花一周才能学会的东西,我可让你一小时搞定,你以为本身花三个月才能勉强掌握的东西,我可让你一周完全搞定。能够看看我写过的文章,以及我讲的视频
想转行前端拿到8~18k 的 offer?找 饥人谷
想免费学前端作面试达人?前端3小时速成指南 - 写代码啦!