一文让你轻松掌握 HTTPS

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,同步至 ClickHouse 1个月
数据传输服务 DTS,数据同步 1个月
简介: HTTPS 称为安全的超文本传输协议,在 HTTP 与 TCP 之间增加了一层安全链路 (SSL/TLS)。(SSL 是 TLS 的前身,在 IETF 将 SSL 标准化后就改名叫 TLS,SSL 的最高版本为 3.0,之后版本为 TLS1.0,TLS1.1,TLS1.2.....)

原文作者:UC 国际研发 泽原

HTTPS 简介

1.1 什么是 HTTPS

HTTPS 称为安全的超文本传输协议,在 HTTP 与 TCP 之间增加了一层安全链路 (SSL/TLS)。(SSL 是 TLS 的前身,在 IETF 将 SSL 标准化后就改名叫 TLS,SSL 的最高版本为 3.0,之后版本为 TLS1.0,TLS1.1,TLS1.2.....)

1.2 为什么要用 HTTPS

HTTPS 的诞生是为了解决 HTTP 存在的问题,想知道为什么要用 HTTPS,就要知道 HTTP 存在哪些问题。HTTP 技术的应用非常的广泛,是一个很伟大的技术,但是由于它是明文传输的,所以存在着各种安全性问题:

  • 窃听风险。由于是明文传输,如果网络传输的某个节点被动了手脚,那么传输的内容就可被窃听。
  • 篡改风险。由于是明文传输,在内容被窃听的同时,攻击者可以很容易的篡改传输内容,而 HTTP 本身没有校验报文完整性的能力。
  • 冒充风险。无法验证通讯方的真实身份。

为了解决这些问题就诞生了 HTTPS,通过加密传输来解决窃听风险,再通过摘要校验确保报文没被篡改,另外为每个站点配备证书以确定身份,当然证书还包含了秘钥,摘要算法等信息。

1.3 HTTPS 如何确保传输的安全性

加密算法有非对称加密算法,对称加密算法,摘要算法。由于摘要算法是不可逆算法,无法用于数据传输,非对称加密算法有很高的安全性也是可逆的,但是由于计算非常的耗时 ,如果作为数据传输的加密算法,代价将会非常的高。

而对称加密算法既能满足可逆条件,而且耗时相对非对称加密算法小很多,适合于数据传输。所以 HTTPS 是使用对称加密算法进行数据传输。

为了能将对称加密的秘钥安全的给到客户端,HTTPS 是通过非对称加密算法加密秘钥传输给客户端的。然而,非对称加密的的公钥是明文方式给到客户端的,所以会存在中间人攻击 (介绍) 的情况,为了解决中间人攻击,HTTPS 引入了数字证书。

上面一段介绍看下来,我们发现要进行 HTTPS 传输,需要很多的信息,非对称加密算法用哪种算法?对称加密又用哪种算法?服务端的证书又是什么?客户端跟服务端之间是怎么去协商这些数据的?于是就有了我们经常听到的 TLS 握手,TLS 握手就是为了确定这些变量,从而建立所谓的安全链路。如下是 TLS 握手的一个大概过程:

image.png

下面我们通过访问 https://www.baidu.com 的握手过程,讲解一下几个关键环节

Client Hello

image.png

Client Hello 是 TLS 握手的第一步,由客户端发起,主要包含几个信息:

1、客户端支持的最高的 TLS 版本号

2、一个随机数,用于后面对称秘钥导出算法

3、客户支持的加密套件列表

4、拓展信息

Server Hello

image.png

1、根据客户端支持的最高协议版本,确定使用的 TLS 版本

2、根据客户端支持的加密套件列表,选择使用的加密套件,也就是确定了秘钥交换算法,数据传输用的对称加密算法等

3、生成一个随机数,用于后面对称秘钥导出算法

Server Certificate

image.png

返回服务端的证书,这里是一个证书链,包含了中间证书。

Server Key Exchange

image.png

TLS 的握手过程会根据确定加密套件,步骤上会有所区别。

如果加密套件选择的是 DH(或者 ECDHE)作为对称秘钥交换算法,那么对称秘钥是由客户端跟服务端自己导出的,这个时候需要客户端与服务端交互各自生成的公钥,就会有 Server Key Exchange 这一步。

如果选择的是 RSA 算法,那么对称秘钥是由客户端生成一个叫 pre-master key 后加密传输给服务端导出秘钥的,那么就没有 Server Key Exchange 这一步。

Client Key Exchange

image.png

如上面所讲,如果交换算法选择的是 DH(或者 ECDHE),那么这里传输的将是一个公钥,用于服务端生成对称秘钥。

如果交换算法是 RSA,那么这里传输的则是使用服务端公钥加密的 pre-master key。

这一步过后,客户端跟服务端就能导出传输过程中需要的的对称加密秘钥了。

Change Cipher Spec

