【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理

大型网站的HTTPS实践(一)——HTTPS协议和原理

原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:07:39  349  0

 

前言

百度于2015年上线了全站HTTPS的安全搜索,默认会将HTTP请求跳转成HTTPS。从今天开始,我们将会分享多篇系列文章,为大家重点介绍和解析百度的HTTPS最佳实践。

HTTPS协议概述

HTTPS可以认为是HTTP+TLS

HTTP协议大家耳熟能详了,目前大部分WEB应用和网站都是使用HTTP协议传输的。

TLS是传输层加密协议,它的前身是SSL协议,最早由Netscape公司于1995年发布,1999年经过IETF讨论和规范后,改名为TLS。如果没有特别说明,SSL和TLS说的都是同一个协议。

HTTP和TLS在协议层的位置以及TLS协议的组成如下图:

图1  TLS协议格式

TLS协议主要有五部分:应用数据层协议,握手协议,报警协议,加密消息确认协议,心跳协议

TLS协议本身又是由Record协议传输的,Record协议的格式如上图最右所示。

目前常用的HTTP协议是HTTP1.1,常用的TLS协议版本有如下几个:TLS1.3,TLS1.2,TLS1.1,TLS1.0和SSL3.0。其中SSL3.0由于POODLE攻击已经被证明不安全,但统计发现依然有不到1%的浏览器使用SSL3.0。TLS1.0也存在部分安全漏洞,比如RC4和BEAST攻击。过去由于主流Web浏览器和应用程序中的TLS实现都支持降级协商过程,导致即使服务器支持最新版本,攻击者也有机会利用较弱的协议实施攻击。因此到2020年,所有主流Web浏览器都将取消TLS1.0和TLS1.1的支持。

TLS1.2暂时没有已知的安全漏洞,比较安全,同时有大量扩展提升速度和性能,当前被较为普遍的使用。

需要关注一点的就是TLS1.3是TLS协议一个非常重大的改革。不管是安全性还是用户访问速度都会有质的提升。TLS1.3协议的最终版本(RFC8446)已于2018年8月10日发布,各主流浏览器也逐渐支持TLS1.3。

同时HTTP2也于2015年5月正式定稿(RFC7540),这个由SPDY协议演化而来的协议相比HTTP1.1又是一个非常重大的变动,能够明显提升应用层数据的传输效率。

HTTPS功能介绍

百度使用HTTPS协议主要是为了保护用户隐私防止流量劫持

HTTP本身是明文传输的,没有经过任何安全处理。例如用户在百度搜索了一个关键字,比如“苹果手机”,中间者完全能够查看到这个信息,并且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也肯定是中间者往页面插的广告内容。如果劫持技术比较低劣的话,用户甚至无法访问百度。

这里提到的中间者主要指一些网络节点,是用户数据在浏览器和百度服务器中间传输必须要经过的节点。比如WIFI热点,路由器,防火墙,反向代理,缓存服务器等。

在HTTP协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过HTTPS是这些劫持行为的克星,能够完全有效地防御。

总体来说,HTTPS协议提供了三个强大的功能来对抗上述的劫持行为:

  1. 内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者无法直接查看原始内容;

  2. 身份认证。保证用户访问的是百度服务,即使被DNS劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持;

  3. 数据完整性。防止内容被第三方冒充或者篡改。

那HTTPS是如何做到上述三点的呢?下面从原理角度介绍一下。

HTTPS原理介绍

1内容加密

加密算法一般分为两种,对称加密非对称加密。所谓对称加密(也叫密钥加密)就是指加密和解密使用的是相同的密钥。而非对称加密(也叫公钥加密)就是指加密和解密使用了不同的密钥。

图2  对称加密

图3  非对称加密

对称内容加密强度非常高,一般破解不了。但存在一个很大的问题就是无法安全地生成和保管密钥。假如客户端软件和服务器之间每次会话都使用固定的、相同的密钥加密和解密,肯定存在很大的安全隐患。如果有人从客户端获取到了对称密钥,整个内容就不存在安全性了,而且管理海量的客户端密钥也是一件很复杂的事情。

非对称加密主要用于密钥交换(也叫密钥协商),能够很好地解决这个问题。浏览器和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程中的密钥只在内存中生成和保存,而且每个会话的对称密钥都不相同(除非会话复用),中间者无法窃取。

非对称密钥交换很安全,但同时也是HTTPS性能和速度严重降低的“罪魁祸首”。想要知道HTTPS为什么影响速度,为什么消耗资源,就一定要理解非对称密钥交换的整个过程。

