HTTP是明文传输的,如果想密文传输就需要HTTPS(HTTP+SSL),三次握手之后再建立SSL连接。

那么HTTPS是怎么防止劫持的?

在HTTP请求时,常见的劫持有DNS劫持和传输内容被劫持,我们从这两个劫持来看看HTTPS是怎么解决的。

怎么防止DNS劫持

什么是DNS劫持?
比如用户想访问知乎,在浏览器输入如下域名https:// www.zhihu.com要打开这个网站,首先要解析域名www.zhihu.com,结果这个域名被黑客劫持到他的私人服务器1.2.3.4,结果用户的浏览器和黑客的私人服务器1.2.3.4建立SSL连接,黑客的服务器1.2.3.4再和www.zhihu.com建立SSL连接,用户收发的数据都通过黑客的服务器1.2.3.4中转,也就是黑客的服务器1.2.3.4相当于一个https代理服务器,结果用户收发的所有数据,黑客都能看到。

使用HTTPS时能被这样劫持吗?
首先如果黑客要跟用户的浏览器建立SSL连接,那么黑客需要有一个CA证书,而通常系统内置根证书都是大型机构的根证书,几乎无法伪造。如果黑客要假冒其他机构颁发证书,因为没有颁发机构的秘钥,那么这个证书的指纹一定没办法对上,浏览器都会提示证书不安全。
如果非要黑客做一个只能是自签名证书,并且用户自己主动导入该证书。记住,不要随便安装受信任证书,否则HTTPS也帮不了你。

还有人就说了,我可以让用户回落到HTTP协议啊,中间人用HTTPS跟服务器通信,然后用HTTP跟客户端通信——要知道大部分用户在地址栏输入URL时,并没有指定协议的习惯,都是打www开头而不是打https://www开头,能用HTTPS全是Web+Server上80端口301+Location到HTTPS的功劳。
看起来似乎中间人充当了一个替换页面里HTTPS资源到HTTP的反向代理,好像可行性还是很高。
但是只要利用HSTS(HTTP+Strict+Transport+Security,RFC6797)就可以解决这个问题。通过在HTTP+Header中加入Strict-Transport-Security的声明,告诉浏览器在一定时间内必须通过HTTPS协议访问本域名下的资源。
这种情况下,只要用户曾经在安全网络环境下访问过一次某站,中间人在指定时间内也无法让其回落到HTTP。

怎么防止传输内容被劫持

使用HTTPS时能被这样劫持吗?
黑客作为一个中间人,首先没有服务器私钥,所以不能解密客户端发送的内容;其次黑客也没有客户端自己生成的随机密钥串,所以也不能解密客户端发过去的内容的。

总结

1.CA证书保证了公钥的可靠性。
2.服务端私钥+公钥的非对称加解密保证了客户端生成的随机数传输安全,不会被中间人拦截获取。But,非对称加密对服务端开销大。
3.所以利用随机数的对称加密保证后续通讯的安全性,也可以降低服务器的解密开销。
4.HTTPS只针对传输内容进行加密,保证的是客户端和网站之间的信息就算被拦截也无法破解。如果不是全站HTTPS,仅仅只是在登录页采用HTTPS,那些HTTP连接的页面同样是危险的,从HTTP->HTTPS跳转依然可能被劫持。

SSL握手大概流程

1.浏览器将自己支持的一套加密规则发送给网站。
2.网站部署了一组SSL秘钥,分私钥和秘钥。
3.网站从浏览器的加密规则中选出一组加密算法与HASH算法,并将自己的身份信息(公钥)以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
4.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密。这个加密过程是非对称加密,即公钥加密,私钥解密。私钥只在网站服务器上存储,其他人无法获得这个私钥,也就无法解密。可理解为公钥是锁,私钥是钥匙,客户端将随机数用公钥锁上,经过网络传输到服务器,整个过程就算有人拦截了信息,由于没有私钥解锁,也就无法解密。
过程如下图:
CA证书校验

5.将生成的所有信息发送给网站。

6.网站接收浏览器发来的数据之后,使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

7.使用密码加密一段握手消息,发送给浏览器。

8.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。

备注:非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。

