为什么 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

[TOC]

不知道大家有没有注意到输入网址时的HTTP部分,在打开网站进行操作时有时候会自动跳转为HTTPS格式,这是为什么?HTTP与HTTPS到底有什么区别?如何将HTTP转化成HTTPS,针对这些问题,我们做了一个整理。

http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

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


图片 6

https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

  为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

一、HTTP协议

关于HTTP协议的介绍,可以参考文章:HTTP 协议入门 –
阮一峰的网络日志

1.什么是HTTP与HTTPS?

 HTTPS和HTTP的区别主要如下:

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

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

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

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

SSL(Secure Sockets Layer)安全套接层

TLS(Transport Layer Security)传输层安全

TLS和SSL在传输层对网络连接进行加密

SSL协议位于TCP/IP和各种应用层协议之间,基于TCP之上。

HTTP/1.1和HTTP/1.0的区别

  1. 新增方法 PUTPATCHHEADOPTIONSDELETE
  2. 请求头新增Host字段
    用来指定服务器的域名,有个该字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。请求消息中如果没有Host头域会报告一个错误(400
    Bad Request)。
  3. 持久连接
    HTTP1.1默认使用长连接。即TCP连接默认不关闭,可以被多个请求复用,不像HTTP1.0需要声明Connection: keep-alive。当连接一段时间未使用时,则自动关闭。
  4. 管道机制
    HTTP1.1引入管道机制(pipelining)。即在同一个TCP连接里面,客户端可以同时发送多个请求,不过服务器还是按照顺序,先响应A请求,完成后再响应B请求。以前是在同一个TCP连接中,先发送A请求,等服务做出响应后,再发送B请求。(如果A需要处理很长时间,则会阻塞,HTTP/2
    能解决这个问题)
  5. 响应头新增Content-Length字段
    由于一个TCP连接可以传送多个响应,所以需要该字段来声明本次响应的数据长度来区分数据包是属于哪一个响应的。
  6. 支持分块传输编码
  7. 缓存处理
    在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity
    tag,If-Unmodified-Since, If-Match,
    If-None-Match等更多可供选择的缓存头来控制缓存策略。
  8. 带宽优化及网络连接的使用
    HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial
    Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  9. 错误通知的管理
    在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

大家在输入网址的时候最常见的其实就是HTTP这种格式的。HTTP是互联网上应用最广的一种网络协议、一种标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,就是减少网络传输,使浏览器更高效。

HTTP/2和HTTP/1.1的区别

  1. 二进制协议
    HTTP/1.1的头信息是文本格式,数据体可以是文本,也可以是二进制。HTTP/2的头信息和数据体均为二进制,并且统称为“帧(frame)“:头信息帧和数据帧。
  2. 头信息压缩
    HTTP是无状态协议,每次请求都要带上头信息,请求的很多字段都是重复的,会浪费很多带宽。HTTP/2
    对这一点做了优化,引入了头信息压缩机制(header
    compression)。一方面,头信息使用gzipcompress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
  3. 多路复用
    即在一个连接里,客户端可以同时发送多个请求,服务器可以同时发送多个响应,而且不用按照顺序一一对应,这样就避免了“队头阻塞”。举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分,
    接着回应B请求,完成后,再发送A请求剩下的部分。

图片 7

多路复用

  1. 数据流 HTTP/2
    将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。
    数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2
    可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。
    客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。
  2. 服务器推送
    常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了。

HTTPS则相当于安全版的HTTP,HTTP协议以明文方式发送内容,不提供数据加密,如果攻击者截取服务器与浏览器之间的传输报文,就可以直接读懂其中的信息。而HTTPS相当于在明文本上加上SSL层,独特的加密方式,唯一的秘钥,以此确保其信息的安全性。

二、HTTPS协议

图片 8

HTTPS协议简介

HTTPS是网景在1994年创建,并应用在网景导航者浏览器中。
最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时,最新的HTTPS也由在2000年五月公布的RFC
2818正式确定下来。

2.两者有什么区别?

HTTP和HTTPS对比

  1. HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
  2. HTTPS协议需要到CA申请证书。
  3. HTTP默认使用80端口,HTTPS默认使用443端口。
  4. HTTPS用户访问速度较慢、服务端资源压力较大(因为要进行大量的密钥算法计算,消耗CPU、内存)。因此使用HTTPS的话,需要做好足够的优化。

HTTPS和HTTP有什么区别?如上所说,HTTP传输的数据未加密,因此不适合传输一些敏感信息,例如信用卡好、密码等支付信息。SSL协议正是为了保证这些隐私数据的传输安全,可以说HTTPS是SSL+HTTP协议构成的加密传输、身份认证的网络协议。主要区别:1)HTTP是明文传输,HTTPS是安全性的SSL加密传输协议;2)HTTPS需要到ca申请证书;3)HTTP与HTTPS的连接方式不一样,使用端口也不一样;

参考文献

HTTP 协议入门 –
阮一峰的网络日志
HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

如有描述不当之处,欢迎指出与补充,谢谢!

3.HTTPS是否会影响传输速度以及网站收录?

用户最担心的就是会影响传输速度与网站收录的问题。

目前百度只收录HTTP,谷歌方面则是收录同时收录两个不同版本的页面,因此,HTTPS完全不会影响谷歌的收录与排名,但是百度方面需要衡量。市场方面需要明确其权重,是否安全性要高过其百度收录需求。

因为增加了加密过程,HTTPS协议握手阶段确实比较费时,会使页面的加载时间延长大约50%左右。

4.如何做SSL认证,将网站切换成HTTPS?

图片 9

互联网交易的安全性一直是大家关注的问题,耐思尼克提供的SSL认证是基于全球性认证机构comodo,目前市场上99%的浏览器都承认科摩多和它的根证书,首屈一指的证书认证机构,确保客户数以万计的交易都是安全的。

获得证书后,可以很清楚的看到,根据不同的浏览器,一个钥匙图标变成整个或者一个挂锁关闭的样子,这表明会话是安全的:

图片 10

所有的通讯都会被加密并且只有会话双方才能解密。它只花费几秒钟的时间并且用户不用做任何事情。

HTTPS和HTTP有什么区别:http://www.iisp.com/ztview/F\_zzj108.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图