下面重点介绍一下非对称密钥交换的数学原理及在TLS握手过程中的应用。

2非对称秘钥交换

在非对称密钥交换算法出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管密钥。非对称密钥交换过程主要就是为了解决这个问题,使得对称密钥的生成和使用更加安全。

密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等操作。

常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。它们的特性如下:

  1. RSA:算法实现简单,诞生于1977年,历史悠久,经过了长时间的破解测试,安全性高。缺点就是需要比较大的素数(目前常用的是2048位)来保证安全强度,很消耗CPU运算资源。RSA是目前唯一一个既能用于密钥交换又能用于证书签名的算法。

  2. DH:Diffie-Hellman密钥交换算法,诞生时间比较早(1977年),但是1999年才公开。缺点是比较消耗CPU性能

  3. ECDHE:使用椭圆曲线(ECC)的DH算法,优点是能用较小的素数(256位)实现RSA相同的安全等级。缺点是算法实现复杂,用于密钥交换的历史不长,没有经过长时间的安全攻击测试。

  4. ECDH:不支持PFS,安全性低,同时无法实现False Start。

  5. DHE:不支持ECC。非常消耗CPU资源

建议优先支持RSA和ECDH_RSA密钥交换算法。原因是:

  1. ECDHE支持ECC加速,计算速度更快。支持PFS,更加安全。支持False Start,用户访问速度更快。

  2. 目前还有至少20%以上的客户端不支持ECDHE,我们推荐使用RSA而不是DH或者DHE,因为DH系列算法非常消耗CPU(相当于要做两次RSA计算)。

图4  百度HTTPS连接详情

需要注意通常所说的ECDHE密钥交换默认都是指ECDHE_RSA,使用ECDHE生成DH算法所需的公私钥,然后使用RSA算法进行签名最后再计算得出对称密钥。

非对称加密相比对称加密更加安全,但也存在两个明显缺点:

  1. CPU计算资源消耗非常大。一次完全TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只相当于非对称加密的0.1%,如果应用层数据也使用非对称加解密,性能开销太大,无法承受。

  2. 非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。

所以公钥加密目前只能用来作密钥交换或者内容签名,不适合用来做应用层传输内容的加解密。

非对称密钥交换算法是整个HTTPS得以安全的基石,充分理解非对称密钥交换算法是理解HTTPS协议和功能的关键。

总  结

在接下来的文章中我们会继续通俗地介绍一下RSA和ECDHE在密钥交换过程中的应用,敬请期待。

文章整理自百度HTTPS技术联合团队

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557835/viewspace-2219409/,如需转载,请注明出处,否则将追究法律责任。

转载于:https://www.cnblogs.com/jinanxiaolaohu/p/9943773.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS原理介绍及安装过程

