计算机网络之HTTPS


概念

HTTPS = HTTP + SSL/TLS

HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是经过SSL/TLS加密的HTTP协议,端口号为443。其设计的主要目的是,提供对网站服务器的身份认证、保护交换数据的隐私与完整性。

TLS/SSL

概述

TLS/SSL是介于TCP和HTTP之间的一层安全协议

非对称加密的手段传递密钥,然后用密钥进行对称加密传递数据

SSL(Secure Socket Layer) 1994年由 浏览器开发商Netscape公司 率先倡导研发,为数据通讯提供安全支持,开发了最初的几个版本SSL 1.0、SSL 2.0、SSL 3.0。

TLS(Transport LayerSecurity)前身为SSL,1999年从 3.1 开始被 IETF(Internet Engineering Task Force,Internet 工程任务组)标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到;TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2;

对称加密和非对称加密

对称加密

对称加密,顾名思义就是加密和解密都是使用同一个密钥,常见的对称加密算法有 DES、3DES 和 AES 等。

  • 优点:算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的数据。
  • 缺点:
    1. 交易双方需要使用相同的密钥,也就无法避免密钥的传输,而密钥在传输过程中无法保证不被截获,因此对称加密的安全性得不到保证
    2. 每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一密钥,这会使得发收信双方所拥有的钥匙数量急剧增长,密钥管理成为双方的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高

非对称加密

非对称加密,顾名思义就是加密和解密需要使用两个不同的密钥公钥(public key)和私钥(private key)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

  • 优点:算法公开,加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。
  • 缺点:计算量比较大,加密和解密速度相比对称加密慢很多,加密的内容长度不能超过公钥的长度

握手过程

RSA算法

  1. “client hello”:客户端通过发送”client hello”消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本密码组合以供服务器进行选择,还有一个”client random“随机字符串。
  2. “server hello”:服务器发送”server hello”消息对客户端进行回应,该消息包含了数字证书服务器选择的密码组合和”server random“随机字符串。
  3. 证书验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:
    1. 检查数字签名
    2. 验证证书链 (这个概念下面会进行说明)
    3. 检查证书的有效期
    4. 检查证书的撤回状态 (撤回代表证书已失效)
  4. 计算“Pre-Master Secret”:客户端向服务器发送另一个随机字符串”premaster secret (预主密钥)“,这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。
  5. 使用私钥:服务器使用私钥解密”premaster secret”。
  6. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY
  7. 客户端就绪:客户端发送经过共享密钥 KEY加密过的”finished”信号。
  8. 服务器就绪:服务器发送经过共享密钥 KEY加密过的”finished”信号。
  9. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

DH算法

廖雪峰对DH算法的简单介绍

  1. “client hello”:客户端通过发送”client hello”消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本密码组合以供服务器进行选择,还有一个”client random“随机字符串。
  2. “server hello”:服务器发送”server hello”消息对客户端进行回应,该消息包含了数字证书服务器选择的密码组合和”server random“随机字符串。
  3. 证书验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:
    1. 检查数字签名
    2. 验证证书链 (这个概念下面会进行说明)
    3. 检查证书的有效期
    4. 检查证书的撤回状态 (撤回代表证书已失效)
  4. 服务器密钥交换消息:服务器生成一对公钥和私钥,将公钥发送给客户端,服务器密钥交换完成后,服务器将发送Server Hello Done 消息。
  5. 客户端密钥交换:客户端生成一对公钥和私钥,将公钥发送给服务器。
  6. 计算“Pre-Master Secret”:客户端和服务端使用DH算法生成一个相同的”premaster secret (预主密钥)“。
  7. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY
  8. 客户端就绪:客户端发送经过共享密钥 KEY加密过的”finished”信号。
  9. 服务器就绪:服务器发送经过共享密钥 KEY加密过的”finished”信号。
  10. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

使用Diffie Hellman算法进行TLS密钥交换具有优势。客户端和服务器都为每个新会话生成一个新密钥对。一旦计算出预主密钥,将立即删除客户端和服务器使用DH算法创建的私钥。这意味着私钥永远不会被窃取,确保完美的前向保密

消息验证代码(MAC)和TLS数据完整性

