区块链技术博客
www.b2bchain.cn

HTTPS 为什么是安全的(下)求职学习资料

本文介绍了HTTPS 为什么是安全的(下)求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

在上篇文章 HTTPS 为什么是安全的 ? (上) 中,我们借由 如何安全的传输信息 这个问题,引出了 HTTPS 中常用的密码学工具,对称加密,非对称加密,哈希,消息认证码,数字签名,证书 等等。这里先简单复习一下。

通信内容一般直接使用 对称加密 ,但对称加密存在 密钥传输问题

非对称加密 性能只有对称加密的几百分之一,不会用来直接加密通信内容。但是可以配合对称加密,用非对称加密保护对称加密的密钥,以解决密钥传输问题。

哈希算法 主要用于信息的完整性。

消息认证码 是一种和密钥相关联的哈希算法。它通过共享密钥,不仅能确保信息的完整性,还可以提供认证功能,确保消息来自期望的通信对象,但同样也存在密钥传输问题。

数字签名 技术使用私钥签名,公钥验证签名,同时兼具确认信息完整性,确认通信对方身份,防止否认的功能。

证书 的目的是确保公钥的合法性,它的本质就是为公钥加上数字签名。它的安全性由证书链顶端的根证书来保证。

如果你对这几个工具还不是很熟悉,就无法彻底的了解 HTTPS 的通信流程,不妨再阅读一遍 HTTPS 为什么是安全的 ? (上) 。

有了这些前置知识,下面就来深入剖析 HTTPS 。

裸奔的 HTTP

为什么需要 HTTPS ?因为 HTTP 在裸奔

针对上篇文章中提到过的安全传输信息的几个要素:

  • 保证传输内容的安全,即不传输明文
  • 防止传输内容被篡改,即可以识别篡改
  • 确认对方真的是对方,即通信双方身份的认证

由于 HTTP 是 明文传输的 ,也没有提供身份验证的方式,任何人都可以在通信链路上的任意一个节点拦截,伪造通信内容。所以 HTTP 没有满足上面几条要素的任意一条,毫无安全性可言。在错综复杂的现代互联网环境下,无疑是行不通的,这也正是 HTTPS 得以迅速发展的原因。

Chrome 对于 HTTPS 链接会在地址栏显示绿色小锁;Android 9 开始默认启用 TLS,如果需要使用 HTTP,需要进行单独配置;iOS 强制使用 HTTPS ;HTTP/2 虽然仍然支持明文传输,但 Chrome,FireFox 公开宣布只支持加密的 HTTP/2;HTTP/3 (QUIC) 内置 TLS 1.3,只能进行加密通信 …… 事实上,HTTPS 已经无处不在了。相信有一天,HTTP 将不复存在。

HTTPS = HTTP + ?

HTTP 将不复存在?这其实是个伪命题。事实上,HTTP 将永远存在。因为 HTTPS 并不是一个全新的产物,它是基于 HTTP 的。

我们回顾一下 TCP/IP 分层模型OSI 参考模型

HTTPS 为什么是安全的(下)

OSI 参考模型对通信过程中必要的功能进行了归纳,但其只是一个模型,对各层的作用做了一系列粗略的界定。TCP/IP 协议分层与 OSI 参考模型略微不同,将传输层以上全部归为应用层。上图中的 TCP/IP 协议只分了四层,但一些资料中会将其分为五层,加上了物理层,倒也并不影响理解。

HTTP 属于应用层协议,它直接与用户交互,但并不负责真正的数据传输,它依赖于传输层协议 (一般是 TCP) 来将数据发送到对端。常见的传输层协议有 TCP 和 UDP 。同样,传输层也并不真正进行数据传输,它又依赖于网络层协议,一般是 IP 协议。网络层依赖链接层和物理设备进行真正的数据传输。正是得益于良好的分层结构,让我们可以很方便的实现 HTTPS 。

有这样一句广泛流传的话:计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。(如果不行,那么就再来一层!) 用这句话来形容 HTTPS 是再适合不过了。

HTTPS 为什么是安全的(下)