从上图可以看到,在 Client Key Exchange 后,客户端跟服务端都有一次 Change Cipher Spec 请求。这个步是算法各自根据自己生成的对称秘钥对刚才握手的所有数据的摘要进行加密后传输给对面。一是确保对称算法秘钥的正确性,二是校验握手过程数据是否遭到篡改。

二、证书管理

2.1 什么是证书

上面我们多次提到证书这个词,那么什么是证书呢?证书就是网络通讯中的一种标识身份的文件,主要包含使用者、非对称加密的公钥、颁发者、颁发者的签名、有效期等信息。

2.2 哪些证书是可信任的

证书是标识身份的文件,那么我们怎么确定这个文件是可信任的呢?首先我们来看一下证书是如何生成与验证的:

image.png

如上图,生成一个证书的时候,颁发者(图中的签名者)会先用摘要算法计算出摘要值,然后使用自己的私钥对摘要进行签名即加密,然后一并写入证书中。使用者拿到证书后,使用证书中的摘要算法计算出摘要值,然后使用证书中的公钥对签名信息进行解密得到明文(颁发者计算的摘要),然后对比这两个值,如果这两个值是一样的,则说明该证书内容是没被篡改的。

从上面的内容我们知道了一个证书的生成与验证过程,然而即使我们知道了证书的内容是没有被篡改的,我们也还不能说这个证书就是可信任的,因为有可能这个证书是一个攻击者自己使用自己的秘钥对生成后给到你的。所以我们必须知道这个颁发者 是否是可信任的,为了验证颁发者是可信任的,这里就引入了证书链的概念,如下图:

image.png

我们在 1.3 章节的 TLS 握手中提过,服务端下发证书的时候是下发了一个证书链,就是会包含 中间证书,所以我们要确认一个站点证书的颁发者是否是可信任的,就要往上验证颁发者的证书,一层层往上验证。

我们在验证证书链的时候,要验证到哪一层结束呢?

相信很多人都听过 CA,CA 就是数字证书认证机构,是被所有人认可的,系统跟浏览器会默认安装这个证书以及该证书颁发的二级证书等,这些都是可信任的证书,当然,除了这些,用户还可以手工添加自己认为可信任的证书到信任列表,我们在验证证书链的时候,如果验证的证书已经在信任列表里面了,那么我们就认为这个站点证书是可信任的(即使是这样,一些过期的或者算法安全等级不够的,浏览器依然会认为是不安全大的,而发出警告信息)。

如下就是 Chrome 浏览器的信任列表:

image.png

2.3 如何撤销证书 <<

出于某些原因,比如秘钥泄密,或者证书的算法已经不安全等等,这个时候需要对证书进行撤销。通信双方都可以根据证书中指定的校验地址对证书链中的每个证书的状态进行校验。目前撤销证书大的方式有两种:

证书吊销列表(CRL),CRL 会定期发布,或每次更新时发布,或通过 HTTP 的方式提供访问,是一个包含了所有撤销证书的名单。这种方式有两个缺点,一是文件会越来越大,二是客户端可能会缓存 CRL 文件而导致没办法立即更新刚撤销的证书。

在线证书状态协议(OCSP),一种可实时检查证书状态的机制。

三、加密套件

3.1 什么是加密套件

在介绍 TLS 握手过程的时候,我们除了说到证书以外,还有一个没解释的名词,就是加密套件。什么是加密套件?如下图:

image.png

如上图每一行就是一个加密套件,第一部分为加密套件的名字,后面是对该加密套件内容的介绍。加密套件是确保 HTTPS 安全的基础,主要包含了秘钥交换算法,签名认证算法,对称加密算法,摘要校验算法。

Kx 是密钥交换算法,用于握手中交换对称秘钥时加密秘钥。Au 是签名认证算法,握手过程中需要对握手内容进行签名验证 。Enc 是对称加密算法,握手成功后数据传输所使用的加密算法。Mac 是摘要校验算法,用于确保报文的完整性。图中有些加密套件 Mac=AEAD,这部分加密套件代表对称加密算法本身能确保报文的完整性,不需要摘要算法。

3.2 如何选择加密套件

选择加密套件,主要从安全性跟性能两个方面去考虑,目前主流的秘钥交换算法是 ECDHE,ECDHE 是在 DH 算法上加上了椭圆曲线算法,在性能跟安全性上都有很大的提升。而对称加密算法主流的是 AES 算法的 GCM 模式,GCM 模式支持加解密并行计算,而且在 intel 处理器上有特殊的优化。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
187 18
|
6月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
173 19
|
6月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
597 20
|
6月前
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
235 1
|
7月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
383 3
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
9月前
|
网络协议 安全 网络安全
HTTP与HTTPS协议入门
HTTP协议是互联网的基石,HTTPS则是其安全版本。HTTP基于TCP/IP协议,属于应用层协议,不涉及数据包传输细节,主要规定客户端与服务器的通信格式,默认端口为80。
319 25
HTTP与HTTPS协议入门
|
11月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
615 3
|
12月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
340 11
|
12月前
|
缓存 安全 网络协议
HTTPS协议的历史发展
HTTPS协议的历史发展
460 8