TLS为客户端和服务器分配了单独的密钥,它们都来自主密钥本身,换句话说,主密钥不直接用于加密数据,而是将单独的加密密钥用于客户端和服务器。由于双方都有两个密钥,服务器用其密钥加密的数据可以由客户端轻松解密,反之亦然。

TLS还具有用于对称密钥加密的附加安全机制。

窃听者可以对传输中的加密数据进行两种可能的攻击:尝试解密数据或尝试修改数据。只要密钥安全,我们就可以认为解密基本上是不可能的,但如果是修改数据呢?客户端和服务器是怎么知道攻击者没有修改过数据呢?如上所述,TLS不仅仅是加密数据,还可以保护数据,使其免受未检测到的修改,换句话说,TLS可以检查数据的完整性。

当服务器或客户端使用主密钥加密数据时,它还会计算明文数据的校验和(哈希值),这个校验和称为消息验证代码(MAC)。然后在发送之前将MAC包含在加密数据中。密钥用于从数据中生成MAC,以确保传输过程中攻击者无法从数据中生成相同的MAC,故而MAC被称为HMAC(哈希消息认证码)。另一方面,在接收到消息时,解密器将MAC与明文分开,然后用它的密钥计算明文的校验和,并将其与接收到的MAC进行比较,如果匹配,那我们就可以得出结论:数据在传输过程中没有被篡改。

客户端和服务器必须使用相同的散列算法来创建以及验证MAC,例如密码套件TLS_ECDHE_ECDSA_WITH_AES_128_GCM_ SHA256中的SHA256 是用于处理HMAC的哈希函数,为了提高安全性,客户端和服务器使用MAC密钥。让我们看看这些是什么。

数字证书

概念

在非对称加密通信过程中,服务器需要将公钥发送给客户端,在这一过程中,公钥很可能会被第三方拦截并替换,然后这个第三方就可以冒充服务器与客户端进行通信,这就是传说中的“中间人攻击”(man in the middle attack)。解决此问题的方法是通过受信任的第三方交换公钥,具体做法就是服务器不直接向客户端发送公钥,而是要求受信任的第三方,也就是证书认证机构 (Certificate Authority, 简称 CA)将公钥合并到数字证书中,然后服务器会把公钥连同证书一起发送给客户端,私钥则由服务器自己保存以确保安全。

证书校验

要证明证书的真实性,通常依赖于一组受信任的第三方证书颁发机构(Certificate authorities, CA)。验证 TLS 证书有效性的方法如下:

  1. 检查证书是否是浏览器中受信任的根证书机构颁发

    证书都是上级 CA 签发的,上级的 CA 可能还有上级,直到找到根证书。

  2. 检查证书中的证书吊销列表(CRL),看证书是否已经被吊销

    证书被吊销后,会被记录在证书吊销列表中,CA 会定期发布 CRL。应用程序可以根据 CRL 来检查证书是否被吊销。

  3. 通过在线证书状态协议(OCSP)检查证书是否有效

    CA 会提供实时的查询接口,用来查询证书的有效性。在线实时查询会使得 TLS 握手时间延长,因为浏览器需要等待查询结束才能继续 TLS 握手。至于使用在线查询还是证书中的吊销列表,由浏览器决定。

  4. 检查证书是否过期

  5. 检查域名和证书中的域名是否一致

  6. 查询网站是否被列入了欺诈网站黑名单

    这一步 IE7 会进行,IE7 会到欺诈网站数据库,查询网站是否被列入了欺诈黑名单。

经过了以上步骤,浏览器中才会显示安全锁的标志。任意一个步骤出问题,浏览器都无法建立安全链接,并最终提示“您的链接不是私密链接”。

整个HTTPS的传输过程

参考

SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法

SSL/TLS协议详解(中)——证书颁发机构

SSL/TLS协议详解(下)——TLS握手协议

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

HTTPS 详解二:SSL / TLS 工作原理和详细握手过程

SSL协议之数据加密过程详解

HTTPS协议详解

深入探究 SSL/TLS 协议


评论
 上一篇
Web缓存之浏览器缓存 Web缓存之浏览器缓存
概述 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。 当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。这样带来的好处有:缓解服务器端压力,提升性能(获取资源的耗时更短了)。对
2020-10-11
下一篇 
计算机网络之HTTP 计算机网络之HTTP
HTTP简介 HTTP协议是基于TCP/IP协议之上的应用层协议 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通
  目录