在原来的分层协议中,应用层直接将明文数据交给传输层来处理。而在 HTTPS 中, 应用层和传输层之间加了一层 TLS 来负责数据的加密,这样一来,应用层和传输层无需任何改变,就可以安全传输信息了。所以除了 HTTP,理论上任何应用层协议都可以基于 TLS 进行安全传输,例如 FTPS,SMTP……

TLS 的前身是 SSL 。SSL(Secure Sockets Layer) 是网景公司设计的安全传输协议,有 1.0,2.0,3.0 三个版本,但目前均已弃用。互联网工程组 IETF 将 SSL 标准化,并改名为 TLS 。1999 年 发布了 TLS 1.0,2006 年发布了 TLS 1.1,2008 年发布了 TLS 1.2,2018 年发布了 TLS 1.3 。每个新版本都强化了性能和安全性,目前使用最为广泛的是 TLS 1.2 ,之前的版本都将在今年被废弃。

说了半天 HTTPS ,那么它到底是如何运作的呢?我听很多朋友抱怨过,流程太复杂,看过一段时间就忘了。我在这里强烈建议大家用 wireshark 抓包分析一遍,再亲手画一个流程图,这样很容易就记住了。

认证 密钥协商 数据加密

HTTPS 的整体思路很简单,它其实就是做了三件事:认证、密钥协商、数据加密

  • 通信双方身份的验证

  • 通信双方协商出一个安全的会话密钥,注意中间人攻击的问题

  • 使用会话密钥对称加密通信内容

看起来很简单,但 HTTPS 做了大量的工作来保证通信的安全。下面就来实战抓包来学习 HTTPS 的通信流程。

HTTPS 通信流程

下文以浏览器访问 https://zhihu.com 抓取到的实际通信流程进行分析。

建立 TCP 连接

TLS 是基于 TCP 连接上建立的安全层,所以第一步 三次握手 (SYN => SYN, ACK => ACK) 建立 TCP 连接是必不可少的。

Client Hello

建立 TCP 连接之后,浏览器率先发出 Client Hello 消息。

HTTPS 为什么是安全的(下)

Client Hello

挑几个重点字段说一下。

Version 表示客户端最高支持的 TLS 版本,向下兼容。上图中是 TLS 1.2 (0x0301)

Random 是客户端生成的一个随机数,后面用于生成主密钥。下文中用 client_random 表示。Random 是 32 字节,但其实随机数的长度是 28 字节,前面四个字节是 UNIX 时间戳,并没有什么意义。

Session ID 传递给服务器用于复用缓存的 TCP 连接。这里 Session ID 是有值的,但并不代表就一定会复用之前的连接,这要看服务器是否能找到该 Session ID 的连接。

Cipher Suites 是客户端支持的密码套件列表,服务器会从中选择合适的密码套件,排在第一个的优先选择。密码套件是 TLS 协议的核心,可以说它是保证 TLS 安全性的根本。密码套件决定了 TLS 使用的身份认证、密钥交换、对称加密、消息认证码的算法。在 TLS 1.2 中可选择的密码套件比较多,但在 TLS 1.3 中进行了删减,去除了部分不再安全的密码套件。

Compression Methods 表示客户端支持的压缩方法。由于存在安全性问题,一般不启用,值为 null 。

Extension 为扩展字段,可以让客户端和服务器在不更新 TLS 版本的基础上获取更多的能力。客户端可以发送服务端不理解的扩展,但服务端不能返回客户端无法理解的扩展,否则将发生错误。另外在 TLS 1.3 中,为了保证向下兼容性,并没有去修改 Version 字段,而是通过 Supported Version: TLS 1.3 这样的扩展字段来说明支持 TLS 1.3 。

Server Hello

服务端在收到 Client Hello 之后,根据客户端发来的消息内容,作出回应。

HTTPS 为什么是安全的(下)

Version 表示服务器选定使用的 TLS 版本,上图中是 TLS 1.2 (0x0303)

Random 是服务器生成的随机数,其作用和 client_random 一样,也是用来计算主密钥,下文中用 server_random 表示。现在浏览器,服务器都拥有了 client_randomserver_random 两个随机数。

