当 “HTTP” 先生遇上“S”小姐
情人节的晚上,天空中淅淅沥沥的下着带有些寒意的小雨。HTTP 先生孤零零的坐在咖啡厅中,对着面前的电脑发呆。他有意的屏蔽掉了周边情侣们的窃窃私语,这对单身的他来说是狗粮,也是一阵阵伤害。这时,咖啡厅的门被打开了,风姿绰约的“S”小姐出现在 HTTP 先生的眼中。当 HTTP 先生遇见 S 小姐,会产生怎样的化学反应呢?
HTTP (超文本传输协议)是目前互联网应用最广泛的协议,伴随着人们网络安全意识的加强,HTTP“S” 被越来越多地采纳。不论是访问一些购物网站,或是登录一些博客、论坛等,我们都被 HTTPS 保护着,甚至 Google Chrome、Firefox 等主流浏览器已经将所有基于 HTTP 的站点都标记为不安全。
HTTPS Everywhere
为什么 HTTP 是不安全的?我们先来简单看下 HTTP 访问过程。

抓包如下:

如上图所示,HTTP 请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击,如下:

可以看到,客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则其可返回任意信息给客户端,而不被客户端察觉,所以我们经常会听到一词“劫持”。
试想下,你正在进行一次在线付款操作,你需要输入银行卡号、密码等信息,然后这些信息会经过网络发送到银行系统,“一切数据”都是明文传输的,而恰好有人正在进行网络抓包,他解开你的数据包,然后偷窃你的所有信息。这会对你的财产安全构成了直接威胁。除了财产不安全以外,你的隐私也无法得到保证,什么时候浏览什么了网站,这些都容易被他人所嗅探到。
因此,可以说是 HTTPS 的使用是互联网发展的必然趋势,我们需要这样一种手段来保障我们个人的财产安全,隐私安全。不论是在上网做什么,我们都希望我们的足迹能够被保护起来,不轻易地被不怀好意的人感知到。因此 HTTPS 应该应用在全部的上网场景之中,HTTPS everywhere!
HTTPS 为什么安全

通过上图我们就可以了解到,相比 HTTP,HTTPS 传输更加安全。
- 所有信息都是加密传播,黑客无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
HTTPS 普及之难
按说上网更加安全,这并没有什么不好的,然而 HTTPS 的推广却存在着一些障碍,比如 SSL 证书的价格问题、建立安全通信链路所带来的额外开销等。
证书开销

