一文让你轻松掌握 HTTPS
原作者:UC International R&D Zehara
写在开头:欢迎来到“UC国际科技”公众号。除了原创作品外,我们还提供有关客户端、服务器、算法、测试、数据、前端等方面的高质量技术文章。还有翻译。
1. 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握手的大致流程如下:
https://带您了解一下访问www.baidu.com的握手过程中的一些重要环节。
Client Hello Client Hello是客户端发起TLS握手的第一步,主要包含一些信息。
1. 客户端支持的最高TLS版本号
2.后续对称密钥推导算法中使用的随机数
3. 客户支持的密码套件列表
4. 扩展你的信息
服务器您好1。根据客户端支持的最高协议版本决定使用哪个TLS 版本。
2. 根据客户端支持的密码套件列表,选择要使用的密码套件。这意味着确定密钥交换算法、数据传输的对称加密算法等。
3. 生成随机数,用于后续的对称密钥推导算法。
服务器证书 返回服务器的证书。这是一个包含中间证书的证书链。
服务器密钥交换 TLS 握手过程基于密码套件确定,步骤不同。
当密码套件选择DH(或ECDHE)作为对称密钥交换算法时,对称密钥由客户端和服务器自己派生。这时,客户端和服务器各自需要操作自己生成的公钥。还有一个服务器密钥交换步骤。
当选择RSA算法时,没有服务器密钥交换步骤,因为称为预主密钥的对称密钥由客户端生成、加密并发送到服务器以派生密钥。
客户端密钥交换 前面提到,如果交换算法是DH(或ECDHE),这里发送的是公钥,服务器用它来生成对称私钥。
如果交换算法是RSA,那么这里发送的是使用服务器公钥加密的预主密钥。
经过这一步,客户端和服务器就可以获得发送过程中所需的对称加密密钥。
更改密码规范从上图中可以看出,在客户端密钥交换之后,客户端和服务器上都会有更改密码规范的请求。在此步骤中,每种算法根据其生成的对称密钥对握手期间所有数据的摘要进行加密,并将其发送给对方。一是验证对称算法私钥的准确性,二是验证握手过程中的数据没有被篡改。
2.证书管理
2.1 什么是证书?
上面我们多次提到证书这个词,那么什么是证书呢?证书是网络通信中使用的身份证明文件,主要用于用户、非对称加密的公钥等。包含证书、颁发者、颁发者签名、有效期等信息。
2.2 哪些证书是可信的
证书是识别您身份的文件。那么我们如何知道这个文件是否可信呢?首先我们来看看证书是如何生成和验证的。
如上图所示,在生成证书时,颁发者(图中的签名者)首先使用摘要算法计算出摘要值,然后使用自己的私钥对摘要进行签名或加密。写在证书的中间。用户获得证书后,使用证书中的摘要算法计算摘要值,然后使用证书中的公钥解密签名信息并解密明文(由颁发者计算)。如果两个值相同,则说明证书内容没有被篡改。
上面给出了证书生成和验证的过程的一个思路,但是即使发现证书的内容没有被篡改,也不意味着证书是可以信任的。攻击者使用自己生成并提供给他的私钥对。因此,为了检查颁发者是否可信,引入了证书链的概念,如下所示。
在第1.3 章的TLS 握手中,当服务器颁发证书时,它会颁发包含中间证书的证书链,因此它必须检查我提到的站点证书的颁发者是否可信。需要逐层向上验证颁发者的证书。
验证证书链时,验证应该在什么级别结束?
很多人都听说过CA,它是一个数字证书颁发机构,意味着这个证书以及这个证书颁发的任何辅助证书都是可信的,这是一个可以使用的证书。除此之外,用户还可以手动将他们认为可信的证书添加到信任列表中。验证证书链时,如果已验证的证书已在信任列表中,则站点证书将被视为受信任。浏览器仍然认为一些旧的或不足的算法安全级别是不安全的并发出警告消息)。
以下是Chrome 浏览器信任列表。
2.3 如何吊销证书
由于私钥受损或证书算法不安全等原因,此时必须吊销证书。通信双方可以根据证书中指定的验证地址来验证证书链中每个证书的状态。目前有两种撤销证书的方法。
证书吊销列表(CRL)。 CRL 会在更新时定期发布或可通过HTTP 访问。这是所有已撤销证书的列表。这种方法有两个缺点。一是文件变大,二是客户端缓存了CRL文件,无法立即续订新吊销的证书。
在线证书状态协议(OCSP),一种实时检查证书状态的机制。
3.密码套件
3.1 什么是密码套件?
除了证书之外,我们在实现TLS 握手过程时还使用了不起眼的术语“密码套件”。什么是密码套件?如下图:
如上图所示,每一行都是一个密码套件。第一部分是密码套件的名称,后面是密码套件包含内容的描述。密码套件是HTTPS安全的基础,主要包括密钥交换算法、签名认证算法、对称加密算法和摘要验证算法。
Kx 是一种密钥交换算法,用于在握手中交换对称密钥时加密私钥。 Au是一种签名认证算法,需要在握手过程中对握手内容进行签名验证。 Enc是一种对称加密算法,是握手成功后数据传输所使用的加密算法。 Mac 是一种摘要检查算法,用于确保消息完整性。图中的一些密码套件是Mac=AEAD。这些密码套件代表一种对称加密算法,其本身可以保证消息完整性并且不需要摘要算法。
3.2 如何选择密码套件
选择密码套件时需要考虑两个主要方面:安全性和性能。目前主流的密钥交换算法是ECDHE,它在DH算法的基础上增加了椭圆曲线算法,具有显着的性能和安全优势。主流的对称加密算法是AES算法的GCM模式。 GCM模式支持加密和解密的并行计算,并且在Intel处理器上有特殊的优化。
推荐文章:
JS如何决定是否安装Android APP?
《UC国际科技》致力于与您分享优质技术文章。
请关注我们的公众号,并将文章分享给您的朋友。
参考:K码farmer-http://kmanong.top/kmn/qxw/form/home?top_cate=28
原创文章,作者:共创,如若转载,请注明出处:https://www.sudun.com/ask/94367.html