Session ID 为 null 表示服务器没有可复用的 TCP 连接。因为我模拟的第一次建立 TCP 连接的完整的 HTTPS 通信流程,所以必然是没有复用的。如果 Session ID 不为空的话,其实走的是一个连接的恢复流程,这样就抓不到完整的 HTTPS 流程了。后面可以简单演示一下。

Cipher Suite 表示服务端选定的密码套件是 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 。简单画个图分析一下。

HTTPS 为什么是安全的(下)

后续的整个加密流程都会遵循该密码套件。

密钥协商算法 选定了 ECDHE (椭圆曲线迪菲-赫尔曼密钥交换) 。大多数资料中介绍的都是使用 RSA ,密钥协商算法的不同会导致后续通信流程的不同,后面会详细介绍。

身份验证算法 其实就是验证服务器证书签名的,这里是 RSA 。

对称加密算法 是用来加密通信数据的。

摘要算法 用于随机数生成以及 HMAC 算法。

Certificate

服务器在发送 Server Hello 之后,会立马发送服务器的证书链信息。其实 Certificate 和 Server Hello 是在同一个数据包里面的,以降低延迟。

下图是知乎服务器返回的证书链,可以看到有两张,zhihu.com 的服务器证书和中间证书。注意,根证书通常不包含在其中。因为根证书就在计算机中,没有必要再去传输。

在上篇文章 HTTPS 为什么是安全的 ? (上) 中,我们借由 如何安全的传输信息 这个问题,引出了 HTTPS 中常用的密码学工具,对称加密,非对称加密,哈希,消息认证码,数字签名,证书 等等。这里先简单复习一下。

通信内容一般直接使用 对称加密 ,但对称加密存在 密钥传输问题

非对称加密 性能只有对称加密的几百分之一,不会用来直接加密通信内容。但是可以配合对称加密,用非对称加密保护对称加密的密钥,以解决密钥传输问题。

哈希算法 主要用于信息的完整性。

消息认证码 是一种和密钥相关联的哈希算法。它通过共享密钥,不仅能确保信息的完整性,还可以提供认证功能,确保消息来自期望的通信对象,但同样也存在密钥传输问题。

数字签名 技术使用私钥签名,公钥验证签名,同时兼具确认信息完整性,确认通信对方身份,防止否认的功能。

证书 的目的是确保公钥的合法性,它的本质就是为公钥加上数字签名。它的安全性由证书链顶端的根证书来保证。

如果你对这几个工具还不是很熟悉,就无法彻底的了解 HTTPS 的通信流程,不妨再阅读一遍 HTTPS 为什么是安全的 ? (上) 。

有了这些前置知识,下面就来深入剖析 HTTPS 。

裸奔的 HTTP

为什么需要 HTTPS ?因为 HTTP 在裸奔

针对上篇文章中提到过的安全传输信息的几个要素:

  • 保证传输内容的安全,即不传输明文
  • 防止传输内容被篡改,即可以识别篡改
  • 确认对方真的是对方,即通信双方身份的认证

由于 HTTP 是 明文传输的 ,也没有提供身份验证的方式,任何人都可以在通信链路上的任意一个节点拦截,伪造通信内容。所以 HTTP 没有满足上面几条要素的任意一条,毫无安全性可言。在错综复杂的现代互联网环境下,无疑是行不通的,这也正是 HTTPS 得以迅速发展的原因。

Chrome 对于 HTTPS 链接会在地址栏显示绿色小锁;Android 9 开始默认启用 TLS,如果需要使用 HTTP,需要进行单独配置;iOS 强制使用 HTTPS ;HTTP/2 虽然仍然支持明文传输,但 Chrome,FireFox 公开宣布只支持加密的 HTTP/2;HTTP/3 (QUIC) 内置 TLS 1.3,只能进行加密通信 …… 事实上,HTTPS 已经无处不在了。相信有一天,HTTP 将不复存在。

HTTPS = HTTP + ?

