# https

# 什么是 https

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

┌───────────────────────┐
│          HTTP         │
└───────────┬───────────┘
┌───────────┴───────────┐
│        TLS/SSL        │
└───────────┬───────────┘
┌───────────┴───────────┐
│          TCP          │
└───────────┬───────────┘
┌───────────┴───────────┐
│          IP           │
└───────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12

# 什么是 TLS 和 SSL

# SSL(Secure Socket Layer 安全套接层)

简而言之,SSL 是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止网络犯罪分子读取和修改任何传输信息。

最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入。

# TLS(Transport Layer Security 安全传输层协议),

在 SSL 更新到 3.0 时,IETF 对 SSL 3.0 进行了标准化,标准化后的 IETF 更名该标准为 TLS 1.0,可以看做是 SSL 3.1 版本。

与此同时,IETF 还发布 RFC2246-TLS加密协议详解 (opens new window)

# TLS/SSL 区别

两者通常都会被叫做 SSL,TLS 其实是 SSL 的标准化的产物,并且现在网站基本使用的是 TLS。

TLS 在 SSL 基础上改进内容:

  • 对于消息认证使用密钥散列法。TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络上传送时,该代码确保记录不会被变更。HMAC 比 SSL 使用消息认证代码(MAC) 功能更安全。

  • 增强的伪随机功能(PRF)。PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

  • 改进的已完成消息验证。TLS 和 SSL 都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于 PRF 和 HMAC 值之上,这也比 SSL 更安全。

  • 一致证书处理。与 SSL 不同,TLS 试图指定必须在 TLS 之间实现交换的证书类型。

  • 特定警报消息。TLS 提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS 还对何时应该发送某些警报进行记录。

# 加密算法

TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

# 对称加密算法

加密和解密同用一个密钥。

优点:

解决了 HTTP 中消息保密性的问题。

缺点:

客户端和服务器共享一个密匙,这样就使得密匙特别容易泄露,所以很难保证消息来源的可靠性、消息的完整性和准确性。

# 非对称加密算法

客户端和服务端均拥有一个公匙和一个私匙。公匙可对外暴露,私匙仅自己可见。使用公匙加密的消息,只有对应的私匙才能解开。

优点:

解决了 HTTP 中消息保密性问题,使得私匙泄露的风险降低,所以较大程度上保证了消息的来源性及消息的准确性和完整性。

缺点:

公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容。

最重要的是,非对称加密的性能相对于对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。

# 数字证书

# 为什么需要数字证书?

  • 服务端的公钥可能被攻击者拦截更改,所以需要一个值得信任的第三方证明公钥确实是服务端的公钥,这就是证书颁发机构(Certificate Authority,简称CA)。CA 数量并不多,客户端内置了所有受信任 CA 的证书。

  • 数字签名能确定消息的完整性,证明数据未被篡改。

# 数字证书申请

  1. 服务器本地生成一对密匙,然后拿着公匙及其他信息(如企业名称)去 CA 申请数字证书

  2. CA通过线上、线下等多种手段验证申请者提供信息的真实性。

  3. 如信息审核通过,CA 在拿到这些信息后,会选择一种单向 Hash 算法(如常见的 MD5)对这些信息进行加密,加密后的东西称之为摘要

  4. 单向 Hash 算法有一种特点是单向不可逆,对输入很敏感,只要原始内容有一点变化,加密后的数据都会完全不一样,这样就防止了信息被篡改。

  5. 生成摘要后,CA 会用自己的私匙对摘要进行加密,摘要加密后的数据称为数字签名

  6. 最后,CA 将会把我们的申请信息和数字签名整合在一起,由此生成数字证书,颁发给申请者。

证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。

# 数字证书验证

客户端收到服务端的证书,读取证书中的相关的明文信息,采用相同的单向 Hash 算法计算得到信息摘要,然后利用对应 CA 的公钥解密签名数据,对比证书的信息摘要是否一致。

同时,还会继续验证上一级证书是否有效,这是一个递归的过程,直到验证到根证书。

如果没通过验证,则会显示警告信息。

# HTTPS 加密过程

由于对称加密算法速度快,客户端和服务端的消息通信使用的是对称加密。但是对称加密算法的秘钥需要通过非对称加密算法进行双方交换。

  1. 客户端请求连接

  2. 服务端将自己的数字证书发送给客户端

  3. 客户端通过数字证书验证客户端身份真实性,然后使用伪随机数生成器生成加密所使用的对称密钥,再用证书携带的公钥加密这个秘钥,发送给服务端。

  4. 服务端收到消息后,用自己的私钥解密,获得客户端确定的对称加密算法的秘钥。至此,双方都持有了相同的对称密钥。

  5. 之后的消息全部使用双方确定的对称加密算法的秘钥进行加密传输

最后更新时间: 7/24/2021, 5:02:34 PM