一、ARP技术概念介绍 为什么讲ARP技术,因为平常工作中有接触。还有就是LVS的dr模式是用到arp的技术和数据。 1、什么是ARP协议 ARP协议全程地址解析协议(AddressResolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地…

DNS Bind9在windows7下

有些公司技术力量薄弱一些,一直在用windows系统,所以本文从windows出发,安装bind,利用它的view功能,做智能DNS,解决双线机房南北电信联通访问问题前言: 搞LINUX的朋友都知道,bind是l…

DNS的几个基本概念:

一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。 根域服务器我们知道有13台&#xff…

D3.js 加标签

条形图还可以配上实际的数值,我们通过文本元素添加数据值。 svg.selectAll("text").data(dataset).enter().append("text").text(function(d){return d;}) 通过 x 和 y 值来定位文本元素。 .attr("text-anchor", "middle").attr("…

oppo5.0以上机器(亲测有效)激活Xposed框架的教程

对于喜欢玩手机的朋友而言,常常会用到xposed框架以及种类繁多功能强大的模块,对于5.0以下的系统版本,只要手机能获得ROOT权限,安装和激活xposed框架是异常简便的,但随着系统版本的迭代,5.0以后的系统&#…

熊猫分发_流利的熊猫

熊猫分发Let’s uncover the practical details of Pandas’ Series, DataFrame, and Panel让我们揭露Pandas系列,DataFrame和Panel的实用细节 Note to the Readers: Paying attention to comments in examples would be more helpful than going through the theo…

Fiddler抓包-只抓APP的请求

from:https://www.cnblogs.com/yoyoketang/p/6582437.html fiddler抓手机app的请求,估计大部分都会,但是如何只抓来自app的请求呢? 把来自pc的请求过滤掉,因为请求太多,这样会找不到重要的信息了。 环境准备&#xff1…

DOCKER windows 安装Tomcat内容

DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1 下载地址6.2 用FTP工具上传tar包6.3 安装6.4 查看镜像6.5 运行 windows必须是64位的 1.下载程序包 安装包 https://github.com/boot2doc…

github免费空间玩法

GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务,GitHub于2008年2月运行。在2010年6月,GitHub宣布它现在已经提供可1百万项目,可以说非常强大。 Github虽然是一个代码仓库,但是Github还免费为大家提供一个免费开源Github …

在Markdown中输入数学公式

写在前面 最近想要把一些数学和编程方面的笔记记录成电子笔记,因为修改、插入新内容等比较方便。这里记一下在Markdown中输入数学公式的方法。 基础知识 公式与文本的区别 公式输入和文本输入属于不同的模式,公式中无法通过空格来控制空白,通…

整合后台服务和驱动代码注入

整合后台服务和驱动代码注入 Home键的驱动代码: /dev/input/event1: 0001 0066 00000001 /dev/input/event1: 0000 0000 00000000 /dev/input/event1: 0001 0066 00000000 /dev/input/event1: 0000 0000 00000000 对应输入的驱动代码: sendevent/dev/…

为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布

2019独角兽企业重金招聘Python工程师标准>>> 在2019年3月的北京云栖峰会上,阿里云正式推出全球首个云原生HDFS存储服务—文件存储HDFS,为数据分析业务在云上提供可线性扩展的吞吐能力和免运维的快速弹性伸缩能力,降低用户TCO。阿里…

对食材的敬畏之心极致产品_这些数据科学产品组合将给您带来敬畏和启发(2020年中的版本)

对食材的敬畏之心极致产品重点 (Top highlight)为什么选择投资组合? (Why portfolios?) Data science is a tough field. It combines in equal parts mathematics and statistics, computer science, and black magic. As of mid-2020, it is also a booming fiel…

android模拟用户输入

目录(?)[-] geteventsendeventinput keyevent 本文讲的是通过使用代码,可以控制手机的屏幕和物理按键,也就是说不只是在某一个APP里去操作,而是整个手机系统。 getevent/sendevent getevent&sendevent 是Android系统下的一个工具&#x…

真格量化常见报错信息和Debug方法

1.打印日志 1.1 在代码中添加运行到特定部分的提示: 如果我们在用户日志未能看到“调用到OnQuote事件”文字,说明其之前的代码就出了问题,导致程序无法运行到OnQuote函数里的提示部分。解决方案为仔细检查该部分之前的代码是否出现问题。 1.2…

自定义PopView

改代码是参考一个Demo直接改的&#xff0c;代码中有一些漏洞&#xff0c;如果发现其他的问题&#xff0c;可以下方直接留言 .h文件 #import <UIKit/UIKit.h> typedef void(^PopoverBlock)(NSInteger index); interface CustomPopView : UIView //property(nonatomic,copy…

当编程语言掌握在企业手中,是生机还是危机?

2019年4月&#xff0c;Java的收费时代来临了&#xff01; Java是由Sun微系统公司在1995年推出的编程语言&#xff0c;2010年Oracle收购了Sun之后&#xff0c;Java的所有者也就自然变成了Oracle。2019年&#xff0c;Oracle宣布将停止Java 8更新的免费支持&#xff0c;未来Java的…

数据可视化 信息可视化_动机可视化

数据可视化 信息可视化John Snow’s map of Cholera cases near London’s Broad Street.约翰斯诺(John Snow)在伦敦宽街附近的霍乱病例地图。 John Snow, “the father of epidemiology,” is famous for his cholera maps. These maps represent so many of our aspirations …

android 接听和挂断实现方式

转载▼标签&#xff1a; android 接听 挂断 it 分类&#xff1a; android应用技巧 参考&#xff1a;android 来电接听和挂断 支持目前所有版本 注意&#xff1a;android2.3版本及以上不支持下面的自动接听方法。 &#xff08;会抛异常&#xff1a;java.lang.Securi…

利用延迟关联或者子查询优化超多分页场景

2019独角兽企业重金招聘Python工程师标准>>> MySQL并不是跳过offset行&#xff0c;而是取offsetN行&#xff0c;然后返回放弃前offset行&#xff0c;返回N行&#xff0c;那当offset 特别大的时候&#xff0c;效率就非常的低下&#xff0c;要么控制返回的总页数&…