HTTP 将不复存在?这其实是个伪命题。事实上,HTTP 将永远存在。因为 HTTPS 并不是一个全新的产物,它是基于 HTTP 的。

我们回顾一下 TCP/IP 分层模型OSI 参考模型

HTTPS 为什么是安全的(下)

OSI 参考模型对通信过程中必要的功能进行了归纳,但其只是一个模型,对各层的作用做了一系列粗略的界定。TCP/IP 协议分层与 OSI 参考模型略微不同,将传输层以上全部归为应用层。上图中的 TCP/IP 协议只分了四层,但一些资料中会将其分为五层,加上了物理层,倒也并不影响理解。

HTTP 属于应用层协议,它直接与用户交互,但并不负责真正的数据传输,它依赖于传输层协议 (一般是 TCP) 来将数据发送到对端。常见的传输层协议有 TCP 和 UDP 。同样,传输层也并不真正进行数据传输,它又依赖于网络层协议,一般是 IP 协议。网络层依赖链接层和物理设备进行真正的数据传输。正是得益于良好的分层结构,让我们可以很方便的实现 HTTPS 。

有这样一句广泛流传的话:计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。(如果不行,那么就再来一层!) 用这句话来形容 HTTPS 是再适合不过了。

HTTPS 为什么是安全的(下)

在原来的分层协议中,应用层直接将明文数据交给传输层来处理。而在 HTTPS 中, 应用层和传输层之间加了一层 TLS 来负责数据的加密,这样一来,应用层和传输层无需任何改变,就可以安全传输信息了。所以除了 HTTP,理论上任何应用层协议都可以基于 TLS 进行安全传输,例如 FTPS,SMTP……

TLS 的前身是 SSL 。SSL(Secure Sockets Layer) 是网景公司设计的安全传输协议,有 1.0,2.0,3.0 三个版本,但目前均已弃用。互联网工程组 IETF 将 SSL 标准化,并改名为 TLS 。1999 年 发布了 TLS 1.0,2006 年发布了 TLS 1.1,2008 年发布了 TLS 1.2,2018 年发布了 TLS 1.3 。每个新版本都强化了性能和安全性,目前使用最为广泛的是 TLS 1.2 ,之前的版本都将在今年被废弃。

说了半天 HTTPS ,那么它到底是如何运作的呢?我听很多朋友抱怨过,流程太复杂,看过一段时间就忘了。我在这里强烈建议大家用 wireshark 抓包分析一遍,再亲手画一个流程图,这样很容易就记住了。

认证 密钥协商 数据加密

HTTPS 的整体思路很简单,它其实就是做了三件事:认证、密钥协商、数据加密

  • 通信双方身份的验证

  • 通信双方协商出一个安全的会话密钥,注意中间人攻击的问题

  • 使用会话密钥对称加密通信内容

看起来很简单,但 HTTPS 做了大量的工作来保证通信的安全。下面就来实战抓包来学习 HTTPS 的通信流程。

HTTPS 通信流程

下文以浏览器访问 https://zhihu.com 抓取到的实际通信流程进行分析。

建立 TCP 连接

TLS 是基于 TCP 连接上建立的安全层,所以第一步 三次握手 (SYN => SYN, ACK => ACK) 建立 TCP 连接是必不可少的。

Client Hello

建立 TCP 连接之后,浏览器率先发出 Client Hello 消息。

HTTPS 为什么是安全的(下)

Client Hello

挑几个重点字段说一下。

Version 表示客户端最高支持的 TLS 版本,向下兼容。上图中是 TLS 1.2 (0x0301)

Random 是客户端生成的一个随机数,后面用于生成主密钥。下文中用 client_random 表示。Random 是 32 字节,但其实随机数的长度是 28 字节,前面四个字节是 UNIX 时间戳,并没有什么意义。

Session ID 传递给服务器用于复用缓存的 TCP 连接。这里 Session ID 是有值的,但并不代表就一定会复用之前的连接,这要看服务器是否能找到该 Session ID 的连接。

