HTTPS工作原理详解:从加密基础到TLS握手流程

本文深入解析HTTPS工作原理,涵盖HTTP的局限性、TLS握手过程、对称与非对称加密区别、CA证书验证机制,以及为何传输阶段使用对称加密。通过图文并茂的方式揭示网络安全背后的技术原理。

HTTPS工作原理

超文本传输协议(HTTP)是一种用于传输超媒体文档(如HTML)的应用层协议。它最初设计用于Web浏览器和Web服务器之间的通信,但随着后续发展,其应用不仅限于此,成熟的软硬件环境使其成为互联网的基础设施。我相信您一定接触过它,它就像软件开发中的水或空气一样普遍。

但作为程序员,我们可能会因其普遍性而忽略许多关键信息,导致在日常工作开发中出现一些问题却不知道如何解决。本文将向您介绍其中一个关键信息——HTTPS。

为什么需要HTTPS?

它为什么出现?它出现是为了解决什么问题? 要回答上述问题,我们需要先分析HTTP的特点。 HTTP的特点是简单、灵活、易于扩展,但同时也是无状态的(您可以使用Cookie技术实现"有状态"),并且以明文传输,这意味着其数据完全可见,容易被窃听或伪造。

同时,HTTP被广泛使用,因此在线支付等高安全性要求的场景需要相应的安全措施,于是HTTPS出现了。

什么是HTTPS?

HTTPS的RFC文档内容非常少。它规定了一个新的协议名称"HTTPS",默认端口号为443,即在TCP和HTTP之间插入一个"安全层"。

这个安全层,顾名思义,对发送的数据进行加密,对接收的数据进行解密,使得中间人无法窃取信息。那么只要理解这个安全层,您也就理解了HTTPS。 SSL是安全套接字层,位于OSI模型中的第6层(表示层)。它由Netscape于1994年发明。有两个版本,v2和v3,v1因其缺陷从未公开。 当SSL发展到v3时,它证明了自己是一个非常优秀的安全通信协议,因此互联网工程组IETF于1999年将其重命名为TLS(传输层安全),并正式标准化,版本号从1.0重新计算,因此TLS 1.0实际上是SSL 3.1。 目前,TLS已经发展了三个版本,分别是2006年的1.1、2008年的1.2和2018年的1.3,每个新版本都在持续增强安全性和性能。目前最广泛使用的是TLS 1.2,所以让我们揭开TLS 1.2的秘密!

HTTPS(TLS 1.2)的秘密

让我先解释上图: 握手阶段:

  1. 客户端生成一个客户端随机数(client-random),然后将其支持的对称密码套件和非对称密码套件传递给服务器。
  2. 服务器接收后,将从加密套件中选择要使用的加密算法,生成一个服务器随机数(server-random)并将服务的证书传递给客户端。
  3. 客户端接收后,首先验证证书。如果证书有效,它将生成一个预主随机数(pre-master random number),使用证书中的公钥和选择的非对称加密算法进行加密,然后传递给服务器。它还会附带一个客户端完成确认消息。
  4. 服务器接收加密的预主随机数,可以使用私钥解密。然后将服务器完成确认消息传递给客户端。

传输阶段: 握手阶段结束后,两端已经拥有客户端随机数、服务器随机数和预主随机数。混合它们生成最终的主密钥(master secret),并使用先前选择的对称加密算法对需要传输的数据进行加密和解密。 天啊,这么麻烦吗?我只是想发送数据而已?当我第一次看到它时也是这么想的。 让我们耐心仔细看看,其实并没有那么难。

什么是对称加密和非对称加密?

让我们先解释上面提到的对称加密和非对称加密。 对称加密意味着加密和解密使用相同的密钥。非对称加密有两个密钥,A和B。如果您使用A密钥加密,只能使用B密钥解密;反之,如果您想使用B密钥加密,只能使用A密钥解密。 在HTTPS的握手阶段,我们使用非对称加密,为什么?假设我们使用对称加密:

从上图可以看出,传递的客户端随机数、服务随机数和对称加密套件都是明文,这导致如果黑客获取数据,他们可以生成相同的密钥,从而破解数据。 如果我们使用非对称加密,客户端加密的预主随机数只能由服务器存储的密钥解密。

什么是CA证书?

因为一旦黑客使用DNS劫持,将用户想要访问的IP地址替换为黑客的IP地址,请求将直接发送到黑客的服务。他在自己的服务上实现了公钥和私钥,而客户端完全不知道! 所以我们需要CA(证书颁发机构)证书机构帮助我们证明这个服务是我们想要访问的服务!

如何检查CA证书的有效性?

客户端将按照以下流程进行验证:

  1. 检查证书是否已过期
  2. 检查是否被CA吊销
  3. 检查证书是否由CA机构颁发。我们将使用原始证书信息计算消息摘要,使用CA公钥解密证书中的数字签名,然后将消息摘要与数字签名进行比较。
  4. 证明CA组织的合法性。CA认证链是树形结构,逐步找到根CA证书。根CA证书(自签名证书)内置在系统中。要求非常严格。如果根CA证书有效,也证明证书有效。但如果恶意软件将不合法的根CA证书注入用户的系统,那就没有办法了。

为什么传输阶段使用对称加密?

这是因为对称加密算法通常使用位运算,而非对称加密主要是RSA中一些大数乘法的计算,因此非对称加密的效率非常低,会严重影响传输速度,使用户体验非常差。而我们在握手阶段生成的主密钥足够安全,因此我们可以在传输阶段使用对称加密。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计