HTTPS是怎么防止劫持的相关推荐

  1. HTTPS 能否避免流量劫持?

    近日,看了一篇关于流量劫持的文章<安全科普:流量劫持能有多大危害?>,作者EtherDream以图文并茂的形式详细讲解了流量劫持及相关知识."在如今这个讲究跨平台.体验好,并有云 ...

  2. HTTPS能否避免流量劫持?

    流量劫持会带来什么危害?不同的劫持方式,获得的流量也有所差异.DNS劫持,只能截获通过域名发起的流量,直接使用IP地址的通信则不受影响:CDN入侵,只有浏览网页或下载时才有风险,其他场合则毫无问题:而 ...

  3. HTTPS如何防止流量劫持?一篇文章让你了解什么是流量劫持

    流量劫持总体来说属于中间人攻击(Man-in-the-Middle Attack,MITM)的一种,本质上攻击者在通信两端之间对通信内容进行嗅探和篡改,以达到插入数据和获取关键信息的目的. 能够实施流 ...

  4. 如何使用HTTPS防止dns劫持、https如何防止dns劫持

    前不久小米等六家互联网公司发表联合声明,呼吁运营商打击流量劫持.流量劫持最直观的表现,就是网页上被插入了一些乱七八糟的广告/弹窗之类的内容.比如这样: 网页右下角被插入了游戏的广告. 流量劫持总体来说 ...

  5. 百度升级烽火算法2.0,建议网站https改造打击网站劫持

    近日,百度搜索官方发表公告称:为了保证搜索的公正性以及搜索用户的搜索安全,最近百度将对烽火算法2.0进行升级.主要针对的是网站安全性差.劫持问题频繁出现.以及主动设置跳转造成劫持效果的网站,这一次升级 ...

  6. https怎么防止流量劫持

    相信很多人都遇见过域名没输错,结果却跑到了一个钓鱼网站上这样的情况,用户数据泄露.流量劫持.页面篡改等安全事件频发. iis7网站监控 网站打开速度查询.DNS污染.地区电信劫持等问题检测. 全站HT ...

  7. http劫持什么意思、网站升级HTTPS彻底解决http劫持问题

    在用户的客户端与其要访问的服务器经过网络协议协调后,二者之间建立了一条专用的数据通道,用户端程序在系统中开放指定网络端口用于接收数据报文,服务器端将全部数据按指定网络协议规则进行分解打包,形成连续数据 ...

  8. DNS劫持、流量劫持,HTTP/HTTPS劫持

    DNS劫持:DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问 ...

  9. DNS劫持,HTTP劫持、HTTPS劫持【流量劫持】

    1 流量劫持 先说劫持,再说劫持的种类 流量劫持: 早已见怪不怪的电信运营商的劫持,频繁的广告页弹出,大家只要能忍受得了,那就没什么危害,各大运营商毕竟是活在我党的英明领导下的,太过分的事情,它们也是 ...

最新文章

  1. Mysql ID重新排列
  2. python中文乱码 def decode-python处理一些乱码的中文文本时decode('utf-8')报错的处理...
  3. 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十三周学习总结
  4. Ant design pro引入Echarts报错:TypeError: Cannot read property 'x_data' of undefined
  5. hdu2846(字典树)
  6. 2018年个人的一些简单预测
  7. 使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(概念篇)
  8. 制作一个简单HTML传统端午节日网页(HTML+CSS)
  9. Panoramic Imaging及其应用于场景理解的综述
  10. 1-(2-甲氧基乙基)-3-乙基咪唑三氟甲基磺酸盐{[C22O1IM][TfO]}离子液体
  11. 无线网络为什么经常掉线
  12. 零死角玩转stm32初级篇5-流水灯的前后今生
  13. 常见字读音(粤语)---(2)
  14. python嗅探工具详解附源码(使用socket,带tkinter界面)
  15. android平台从froyo 2.2开始支持jni单步调试了
  16. 转帖--IT圈子里鬼混---谈谈IT行业的收入和一些生存之道!
  17. 软件开发之硬件扫盲篇)固态硬盘需要了解的知识
  18. springboot基于spring的宽带管理系统以及实现毕业设计源码250910
  19. 1个月,10多万点击,不得不信的事实
  20. 博客大巴,自动登录,并发布信息开发小计。

热门文章

  1. Linux平台设备驱动
  2. 网络工程——HCNA网络技术的简单配置
  3. visio移动变得很卡的解决办法
  4. convariate shift(协变量 转变)
  5. Ubuntu安装Elasticsearch集群及Kibana
  6. 8人Python-----day02
  7. likely和unlikely的区别
  8. 会声会影X10视频制作软件中文密钥激活版
  9. Java将project设置为Maven项目,并配置
  10. java ico图标_javaweb中如何给自己的网站更改ico图标