Cipher Suites 是客户端支持的密码套件列表,服务器会从中选择合适的密码套件,排在第一个的优先选择。密码套件是 TLS 协议的核心,可以说它是保证 TLS 安全性的根本。密码套件决定了 TLS 使用的身份认证、密钥交换、对称加密、消息认证码的算法。在 TLS 1.2 中可选择的密码套件比较多,但在 TLS 1.3 中进行了删减,去除了部分不再安全的密码套件。

Compression Methods 表示客户端支持的压缩方法。由于存在安全性问题,一般不启用,值为 null 。

Extension 为扩展字段,可以让客户端和服务器在不更新 TLS 版本的基础上获取更多的能力。客户端可以发送服务端不理解的扩展,但服务端不能返回客户端无法理解的扩展,否则将发生错误。另外在 TLS 1.3 中,为了保证向下兼容性,并没有去修改 Version 字段,而是通过 Supported Version: TLS 1.3 这样的扩展字段来说明支持 TLS 1.3 。

Server Hello

服务端在收到 Client Hello 之后,根据客户端发来的消息内容,作出回应。

HTTPS 为什么是安全的(下)

Version 表示服务器选定使用的 TLS 版本,上图中是 TLS 1.2 (0x0303)

Random 是服务器生成的随机数,其作用和 client_random 一样,也是用来计算主密钥,下文中用 server_random 表示。现在浏览器,服务器都拥有了 client_randomserver_random 两个随机数。

Session ID 为 null 表示服务器没有可复用的 TCP 连接。因为我模拟的第一次建立 TCP 连接的完整的 HTTPS 通信流程,所以必然是没有复用的。如果 Session ID 不为空的话,其实走的是一个连接的恢复流程,这样就抓不到完整的 HTTPS 流程了。后面可以简单演示一下。

Cipher Suite 表示服务端选定的密码套件是 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 。简单画个图分析一下。

HTTPS 为什么是安全的(下)

后续的整个加密流程都会遵循该密码套件。

密钥协商算法 选定了 ECDHE (椭圆曲线迪菲-赫尔曼密钥交换) 。大多数资料中介绍的都是使用 RSA ,密钥协商算法的不同会导致后续通信流程的不同,后面会详细介绍。

身份验证算法 其实就是验证服务器证书签名的,这里是 RSA 。

对称加密算法 是用来加密通信数据的。

摘要算法 用于随机数生成以及 HMAC 算法。

Certificate

服务器在发送 Server Hello 之后,会立马发送服务器的证书链信息。其实 Certificate 和 Server Hello 是在同一个数据包里面的,以降低延迟。

下图是知乎服务器返回的证书链,可以看到有两张,zhihu.com 的服务器证书和中间证书。注意,根证书通常不包含在其中。因为根证书就在计算机中,没有必要再去传输。

在上篇文章 HTTPS 为什么是安全的 ? (上) 中,我们借由 如何安全的传输信息 这个问题,引出了 HTTPS 中常用的密码学工具,对称加密,非对称加密,哈希,消息认证码,数字签名,证书 等等。这里先简单复习一下。

通信内容一般直接使用 对称加密 ,但对称加密存在 密钥传输问题

非对称加密 性能只有对称加密的几百分之一,不会用来直接加密通信内容。但是可以配合对称加密,用非对称加密保护对称加密的密钥,以解决密钥传输问题。

哈希算法 主要用于信息的完整性。

消息认证码 是一种和密钥相关联的哈希算法。它通过共享密钥,不仅能确保信息的完整性,还可以提供认证功能,确保消息来自期望的通信对象,但同样也存在密钥传输问题。

数字签名 技术使用私钥签名,公钥验证签名,同时兼具确认信息完整性,确认通信对方身份,防止否认的功能。

证书 的目的是确保公钥的合法性,它的本质就是为公钥加上数字签名。它的安全性由证书链顶端的根证书来保证。

如果你对这几个工具还不是很熟悉,就无法彻底的了解 HTTPS 的通信流程,不妨再阅读一遍 HTTPS 为什么是安全的 ? (上) 。

有了这些前置知识,下面就来深入剖析 HTTPS 。