首先是证书价格问题,不少个人用户在看到价格之后,会产生“配置 HTTPS 是否值得”,“证书之间的价格相差如此之大我该如何选择”等疑问。这可能会使客户在了解 HTTPS 带来的好处之前,就直接打消配置 HTTPS 的念头。其实针对个人博客或者小网站,又拍云就提供 Let’s Encrypt 和 Symantec 的两款免费证书。 OV、EV 证书更建议企业采用,为网站提供更全面的安全保障。
服务器资源消耗
HTTPS,即 HTTP Over TLS,建立一条安全通信链路,需要经历一次 SSL/TLS 握手,在握手阶段,双方(客户端和服务器)会采用非对称加密的方式进行密钥协商,例如现在最流行的 RSA 算法和临时椭圆曲线算法,密钥协商的目的是计算出一个称为 "pre master" 的串,用以构建出最终的加密密钥,这个加密密钥用于对称加密,即双方进行数据传输时使用。非对称加密最大的缺陷是其计算的复杂度,这些复杂的数学计算,往往会消耗一定的 CPU 资源。不过不用担心,这消耗主要体现在服务端,例如又拍云 CDN 边缘的服务器每秒需要处理数以万计的 HTTPS 请求,这对服务器的硬件资源是一个极大的考验。
另外,这里的消耗主要来自于握手时候的消耗,建好连接之后就不太耗了。
那么采用 HTTPS 后,到底会多用多少服务器资源?
2010年1月 Gmail 切换到完全使用 HTTPS, 前端处理 SSL 机器的CPU 负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%。由于 Gmail 应该是使用N台服务器分布式处理,所以CPU 负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义。这篇文章中还列出了单核每秒大概处理 1500 次握手(针对1024-bit 的 RSA),这个数据很有参考意义,具体信息来源:ImperialViolet(https://www.imperialviolet.org/2010/06/25/overclocking-ssl.html)。
访问速度
繁重的计算和多次交互天然的影响了 HTTPS 的访问速度。如果什么优化都不做,HTTPS 会明显慢很多。如果做过常规优化,但是不针对 HTTPS 做优化,这种情况下测试的结果是 0.2-0.4 秒耗时的增加。如果是没有优化过的站点,慢 1 秒都不是梦。
所以,不是慢,是没有优化。
说到优化,为了能够让HTTPS更好更快的普及,工程师们设计出了不少针对性的优化点。
例如针对 SSL/TLS 握手的开销,引入了 SSL Session 和 TLS Session Tickets 的机制,用以复用会话,减少握手带来的开销;又拍云 CDN 全网支持 HTTP/2 和 TLS 1.3 特性,HTTP/2 带来了巨大的速度提升,具有诸如服务器推送,标头压缩和并行请求等功能。而 TLS 1.3 通过移除有安全隐患的加密算法来提高安全性,通过简化握手,减少延迟并提高性能。
针对 SSL/TLS 握手会消耗大量的 CPU 资源,各厂商都在探索利用硬件(例如 Intel 提供的 Quick Assistant Technology)进行加速的道路;
针对证书昂贵的问题,又拍云联合 Symantec、GeoTrust、TrustAsia、Let’s Encrypt 推出付费和免费 SSL 证书申请与管理一站式服务,无需繁杂流程,一键申请,自主部署,轻松实现网站与 Web 应用的 HTTPS 加密部署。
推荐阅读:
当 “HTTP” 先生遇上“S”小姐的更多相关文章
- MVC遇上bootstrap后的ajax表单模型验证
MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...
- 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)
邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...
- 初识genymotion安装遇上的VirtualBox问题
想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...
- SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案
SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...
- 当创业遇上O2O,新一批死亡名单,看完震惊了!
当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)
当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)
当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...
随机推荐
- vue的传参方式和router使用技巧
vue传参方法一 1,路由配置 { path: '/describe/:id', name: 'Describe', component: Describe } 2,使用方法 // 直接调用$rout ...
- 错误:编码GBK的不可映射字符
当Java源代码中包含中文字符时,我们在用javac编译时会出现"错误:编码GBK的不可映射字符". 由于JDK是国际版的,我们在用javac编译时,编译程序首先会获得我们操作系统 ...
- IDEA 格式化代码快捷键冲突解决
转自https://blog.csdn.net/ckhmxhfhzt/article/details/72378537 大家都知道,在IDEA中格式化代码的快捷键为Ctrl+Alt+L .但是很多人发 ...
- Elasticsearch笔记八之脑裂
Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
- [UOJ#207. 共价大爷游长沙]——LCT&随机化
题目大意: 传送门 给一颗动态树,给出一些路径并动态修改,每次询问一条边是否被所有路径覆盖. 题解: 先%一发myy. 开始感觉不是很可做的样子,发现子树信息无论维护什么都不太对…… 然后打开题目标签 ...
- EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下?
前言 这个问题从未遇见过,是一位前辈问我EF Core内存泄漏问题时我才去深入探讨这个问题,刚开始我比较惊讶,居然还有这种问题,然后就有了本文,直接拿前辈的示例代码并稍加修改成就了此文,希望对在自学E ...
- dev和master合并冲突解决
前景 master主分支,dev是开发分支,master会保持最新的dev代码 问题的产生 dev开发新功能 版本发布,dev合并到了master,发布生产环境 新需求来了,在dev进行开发 同时,线 ...
- shell简明教程
shell的格式 shell可以在直接在命令行下输入,也可以保存成shell脚本文件运行.当命令简单并且不需要重复使用,在命令行输入直接执行即可,否则就写成脚本.shell脚本默认文件扩展名为.sh. ...
- jdk源码阅读笔记-LinkedList
一.LinkedList概述 LinkedList的底层数据结构为双向链表结构,与ArrayList相同的是LinkedList也可以存储相同或null的元素.相对于ArrayList来说,Linke ...
- Python中pathlib模块
Python中pathlib模块 Path.cwd():返回当前目录的路径 Path.home():返回当前用户的家目录 Path.stat():返回此路径信息 Path.touch():创建文件 P ...