`

HTTPS的七个误解

阅读更多

开发网页的时候,往往需要观察HTTP通信。

我使用的工具主要有两个,在Firefox中是Firebug,在IE中是Fiddler。但是,一直听别人说,付费软件HttpWatch是这方面最好的工具。


                        

前几天,HttpWatch的官方网志刊登了一篇好文章,澄清了一些HTTPS协议容易产生误解的地方。学习之后,我增长了不少网页加密通信的知识。

我觉得这篇文章很实用,值得留作参考,就翻译了出来。

==============================================

HTTPS 的七个误解

译者:阮一峰


                      

误解七:HTTPS无法缓存

许多人以为,出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。

微软的IE项目经理Eric Lawrence写道:

"说来也许令人震惊,只要HTTP头允许这样做,所有版本的IE都缓存HTTPS内容。比如,如果头命令是Cache-Control:max- age=600,那么这个网页就将被IE缓存10分钟。IE的缓存策略,与是否使用HTTPS协议无关。(其他浏览器在这方面的行为不一致,取决于你使用 的版本,所以这里不加以讨论。)"

Firefox默认只在内存中缓存HTTPS。但是,只要头命令中有Cache-Control:Public,缓存就会被写到硬盘上。下面的图片显示,Firefox的硬盘缓存中有HTTPS内容,头命令正是Cache-Control:Public。


                         

误解六:SSL证书很贵

如果你在网上搜一下,就会发现很多便宜的SSL证书,大概10美元一年,这和一个.com域名的年费差不多。而且事实上,还能找到免费的SSL证书。

在效力上,便宜的证书当然会比大机构颁发的证书差一点,但是几乎所有的主流浏览器都接受这些证书。

误解五:HTTPS站点必须有独享的IP地址

由于IPv4将要分配完毕,所以很多人关心这个问题。每个IP地址只能安装一张SSL证书,这是毫无疑问的。但是,如果你使用子域名通配符SSL证 书(wildcard SSL certificate,价格大约是每年125美元),就能在一个IP地址上部署多个HTTPS子域名。比 如,https://www.httpwatch.com和https://store.httpwatch.com,就共享同一个IP地址。


      

另外,UCC(统一通信证书,Unified Communications Certificate)支持一张证书同时匹配多个站点,可以是完全不同的域名。SNI(服务器名称指示,Server Name Indication)允许一个IP地址上多个域名安装多张证书。服务器端,Apache和Nginx支持该技术,IIS不支持;客户端,IE7+、 Firefox 2.0+、Chrome 6+、Safari 2.1+和Opera 8.0+支持。

误解四:转移服务器时要购买新证书

部署SSL证书,需要这样几步:

1. 在你的服务器上,生成一个CSR文件(SSL证书请求文件,SSL Certificate Signing Request)。

2. 使用CSR文件,购买SSL证书。

3. 安装SSL证书。

这些步骤都经过精心设计,保证传输的安全,防止有人截取或非法获得证书。结果就是,你在第二步得到的证书不能用在另一台服务器上。如果你需要这样做,就必须以其他格式输出证书。

比如,IIS的做法是生成一个可以转移的.pfx文件,并加以密码保护。


           

将这个文件传入其他服务器,将可以继续使用原来的SSL证书了。

误解三:HTTPS太慢

使用HTTPS不会使你的网站变得更快(实际上有可能,请看下文),但是有一些技巧可以大大减少额外开销。

首先,只要压缩文本内容,就会降低解码耗用的CPU资源。不过,对于当代CPU来说,这点开销不值一提。

其次,建立HTTPS连接,要求额外的TCP往返,因此会新增一些发送和接收的字节。但是,从下图可以看到,新增的字节是很少的。


            

第一次打开网页的时候,HTTPS协议会比HTTP协议慢一点,这是因为读取和验证SSL证书的时间。下面是一张HTTP网页打开时间的瀑布图。
      

同一张网页使用HTTPS协议之后,打开时间变长了。
    
建立连接的部分,大约慢了10%。但是,一旦有效的HTTPS连接建立起来,再刷新网页,两种协议几乎没有区别。先是HTTP协议的刷新表现:


      

然后是HTTPS协议:
   

某些用户可能发现,HTTPS比HTTP更快一点。这会发生在一些大公司的内部局域网,因为通常情况下,公司的网关会截取并分析所有的网络通信。但 是,当它遇到HTTPS连接时,它就只能直接放行,因为HTTPS无法被解读。正是因为少了这个解读的过程,所以HTTPS变得比较快。

误解二:有了HTTPS,Cookie和查询字符串就安全了

虽然无法直接从HTTPS数据中读取Cookie和查询字符串,但是你仍然需要使它们的值变得难以预测。

比如,曾经有一家英国银行,直接使用顺序排列的数值表示session id:


        

黑客可以先注册一个账户,找到这个cookie,看到这个值的表示方法。然后,改动cookie,从而劫持其他人的session id。至于查询字符串,也可以通过类似方式泄漏。

误解一:只有注册登录页,才需要HTTPS

这种想法很普遍。人们觉得,HTTPS可以保护用户的密码,此外就不需要了。Firefox浏览器新插件Firesheep,证明了这种想法是错的。我们可以看到,在Twitter和Facebook上,劫持其他人的session是非常容易的。

咖啡馆的免费WiFi,就是一个很理想的劫持环境,因为两个原因:

1. 这种WiFi通常不会加密,所以很容易监控所有流量。

2. WiFi通常使用NAT进行外网和内网的地址转换,所有内网客户端都共享一个外网地址。这意味着,被劫持的session,看上去很像来自原来的登录者。

以Twitter为例,它的登录页使用了HTTPS,但是登录以后,其他页面就变成了HTTP。这时,它的cookie里的session值就暴露了。


   

也就是说,这些cookie是在HTTPS环境下建立的,但是却在HTTP环境下传输。如果有人劫持到这些cookie,那他就能以你的身份在Twitter上发言了。

原文链接:http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/

译文链接:http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html

  • 大小: 17.6 KB
  • 大小: 17.3 KB
  • 大小: 33.4 KB
  • 大小: 24.5 KB
  • 大小: 19.9 KB
  • 大小: 33 KB
  • 大小: 20.1 KB
  • 大小: 23.5 KB
  • 大小: 18.8 KB
  • 大小: 19 KB
  • 大小: 8.1 KB
  • 大小: 49.8 KB
分享到:
评论

相关推荐

    7步法评估测量不确定度.zip

    本指南为英文版指南《7 STEPS TO ESTIMATE UNCERTAINTY FOR ISO/IEC 17025 ACCREDITED CALIBARATION AND TESTING LABS》,源自网站:https://www.isobudgets.com/。这本指南具有一定的参考价值,特别是里面收录的...

    php-7.2.9-Win32-VC15-x64.zip

    标签 "PHP7" 指出,这个压缩包的内容与PHP的第七个主要版本有关。PHP 7带来了许多性能改进和新特性,包括改进的语法、更快的执行速度以及更好的内存管理。 下面是压缩包内的文件及其相关知识点: 1. **phar.phar....

    2011-我和图表有个约定-@上传下载的乐趣.zip

    标题 "2011-我和图表有个约定-@上传下载的乐趣.zip" 暗示这是一个包含有关图表制作和数据可视化主题的压缩文件,可能是一个讲座或培训材料的电子版。描述中的文字与标题相同,进一步确认了这个文件是关于图表和上传...

    php-5.6.2-VC11-x64

    "Win32"在这里可能是一个误解,因为通常它代表32位系统,但结合"x64",我们可以推断这是用于64位Windows系统的。 标签 "php5.6.2 win64" 确认了这个版本的PHP(5.6.2)和它适用的操作系统(Windows 64位)。 从...

    5修炼-数据集.zip

    阅读这个文件对于正确理解和使用数据集至关重要,因为不熟悉数据集的背景信息可能会导致误解或错误的分析结果。 结合博客文章,我们可以期待获得更具体的指导。博主可能在文章中解释了数据集的背景、目的、特征变量...

    C#之自动提交表单登录QQ空间源码

    3. **表单数据编码**:在发送POST请求时,表单数据需要进行URL编码,确保数据在传输过程中不被误解。C#提供了Uri.EscapeDataString()方法来完成这个过程。 4. **Cookie管理**:登录成功后,服务器通常会返回一个或...

    基于PHP的claroline 在线学习和课程管理系统 多国语言含中文.zip

    7. **安全性**:系统具备一定的安全措施,保护用户数据不被非法访问或篡改,如通过HTTPS加密传输,用户认证机制等。 8. **跨平台**:由于基于PHP,Claroline可以在多种操作系统上运行,包括Windows、Linux和Mac OS...

    web2.0网上交易平台

    这里可能有一个小误解,因为标题中提到的是VS2005和SQLServer2000,而标签中提到了VS2010。VS2010是Visual Studio的后续版本,它支持.NET Framework 4.0,提供了更多的开发工具和改进。尽管标签中提及VS2010,但实际...

    FruitSaleswebsiteSourceCode_c57e34df-6a76-470c-8c32-d39971f9e49c.zip

    【描述】"金卡的健康擦金卡戴珊" 这个描述似乎与标题不直接相关,可能是一种误解或者拼写错误。"金卡"通常指的是信用卡的一种高级形式,而"健康擦"可能是指某种健康或美容产品,而"金卡戴珊"是美国著名的电视名人。...

    掌握Ajax系列7:在请求和响应中使用XML(上)

    1. **XMLHttpRequest对象的误解**:XMLHttpRequest这个名字可能会误导开发者,让人误以为它只能处理XML。然而,这个对象的主要功能是发起HTTP请求,而不关心请求或响应的数据格式。它支持多种数据格式,包括XML、...

    goaliepost-timezone-fix:一个简单的用户脚本,可在https上更新游戏时间

    7. **时间同步问题**:在线服务与用户设备之间的时区不一致可能导致误解或不便,而这个脚本就是为了解决这个问题。 8. **阅读和调试用户脚本**:学习如何阅读和使用这些脚本可以帮助开发者提升他们的Web开发技能,...

    JsonWriter_C++_

    考虑到标题和描述,可能是一个误解或者项目中包含了其他语言的示例代码。 总的来说,JsonWriter_C++_可能是一个结合了libcurl和nlohmann/json的C++ MFC应用,用于将数据(如文件内容)序列化为JSON并上传到服务器。...

    技术研发api在线接口文档免费版

    标签中提到了“技术接口文档”,这是软件开发过程中的重要组成部分,用于记录和沟通API的功能、参数、返回值等信息,确保开发团队对API有清晰的理解,减少错误和误解。“在线多项目”表明这个工具可以同时管理多个...

    curl curl-7.59.0 64位

    解压后,你会找到一个名为"I386"的目录,尽管这里提到"I386",但实际上这是指代64位(x86_64)系统的,因为I386通常代表32位系统,但在这里可能是因为历史原因或者误解。 2. 进入解压后的"I386"目录,找到`CURL.EXE...

    Android gif 动态验证码

    "git图形验证码"可能是一个误解,因为Git通常指的是版本控制系统,而不是图形验证码。不过,如果这里是指一个特定的库或者组件,它可能是在Android中处理GIF验证码的一个工具。如果这个库存在,它可能提供了方便的...

    参考资料-附期限动产赠与契约书.zip

    10. **文档版本控制**:在多人协作的项目中,版本控制能确保所有人都在使用最新、最准确的文档版本,避免因旧版本导致的误解或错误。 综上所述,"参考资料-附期限动产赠与契约书.zip" 文件涉及到IT领域的文件压缩、...

    Lending club loan data.zip

    它通常会包括每个变量的定义、数据类型以及可能的取值范围,帮助我们避免因误解而导致的错误分析。 通过对这些数据的深度分析,我们可以构建模型来预测贷款违约概率,评估不同信用等级的风险回报率,或者探索地区、...

    网络协议分析实验8共4页.pdf.zip

    很抱歉,但根据您提供的信息,似乎存在误解。"网络协议分析实验8共4页.pdf.zip" 是一个压缩文件,通常包含一个或多个文件。在您给出的标签和压缩包子文件的列表中,只有一个条目 "赚钱项目",这与标题中的文件名不符...

    GitHub-WHFpython项目中文

    这个项目主要涵盖了Python语言中的一些微妙、不直观或者容易误解的部分,帮助开发者避免在实际工作中遇到的问题。通过对这些"坑"的了解,我们可以提高代码的健壮性和可维护性,避免不必要的调试时间。 1. **Python...

Global site tag (gtag.js) - Google Analytics