裸奔的 HTTP

为什么需要 HTTPS ?因为 HTTP 在裸奔

针对上篇文章中提到过的安全传输信息的几个要素:

  • 保证传输内容的安全,即不传输明文
  • 防止传输内容被篡改,即可以识别篡改
  • 确认对方真的是对方,即通信双方身份的认证

由于 HTTP 是 明文传输的 ,也没有提供身份验证的方式,任何人都可以在通信链路上的任意一个节点拦截,伪造通信内容。所以 HTTP 没有满足上面几条要素的任意一条,毫无安全性可言。在错综复杂的现代互联网环境下,无疑是行不通的,这也正是 HTTPS 得以迅速发展的原因。

Chrome 对于 HTTPS 链接会在地址栏显示绿色小锁;Android 9 开始默认启用 TLS,如果需要使用 HTTP,需要进行单独配置;iOS 强制使用 HTTPS ;HTTP/2 虽然仍然支持明文传输,但 Chrome,FireFox 公开宣布只支持加密的 HTTP/2;HTTP/3 (QUIC) 内置 TLS 1.3,只能进行加密通信 …… 事实上,HTTPS 已经无处不在了。相信有一天,HTTP 将不复存在。

HTTPS = HTTP + ?

HTTP 将不复存在?这其实是个伪命题。事实上,HTTP 将永远存在。因为 HTTPS 并不是一个全新的产物,它是基于 HTTP 的。

我们回顾一下 TCP/IP 分层模型OSI 参考模型

HTTPS 为什么是安全的(下)

OSI 参考模型对通信过程中必要的功能进行了归纳,但其只是一个模型,对各层的作用做了一系列粗略的界定。TCP/IP 协议分层与 OSI 参考模型略微不同,将传输层以上全部归为应用层。上图中的 TCP/IP 协议只分了四层,但一些资料中会将其分为五层,加上了物理层,倒也并不影响理解。

HTTP 属于应用层协议,它直接与用户交互,但并不负责真正的数据传输,它依赖于传输层协议 (一般是 TCP) 来将数据发送到对端。常见的传输层协议有 TCP 和 UDP 。同样,传输层也并不真正进行数据传输,它又依赖于网络层协议,一般是 IP 协议。网络层依赖链接层和物理设备进行真正的数据传输。正是得益于良好的分层结构,让我们可以很方便的实现 HTTPS 。

有这样一句广泛流传的话:计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。(如果不行,那么就再来一层!) 用这句话来形容 HTTPS 是再适合不过了。

HTTPS 为什么是安全的(下)

在原来的分层协议中,应用层直接将明文数据交给传输层来处理。而在 HTTPS 中, 应用层和传输层之间加了一层 TLS 来负责数据的加密,这样一来,应用层和传输层无需任何改变,就可以安全传输信息了。所以除了 HTTP,理论上任何应用层协议都可以基于 TLS 进行安全传输,例如 FTPS,SMTP……

TLS 的前身是 SSL 。SSL(Secure Sockets Layer) 是网景公司设计的安全传输协议,有 1.0,2.0,3.0 三个版本,但目前均已弃用。互联网工程组 IETF 将 SSL 标准化,并改名为 TLS 。1999 年 发布了 TLS 1.0,2006 年发布了 TLS 1.1,2008 年发布了 TLS 1.2,2018 年发布了 TLS 1.3 。每个新版本都强化了性能和安全性,目前使用最为广泛的是 TLS 1.2 ,之前的版本都将在今年被废弃。

说了半天 HTTPS ,那么它到底是如何运作的呢?我听很多朋友抱怨过,流程太复杂,看过一段时间就忘了。我在这里强烈建议大家用 wireshark 抓包分析一遍,再亲手画一个流程图,这样很容易就记住了。

认证 密钥协商 数据加密

HTTPS 的整体思路很简单,它其实就是做了三件事:认证、密钥协商、数据加密

  • 通信双方身份的验证

  • 通信双方协商出一个安全的会话密钥,注意中间人攻击的问题

  • 使用会话密钥对称加密通信内容

