【百度】大型网站的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,一经查实,立即删除!

相关文章

数据清理最终实现了自动化

苹果 | GOOGLE | 现货 | 其他 (APPLE | GOOGLE | SPOTIFY | OTHERS) Editor’s note: The Towards Data Science podcast’s “Climbing the Data Science Ladder” series is hosted by Jeremie Harris. Jeremie helps run a data science mentorship startup called Sharpest…

mui 与jquery 同时使用,$冲突解决办法。

(function($,doc,$$) { 。。。。。 }(mui, document, jQuery)); 使用$$代替jQuery。 var $$jQuery.noConflict();此方法也可以 转载于:https://www.cnblogs.com/mustanglqt/p/10608499.html

LVS原理介绍及安装过程

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

Python气流介绍

This is a memo to share what I have learnt in Apache Airflow, capturing the learning objectives as well as my personal notes. The course is taught by Mike Metzger from DataCamp.这是一份备忘录,旨在分享我在Apache Airflow中学到的知识,记录…

java~springcloud微服务目录索引

回到占占推荐博客索引 最近写了不过关于java,spring,微服务的相关文章,今天把它整理一下,方便大家学习与参考。 java~springcloud微服务~目录索引 springcloud~服务注册与发现Eureka的使用 springcloud~配置中心的使用 springclou…

DNS Bind9在windows7下

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

正确的词典访问方式

unity3d 词典访问Python字典指南 (Python Dictionary Guide) The dictionary is one of the data structures that are ready to use when programming in Python.字典是使用Python进行编程时可以使用的数据结构之一。 在我们开始之前,什么是字典? (Bef…

Vue.js(5)- 全局组件

全局组件 定义组件的语法 Vue.component(组件的名称, { 组件的配置对象 }) 在组件的配置对象中:可以使用 template 属性指定当前组件要渲染的模板结构; 使用组件的语法 把 组件的名称, 以标签的形式,引入到页面上就行; // 导入v…

DNS的几个基本概念:

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

废水处理计算书 excel_废水监测数据是匿名的吗?

废水处理计算书 excelOur collective flushes help track and respond to Covid-19 and so much more. Your body waste contains harvestable compounds that can reveal your illnesses and diseases, consumption habits, and cosmetic use. Researchers gain insights from…

文件在线预览 图片 PDF Excel Word

1、前端实现pdf文件在线预览功能 方式一、pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面。在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <a href"文档地址"></a> 2、word、xls、ppt文件在线预览功能 word、pp…

数据科学还是计算机科学_您应该拥有数据科学博客的3个原因

数据科学还是计算机科学“Start a Blog to cement the things you learn. When you teach what you’ve learned in the form of a blog you can see the gaps in your knowledge and fill them in” — My Manager (2019)“创建一个博客以巩固您所学到的东西。 当您以博客的形…

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框架的教程

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

和matlab一样的轻量级

Python&#xff08;英国发音&#xff1a;/ˈpaɪθən/ 美国发音&#xff1a;/ˈpaɪθɑːn/&#xff09;, 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido van Rossum于1989年发明&#xff0c;第一个公开发行版发行于1991年。Python是纯粹的自由软件&#xff…

熊猫分发_流利的熊猫

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

redis tomcat session

本机ip为192.168.1.101 1、准备测试环境 两个Tomcat 在Eclipse中新建2个Servers&#xff0c;指定对应的Tomcat&#xff0c;端口号错开。 Tomcat1&#xff08;18005、18080、18009&#xff09; Tomcat2&#xff08;28005、28080、28009&#xff09; 一个Redis Redis下载官网&…

Fiddler抓包-只抓APP的请求

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

技术分享 | 基于EOS的Dapp开发

区块链技术是当前最能挑动社会舆论神经&#xff0c;激起资本欲望的现象级技术。去中心化的价值互联&#xff0c;信用共识&#xff0c;新型组织构架&#xff0c;新的生产关系和智能合约&#xff0c;颠覆法币的发行流通体系和记账体系。这些新的技术都让人充满想象&#xff0c;充…

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…