您的位置:澳门402永利com > 前端技术 > 一时比

一时比

发布时间:2019-09-23 20:45编辑:前端技术浏览(150)

    为什么 HTTP 有时候比 HTTPS 好?

    2015/05/15 · HTML5 · 3 评论 · HTTP, HTTPS

    原文出处: stormpath   译文出处:开源中国社区   

    做为一家安全公司,我们在站点Stormpath上经常被开发者问到的是有关安全方面最优做法的问题。其中一个被经常问到的问题是:

    我是否应当在站点上运行HTTPS?

    很不幸,查遍整个因特网,你大多数情况下会得到同样的建议:加密所有的东西!对所有站点进行SSL加密等等!然而,现实情况表明这通常不是一个好的建议。

    许多情况下使用HTTP比使用HTTPS要好很多。事实上,HTTP是一个在性能上和可用性上比HTTPS更好的一种协议,这也就是我们经常推荐客户使用HTTP的原因。下面我们说一说我们的理由……

    使用 HTTPS 会出现的问题

    HTTPS 是一个错漏百出的协议. 此协议及其现今流行的实现中许许多多众所周知的问题使得它不适用于许多各种各样的web服务。

    HTTPS 十分缓慢

    图片 1

    应用 HTTPS 的主要阻碍之一就是 HTTPS 协议十分缓慢的这一事实。

    就其特性而言,HTTPS 就是在两端之间进行安全的加密通信。这需要两端都持续耗费宝贵的CPU时间周期:

    ●一开始说“hello”就决定使用哪种类型的加密方式 (暗号方案套件)

    ●验证SSL证书

    ●为每一个请求的验证以及对请求/回应的验证核实,运行加密代码

    而这听起来不是特别形象,其实就是加密代码运行的是CPU密集型的操作。它会重度使用浮点运算的CPU寄存器,会征用你的CPU从而使得请求的处理变慢。

    这里有一个内容十分丰富的 ServerFault 线程,展示了在使用代用 Apache2 的一个 Ubuntu 服务器时,相比之下的处理速度你所能预计会有多大的降低:

    如下是结果:

    图片 2

    即使是像上面所展示的一个非常简单的示例,HTTPS也能将你的Web服务器的速度拖慢超过40倍! 这可拖了web性能很大的后腿.

    在今天的环境中, 将你的应用程序作为 REST API 的一个组成部分来构建是很普遍的 — 使用 HTTPS 确实是会拖慢你的网站、影响你的应用程序性能并给你的服务器CPU带来不必要的冲击的一种方式,而且通常会惹恼你的用户。

    对于许多对速度敏感的应用程序而言,使用原始的 HTTP 常常要好很多。

    HTTPS 不是一个放之四海而皆准的安全保障

    图片 3

    许多人都会抱有 HTTPS 会让他们的站点更安全,这样一种印象。这其实不是真的。

    HTTPS 只是对你和服务器之间的流量进行了加密 — 一旦HTTPS信息的传输中断了,一切就又都是一场公平的游戏。

    这意味着如果你的计算机已经感染的了恶意软件,或者你已经被受到欺骗运行了某些恶意软件 — 这个世界上所有的HTTPS对于你而言也都无能为力了。

    此外,如果 HTTPS 服务器上存在任何的漏洞,某些攻击者就能够简单的等到 HTTPS 已经处理结束,然后再在其它的层(例如 web 服务这一层)抓取到不管什么数据。

    SSL 证书本身也经常被滥用。比如,其在浏览器上的处理方式就很容易发生错误:

    ●每种浏览器(Mozilla,google 等)都是独立审计并核准根证书提供商来保证他们安全地处理SSL证书

    ●一旦核准通过,这些根 SSL 证书就会被添加到浏览器的可信证书列表,这意味任何由根证书提供商签名的证书都是默认可信的。

    ●这些提供商因此可随意乱搞,导致各类安全问题频发,比如2011年发生的 DigiNostar 事件。

    以上种种,著名证书授权机构错误地签名了大量的伪造和欺诈的证书,直接损害数以万计的Mozilla用户的安全。

    而 HTTP 并没有提供任何形式的加密服务,至少你知道你正在处理什么东西。

    HTTPS流量很容易被监听

    如果你正在构建一个需要被不安全的设备(比如移动 app)使用的 web 服务,你可能觉得因为你的服务运行于 HTTPS 上,通信就不会被监听了。

    如果真这么想的话,你就错了。

    其他人可以轻松地在电脑上设置代理来截获并查看HTTPS流量,也就越过了SSL证书检查,这就直接泄漏了你的私人信息。

    这篇博文就演示了移动设备上的 https 消息监听。

    你觉得没多大事?别做梦了!就连Uber这种大公司的移动应用都被逆向了,它们也用了 HTTPS。如果你灰心了,我劝你还是别看这篇文章了。

    好了,接受现实吧,不管你怎么做,攻击者都能用这样或那样的方法来监听你的网络流量。与其把时间浪费在修复 SSL 的问题上,还不如花点时间想想如何明智地使用 HTTP 吧。

    HTTPS 有漏洞

    大家都知道 HTTPS 并不是铁板一块。多年来 HTTPS 被曝出了不少漏洞:

    ●POODLE (pdf)

    ●BEAST

    ●CRIME

    ●Heartbleed

    ●…

    以后的攻击会越来越多。再加上 NSA 为了解密,正不遗余力地收集着 SSL 流量——使用 HTTPS 似乎一点用处都没有,因为不定什么时候你的 HTTPS 流量就会被一览无余。

    HTTPS 太贵

    最后要说的一点是 HTTPS 太贵了。你需要从根证书颁发机构购买浏览器和客户端能够识别的 SSL 证书。

    这可不便宜啊。

    SSL证书年费从几美刀到几千不等——如果你正在构建基于多个微服务(multiple microservices)的分布式应用,你需要买的证书可不只一个。

    对于小项目或预算紧张的人来说成本一下子就抬高了不少。

    为什么 HTTP 是一个不错的选择

    在另一方面,让我们稍稍不那么消极片刻,而是专注于积极的东西 : 是什么使得HTTP很棒的。大多数开发者并不欣赏它的好处。

    正确条件下的安全

    当然HTTP本身没有提供任何安全性,通过正确的设置你的基础设施和网络,你可以避免几乎所有的安全问题。

    首先,对于所有的你可能会用到的内部HTTP服务, 要确保你的网络是私有的,不能从公共的外部环境嗅探到数据包. 这意味着你将可能徐昂要将你的HTTP服务部署在一个像Amazon EC2这样的非常安全的网络里面.

    通过在 EC2 部署公共的云服务器,就能保证你拥有一流的网络安全, 防止任何其他的AWS用户嗅探到你的网络流量.

    使用 HTTP 的不安全性来扩展

    人们过多的关注于 HTTP 缺乏安全和加密特点的时候,许多人没有想到的是,这种协议可以提供很好的扩展性。

    大部分现代的Web应用程序通过队列来扩展。

    你有一个Web服务器接受请求,然后用处在相同网络上的服务器集群运行单独的jobs来处理更多的CPU和内存密集型任务。

    为了处理任务的排队,人们通常使用一个诸如 RabbitMQ or Redis 这样的系统。两个都是不错的选择,但是否可以除了你的网络外不使用任何基础设施组件而获得任务队列的好处呢?

    使用HTTP,你可以!

    它是这样工作的:

    ●建立Web服务器和所有处理服务器共享子网的一个网络。

    ●让你的处理服务器侦听网络上的所有数据包,和被动嗅探网络流量。

    ●当Web服务器收到HTTP流量,那些处理服务器可以简单地读取进来的请求(纯文本,因为HTTP不加密),并立即开始处理工作!

    上述系统的工作原理就像一个分布式队列,快速,高效,简单。

    使用 HTTPS,上述情况是不可能的,但是,通过使用 HTTP,可以大大加快您的应用程序同时去除(不必要的)基础设施–这是一个大的胜利。

    不安全和自负

    最后一个我建议使用HTTP而不是HTTPS的原因:不安全。

    是的,HTTP 没有给你的用户提供安全,但是,安全真的有必要吗?

    不仅大部分 ISP 监控网络通信,过去数年的很长一段时间里,很明显的是政府已经存储并解密了大量网络通信。

    使用 HTTPS 的顾虑正好比将一个挂锁来放在一尺高的篱笆上,大致来说,你不可能保证应用的安全。所以,何必这么麻烦呢?

    开发仅依靠 HTTP 的服务,这并没有给你的用户一种安全的错觉,或者欺骗用户认为自身很安全。事实上,他们很有可能认为是不安全的,

    开发基于 HTTP 的程序,你的生活将得到简化,并增强和你用户的透明。

    考虑一下吧。

    在逗你玩呢 !! >:)

    愚人节快乐哦 !

    我喜欢你不会真的任务我会建议你不去使用HTTPs ! 我想要非常明确的告诉你 : 如果你要构建任何什么类型的web应用, 要使用 HTTPS 哦!

    你要构建什么类型的应用程序或者服务并不重要,而如果它没有用到HTTPS,你就做错了.

    现在,让我们来聊聊HTTPS为什么很棒.

    HTTPS 是安全的

    图片 4

    HTTPS 是一个业绩优良的很棒的协议. 虽然这些年来有过几次针对其漏洞的利用事件发生, 但它们一直都是相对较为轻微的问题,而且也很快被修复了.

    而诚然,NSA确实在某个阴暗的角落收集着SSL流量, 但他们能够解密即使是很少量SSL流量的可能性都是极小的 — 这会需要快速的,功能齐全的量子计算机,并耗费数量惊人的钞票. 这玩意存在的可能性貌似不存在,因此你可以高枕无忧了,因为你知道你的站点上的SSL确实在为你的用户数据传输保驾护航.

    HTTPS 速度是快的

    上面我曾提到HTTPS“遭罪似的慢” , 但事实则几乎完全相反.

    HTTPS 确实需要更多的CPU来中断 SSL 连接 — 这需要的处理能力对于现代计算机而言是小菜一碟了. 你会遇到SSL性能瓶颈的可能性完全为0.

    目前你更有可能在你的应用程序或者web服务器性能上遇到瓶颈.

    HTTPS 是一个重要的保障

    虽然 HTTPS 并不放之四海而皆准的web安全方案,但是没有它你就不能以策万全.

    所有的web安全都倚赖你拥有了 HTTPS. 如果你没有它, 那么不管你对你的密码做了多强的哈希加密,或者做了多少数据加密,攻击者都可以简单的模拟一个客户端的网络连接,读取它们的安全凭证——然后轰的一声——你的安全小把戏结束了.

    因此 — 虽然你不能有赖于HTTPS解决所有的安全问题,你绝对100%需要将其应用于你构建的所有服务上 — 否则完全没有任何办法保证你的应用程序的安全.

    此外,虽然证书签名很显然不是一个完美的实践,但每一种浏览器厂商针对认证机构都有相当严格和严谨的规则. 要成为一个受到信任的认证机构是非常难的,而且要保持自己良好的信誉也同样是困难的.

    Mozilla (以及其其他厂商) 在将不良根认证机构踢出局这项工作方面表现相当出色,而且一般也真正是互联网安全的好管家.

    HTTPS 流量拦截是可以避免的

    先前我提到过,可以很容易的通过创建属于你自己的SSL证书、信任它们,从而在SSL通讯的中途拦截到流量.

    虽然这绝对有可能,但也很容易可以通过 SSL 证书钢钉 来避免 .

    本质上讲,依照上面链接的文章中给出的准则, 你可以是的你的客户只去信任真正可用的SSL证书,有效的阻挡所有类型的SSL MITM攻击,甚至在它们开始之前 =)

    如果你是要把SSL服务部署到一个不受信任的位置(像是一个移动或者桌面应用), 你最应该考虑使用SSL证书钢钉.

    HTTPS(再也)不贵了

    虽然历史上HTTPS曾经昂贵过,而这是事实 — 但再也不是这样了. 如今你能够从许许多多的web主机那里买到非常便宜的SSL证书.

    此外, EFF (电子前沿基金会) 正要推出一个完全免费的 SSL 证书提供机构:

    它会在 2015 推出, 并必然将改变所有web开发者的游戏规则. 一旦让加密的方案上线,你就能够对你的网站和服务进行100%的加密,完全没有任何花费.

    请一定要访问他们的网站,并订阅更新哦!

    HTTP 在私有网络上并不是安全的

    早些时候,我谈到HTTP的安全性怎么是不重要的,特别是如果你的网络被锁上(这里的意思是切断了同公共网络的联系) — 我是在骗你。

    而网络安全是重要的,传输的加密也是!

    如果一个攻击者获得了对你的任何内部服务的访问权限,所有的HTTP流量都将会被拦截和解读, 不管你的网络可能会有多“安全”. 这很不妙哦。

    这就是为什么 HTTPS 不管是在公共网络还是私有网络都极其重要的原因。

    额外的信息: 如果你是吧服务部署在AWS上面,就不要想让你的网络流量是私有的了! AWS 网络就是公共的,这意味着其它的AWS用户都潜在的能够嗅探到你的网络流量 — 要非常小心了。

    我早些时候有提到,HTTP可以用来代替队列,是的,我没说错,但这是一个很可怕的主意!

    由于安全原因,放大服务的规模,是一个很可怕的,糟糕的注意。请不要这么做。

    (除非这是一个概念证据,只为了造一个很酷的演示产品而已)

    总结

    如果你正在做网页服务,毫无疑问,你应该使用HTTPS。

    它很容易、廉价,且能获得用户信任,没有理由不用它。作为码农,我们必须要承担起保护用户的重任,要做到那点,方法之一就是强制使用HTTPS、

    希望你喜欢这篇文章,供君一乐。

    赞 1 收藏 3 评论

    图片 5

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

      为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL(Secure Sockets layer)协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。SSL目前的版本是3.0,TLS(Transport Layer Security)1.0是对SSL3.0版本的升级。实际上我们现在的HTTPS都是用的TLS协议(你可以看一下你浏览器https协议),但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。目前TLS的版本是1.2,定义在RFC5246中,暂时还没有被广泛的使用。

     

    一、HTTP和HTTPS的基本概念

      HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和响应的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

      HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

      HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

    Http协议 Https协议
    Http Http
    TCP SSL
    IP TCP
      IP

     

    二、HTTP与HTTPS有什么区别?

      HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

      HTTPS和HTTP的区别主要如下:

      1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

      2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

      3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

      4、http的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    三、HTTPS的工作原理

      我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。

    图片 6

     

     

    1.客户端发起一个https的请求( Suite(密钥算法套件,简称Cipher)发送给服务端。

     

    2.服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法

       以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。

     

    3.客户端收到服务端响应后会做以下几件事

        3.1 验证证书的合法性    

        颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等

            证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不一样 不做讨论)

        3.2 生成随机密码

            如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密。       

        3.3 HASH握手信息

           用最开始约定好的HASH方式,把握手消息取HASH值, 然后用 随机数加密 “握手消息+握手消息HASH值(签名)”  并一起发送给服务端

           在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。

     

    4.服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。

        然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端

     

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

         因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全

      

    非对称加密算法:RSA,DSA/DSS     在客户端与服务端相互验证的过程中用的是非对称加密 
    对称加密算法:AES,RC4,3DES     客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
    HASH算法:MD5,SHA1,SHA256      在确认握手消息没有被篡改时 

     

     

    四、HTTPS要比HTTP多用多少服务器资源?

      HTTPS其实就是建构在SSL/TLS之上的 HTTP协议,所以,要比较HTTPS比HTTP多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源。

      HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。

      HTTP建立连接,按照下面链接中针对Computer Science House的测试,是114毫秒;HTTPS建立连接,耗费436毫秒,ssl部分花费322毫秒,包括网络延时和ssl本身加解密的开销(服务器根据客户端的信息确定是否需要生成新的主密钥;服务器回复该主密钥,并返回给客户端一个用主密钥认证的信息;服务器向客户端请求数字签名和公开密钥)。

      当SSL连接建立后,之后的加密方式就变成了3DES等对于CPU负荷较轻的对称加密方式,相对前面SSL建立连接时的非对称加密方式,对称加密方式对CPU的负荷基本可以忽略不记,所以问题就来了,如果频繁的重建ssl的session,对于服务器性能的影响将会是致命的,尽管打开HTTPS保活可以缓解单个连接的性能问题,但是对于并发访问用户数极多的大型网站,基于负荷分担的独立的SSL termination proxy就显得必不可少了,Web服务放在SSL termination proxy之后,SSL termination proxy既可以是基于硬件的,譬如F5;也可以是基于软件的,譬如维基百科用到的就是Nginx。

      那采用HTTPS后,到底会多用多少服务器资源,2010年1月Gmail切换到完全使用HTTPS, 前端处理SSL机器的CPU负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%,由于Gmail应该是使用N台服务器分布式处理,所以CPU负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义,这篇文章中还列出了单核每秒大概处理1500次握手(针对1024-bit 的 RSA),这个数据很有参考意义。

    四、HTTPS的优点

      尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

      (1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

      (2)HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

      (3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

      (4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

    五、HTTPS的缺点

      虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

      (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

      (2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

      (3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

       (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

      (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,

         特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

     

    参考博客:

     

    HTTPS 原理解析

     

    HTTP与HTTPS的区别

    HTTP与HTTPS的区别

     

    本文由澳门402永利com发布于前端技术,转载请注明出处:一时比

    关键词:

上一篇:Web质量优化

下一篇:没有了