看起来很简单,但 HTTPS 做了大量的工作来保证通信的安全。下面就来实战抓包来学习 HTTPS 的通信流程。

HTTPS 通信流程

下文以浏览器访问 https://zhihu.com 抓取到的实际通信流程进行分析。

建立 TCP 连接

TLS 是基于 TCP 连接上建立的安全层,所以第一步 三次握手 (SYN => SYN, ACK => ACK) 建立 TCP 连接是必不可少的。

Client Hello

建立 TCP 连接之后,浏览器率先发出 Client Hello 消息。

HTTPS 为什么是安全的(下)

Client Hello

挑几个重点字段说一下。

Version 表示客户端最高支持的 TLS 版本,向下兼容。上图中是 TLS 1.2 (0x0301)

Random 是客户端生成的一个随机数,后面用于生成主密钥。下文中用 client_random 表示。Random 是 32 字节,但其实随机数的长度是 28 字节,前面四个字节是 UNIX 时间戳,并没有什么意义。

Session ID 传递给服务器用于复用缓存的 TCP 连接。这里 Session ID 是有值的,但并不代表就一定会复用之前的连接,这要看服务器是否能找到该 Session ID 的连接。

Cipher Suites 是客户端支持的密码套件列表,服务器会从中选择合适的密码套件,排在第一个的优先选择。密码套件是 TLS 协议的核心,可以说它是保证 TLS 安全性的根本。密码套件决定了 TLS 使用的身份认证、密钥交换、对称加密、消息认证码的算法。在 TLS 1.2 中可选择的密码套件比较多,但在 TLS 1.3 中进行了删减,去除了部分不再安全的密码套件。

Compression Methods 表示客户端支持的压缩方法。由于存在安全性问题,一般不启用,值为 null 。

Extension 为扩展字段,可以让客户端和服务器在不更新 TLS 版本的基础上获取更多的能力。客户端可以发送服务端不理解的扩展,但服务端不能返回客户端无法理解的扩展,否则将发生错误。另外在 TLS 1.3 中,为了保证向下兼容性,并没有去修改 Version 字段,而是通过 Supported Version: TLS 1.3 这样的扩展字段来说明支持 TLS 1.3 。

Server Hello

服务端在收到 Client Hello 之后,根据客户端发来的消息内容,作出回应。

HTTPS 为什么是安全的(下)

Version 表示服务器选定使用的 TLS 版本,上图中是 TLS 1.2 (0x0303)

Random 是服务器生成的随机数,其作用和 client_random 一样,也是用来计算主密钥,下文中用 server_random 表示。现在浏览器,服务器都拥有了 client_randomserver_random 两个随机数。

Session ID 为 null 表示服务器没有可复用的 TCP 连接。因为我模拟的第一次建立 TCP 连接的完整的 HTTPS 通信流程,所以必然是没有复用的。如果 Session ID 不为空的话,其实走的是一个连接的恢复流程,这样就抓不到完整的 HTTPS 流程了。后面可以简单演示一下。

Cipher Suite 表示服务端选定的密码套件是 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 。简单画个图分析一下。

HTTPS 为什么是安全的(下)

后续的整个加密流程都会遵循该密码套件。

密钥协商算法 选定了 ECDHE (椭圆曲线迪菲-赫尔曼密钥交换) 。大多数资料中介绍的都是使用 RSA ,密钥协商算法的不同会导致后续通信流程的不同,后面会详细介绍。

身份验证算法 其实就是验证服务器证书签名的,这里是 RSA 。

对称加密算法 是用来加密通信数据的。

摘要算法 用于随机数生成以及 HMAC 算法。

Certificate

服务器在发送 Server Hello 之后,会立马发送服务器的证书链信息。其实 Certificate 和 Server Hello 是在同一个数据包里面的,以降低延迟。

下图是知乎服务器返回的证书链,可以看到有两张,zhihu.com 的服务器证书和中间证书。注意,根证书通常不包含在其中。因为根证书就在计算机中,没有必要再去传输。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » HTTPS 为什么是安全的(下)求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们