# 网络安全协议 ## HTTPS的特点 **1. 特点** - 信息加密:采用对称加密+非对称加密的混合加密的方式,对传输的数据加密,实现信息的机密性,解决了窃听的风险。 - 校验机制:用摘要算法为数据生成独一无二的「指纹」校验码,指纹用来校验数据的完整性,解决了被篡改的风险。 - 身份证书:将服务端的公钥放入到CA数字证书中,解决了服务端被冒充的风险。 **2. 优点** - 在数据传输过程中,使用秘钥加密,安全性更高 - 可认证用户和服务器,确保数据发送到正确的用户和服务器 **3. 缺点** - 握手阶段延时较高:在会话前还需进行SSL握手 - 部署成本高:需要购买CA证书;需要加解密计算,占用CPU资源,需要服务器配置或数目高 ## HTTPS 和 HTTP 有哪些区别? 两者的主要区别在于安全性和数据加密: 1. **加密层**:`HTTPS` 在`HTTP` 的基础上增加了`SSL/TLS` 协议作为加密层,确保数据传输的安全性。而`HTTP` 数据传输是明文的,容易受到攻击。 2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。 3. **端口**:`HTTPS` 通常使用端口`443` ,而`HTTP` 使用端口80。 4. HTTPS 协议需要向 CA 申请数字证书,来保证服务器的身份是可信的。 PS:SSL(安全套接层)和TLS(传输层安全协议)是用于确保网络通信安全的协议。它们的主要功能是提供 /对数据的加密/ 、 /完整性/ 和 /身份验证/ ,保证数据在客户端和服务器之间的安全传输。TLS是SSL的后继版本,增强了安全性。 两者区别的总结如下: | **特性** | **HTTP** | **HTTPS** | | :------------: | :--------------------------: | :--------------------------: | | **安全性** | 数据明文传输,易被窃听和篡改 | 数据加密传输,确保安全 | | **端口号** | 80 | 443 | | **使用协议** | 直接使用 TCP | 使用 SSL/TLS 加密层 | | **性能** | 快,但不安全 | 略有开销,现代优化性能已提升 | | **浏览器表现** | 显示“不安全”警告 | 显示安全锁标志 | | **SEO 优势** | 无 | 优先排名,更利于 SEO | | **证书需求** | 无需证书 | 必须配置 SSL/TLS 证书 | | **适用场景** | 低安全性要求场景 | 所有需要数据保护的场景 | ## HTTPS 工作原理是什么?它是如何实现数据加密的? #### 简要回答 - HTTPS 的工作原理: - HTTPS 通过在 HTTP 协议和 TCP 协议之间加入 **SSL/TLS 协议层**来实现安全传输。它确保数据在客户端和服务器之间的传输过程中得到**加密**、**身份验证**和**完整性保护**,使得数据在传输过程中无法被窃听或篡改。HTTPS 默认使用 `443` 端口。 - HTTPS 实现数据加密的步骤: 1. 建立 TCP 连接。 2. 进行 SSL/TLS 握手,协商加密算法和密钥。**TLS握手过程如下**: **① Client Hello(客户端问候)** **② Server Hello(服务器问候)** **③ Certificate(证书)** **④ Certificate Verification(证书验证)** **⑤ Key Exchange(密钥交换)** **⑥ Session Key Generation(会话密钥生成)** **⑦ Change Cipher Spec(更改密码规范)** **⑧ Finished(完成)** 3. 客户端和服务器使用协商好的密钥进行**加密通信**。 ------ #### 详细回答 - HTTPS 的工作原理: - HTTPS (Hypertext Transfer Protocol Secure):HTTPS 通过在 HTTP 协议和 TCP 协议之间加入 **SSL/TLS 协议层**来实现安全传输。它确保数据在客户端和服务器之间的传输过程中得到**加密**、**身份验证**和**完整性保护**,使得数据在传输过程中无法被窃听或篡改。HTTPS 默认使用 `443` 端口。 - HTTPS 实现数据加密的步骤: 1. **建立 TCP 连接:** 客户端首先通过 TCP 三次握手与服务器建立连接,这是可靠传输的基础。 2. **SSL/TLS 握手:** 建立 TCP 连接后,客户端和服务器开始进行 SSL/TLS 握手,协商加密算法和密钥。**握手过程如下:** **① Client Hello(客户端问候):** 客户端发送 Client Hello 消息,包含客户端支持的 **SSL/TLS 版本**、**加密算法套件列表**、**随机数**等信息。 **② Server Hello(服务器问候):** 服务器从客户端提供的加密算法套件列表中选择一个,并返回服务器的 **SSL/TLS 版本**、**选择的加密算法套件**、**随机数**等信息。 **③ Certificate(证书):** 服务器将自己的数字证书发送给客户端。 证书包含了服务器的公钥、域名、有效期等信息。 **④ Certificate Verification(证书验证):** 客户端验证服务器的数字证书是否有效,包括:证书是否由受信任的 CA 机构颁发;证书是否过期;证书上的域名是否与服务器域名一致。 **⑤ Key Exchange(密钥交换):** 客户端生成一个**预主密钥 (Pre-master secret)** ,使用服务器证书中的**公钥**对其进行加密,然后发送给服务器 (注意:不同的密钥交换算法会进行不同的处理,例如 RSA, Diffie-Hellman 等) 。服务器接收到加密的预主密钥后,使用自己的**私钥**进行解密,获得明文的预主密钥(这一步是在服务器内部完成的,不会产生额外的网络消息) **⑥ Session Key Generation(会话密钥生成):** 客户端和服务器分别使用客户端随机数、服务器随机数和**预主密钥**,通过相同的算法生成**会话密钥(Session Key)**。 会话密钥用于后续加密数据的对称加密算法。 **⑦ Change Cipher Spec(更改密码规范):** 客户端和服务器分别发送 Change Cipher Spec 消息,通知对方后续使用**加密通信**。 **⑧ Finished(完成):** 客户端和服务器分别发送 Finished 消息,**验证**握手过程是否成功。 3. **加密通信:** 握手完成后,客户端和服务器使用会话密钥对后续传输的数据进行加密和解密,保证数据传输的安全。 ------ #### 知识拓展 1. HTTPS工作原理示意图如下 : ![HTTPS_principle.jpg](http://cdn.notes.kamacoder.com/ebabb5a5-772a-49b1-a4ff-b34ccaee13b2.jpg) 2. 为什么建立 TLS 握手时采用非对称加密? - TLS 握手阶段的首要目标是安全地协商出一个只有客户端和服务器知道的共享密钥(即会话密钥)。为了防止中间人攻击,需要使用非对称加密来保护密钥交换过程。 - **非对称加密的特点是**:使用公钥加密的数据只能用对应的私钥解密,反之亦然。服务器的公钥可以公开,客户端可以使用公钥加密预主密钥,然后发送给服务器。由于只有服务器拥有私钥,因此只有服务器才能解密预主密钥,从而保证了密钥交换的安全性。 3. 为什么建立 TLS 握手后,HTTPS 正常通信都采用对称加密? - 虽然非对称加密可以保证密钥交换的安全性,但其加密和解密速度较慢,不适合加密大量数据。 - **对称加密的特点是**:加密和解密使用同一个密钥,速度快,效率高。因此,在 TLS 握手完成后,客户端和服务器会使用协商好的会话密钥(Session Key)进行对称加密通信,以提高数据传输的效率。 - HTTPS 采用混合加密的方式,结合了非对称加密和对称加密的优点,既保证了安全性,又保证了效率。 4. 对于 HTTP/3,HTTPS 实现数据加密的步骤为: 1. **建立 QUIC 连接:** 客户端和服务器首先建立 QUIC 连接。 QUIC 协议本身就包含了**拥塞控制**、**可靠传输**和**安全传输**等功能,因此不再需要 TCP 协议。 2. **内置 TLS 1.3 握手:** QUIC 协议强制使用 TLS 1.3 进行加密。 在建立 QUIC 连接的同时,QUIC 协议会自动进行 TLS 1.3 握手,协商加密算法和密钥。 相比于 TCP + TLS 的握手过程,QUIC 的握手过程更加高效,只需要 1-RTT (Round-Trip Time),甚至在某些情况下可以实现 0-RTT。 3. **加密数据传输:** 客户端和服务器使用 QUIC 协议提供的加密通道进行数据传输。 所有的数据都会被 QUIC 协议加密,保证数据传输的安全性和可靠性。