欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > WebSocket(WS)协议系列(四)SSL/TLS协议

WebSocket(WS)协议系列(四)SSL/TLS协议

2025/3/9 21:12:52 来源:https://blog.csdn.net/pillpeople/article/details/146083619  浏览:    关键词:WebSocket(WS)协议系列(四)SSL/TLS协议

SSL(Secure Sockets Layer) 和 TLS(Transport Layer Security) 是用于在网络上实现安全通信的协议,它们通常用于加密数据传输,保护数据免受窃取、篡改和伪造。虽然 SSL 已被逐步淘汰,现代网络通信大多使用 TLS,但很多时候,我们仍然会把 SSL/TLS 一起提及,通常理解为同一个概念。

SSL/TLS协议是什么?

SSL 是最初由 Netscape 开发的一种加密协议,目的是在计算机网络中提供加密通信。它最早发布于 1994 年,但由于安全漏洞,它在 2015 年被废弃
TLS 是 SSL 的继任者,它是基于 SSL 设计的,但增强了安全性。TLS 1.0 于 1999 年发布,是 SSL 的改进版本,后续发布了多个版本,如 TLS 1.1、1.2、以及目前的 TLS 1.3(2018 年发布)。

SSL/TLS的作用

1.数据加密:
SSL/TLS 通过加密技术确保传输的数据无法被第三方读取。这是非常重要的,特别是在互联网上传输敏感信息时(例如密码、信用卡信息、个人身份数据等)。
加密有两种方式:对称加密(双方使用相同的密钥进行加密解密)和 非对称加密(使用公钥和私钥进行加密和解密)。

2.身份验证:
SSL/TLS 通过使用证书(数字证书)来验证通信双方的身份。这个证书由 证书颁发机构(CA) 签发,确保你正在与一个真实且受信任的服务器进行通信。
通过证书,客户端(比如浏览器)可以验证服务器的身份,防止与恶意伪装的服务器进行通信。

3.数据完整性:
SSL/TLS 通过 消息认证码(MAC) 来保证传输的数据没有在传输过程中被篡改。如果数据被修改,接收方可以通过 MAC 检测到篡改行为,防止数据丢失或伪造。

SSL/TLS 工作流程

SSL/TLS 的工作主要分为两个阶段:

TLS 握手(TLS Handshake):用于身份验证和密钥交换
数据传输(Data Transmission):使用对称加密进行安全通信

阶段 1:TLS 握手

TLS 握手的目标是:

确认客户端和服务器可以使用 TLS 进行安全通信
服务器提供数字证书,以证明自己的身份
协商使用的加密算法
安全地交换会话密钥,用于后续的加密通信

TLS 握手的流程如下:

步骤 1:客户端 Hello(Client Hello)

1.客户端向服务器发送“Client Hello”消息,其中包含:
客户端支持的 TLS 版本(如 TLS 1.2 或 TLS 1.3)
客户端支持的 加密算法(Cipher Suites)
一个 随机数(Client Random):稍后用于生成加密密钥

步骤 2:服务器 Hello(Server Hello)

2.服务器收到 Client Hello 后,发送“Server Hello”消息,其中包含:
服务器选择的 TLS 版本
服务器选择的 加密算法
服务器自己的 随机数(Server Random)
服务器的 数字证书(SSL/TLS 证书)(包含服务器的公钥)

3.客户端验证服务器的证书:
检查服务器的证书是否由 受信任的证书颁发机构(CA) 签发
检查证书是否过期
验证证书中的 域名是否匹配 服务器的域名
如果证书不可信,TLS 连接会终止。

步骤 3:会话密钥的生成

根据不同的 TLS 版本,客户端和服务器使用不同的方法来生成会话密钥:

(1)TLS 1.2 及之前:RSA 密钥交换

4.客户端生成一个 “Pre-Master Secret”(预主密钥)
这个 “Pre-Master Secret” 是一个随机数
客户端用服务器的公钥加密这个 Pre-Master Secret,然后发送给服务器
服务器用自己的 私钥 解密,得到 Pre-Master Secret

5.客户端和服务器使用相同的算法计算会话密钥
计算方式:
Session Key = Pre-Master Secret + Client Random + Server Random
这个会话密钥是对称密钥,将用于加密后续的数据通信

(2)TLS 1.3:ECDHE(椭圆曲线 Diffie-Hellman)密钥交换

TLS 1.3 不再使用 RSA 进行密钥交换,而是采用 ECDHE(Elliptic Curve Diffie-Hellman Ephemeral),保证前向安全性(即密钥泄露后无法解密过去的通信)。
服务器和客户端各自生成一个 私钥 和 公钥,并交换公钥,最终生成共享的 会话密钥。

步骤 4:密钥交换完成

6.双方使用会话密钥加密“Finished”消息

服务器和客户端分别发送一条加密的 Finished 消息,表明 TLS 握手成功
这条消息是握手过程的最后一步,确保双方使用相同的密钥
阶段 2:数据加密通信

7.对称加密数据传输

服务器和客户端使用刚才协商的 会话密钥 进行数据加密传输
数据加密通常使用 AES(高级加密标准)等对称加密算法

8.数据完整性校验

每条消息都附带一个 MAC(消息认证码),用于校验数据是否被篡改

9.连接关闭

当通信结束后,客户端或服务器可以发送 Close Notify 消息,安全地终止连接

例子:

在Web服务器上启用SSL/TLS

1.获取SSL证书:
可以从受信任的证书颁发机构(如 Let’s Encrypt, Comodo, Digicert 等)申请一个证书。一般而言,证书有免费和付费版本。在这里插入图片描述

2.安装SSL证书:
下载并安装证书文件,通常包括 私钥文件、公钥证书(证书文件)和 证书链文件。将这些文件放置在Web服务器的指定目录中。
在这里插入图片描述

配置Web服务器(如Apache)启用TLS

<Host *:443>ServerName www.example.comDocumentRoot /var/www/htmlSSLEngine onSSLCertificateFile /path/to/your/certificate.crtSSLCertificateKeyFile /path/to/your/private.keySSLCertificateChainFile /path/to/your/chain.pem
</VirtualHost>

重启 Web 服务器

验证 HTTPS: 使用浏览器访问服务器,查看网址是否以 https:// 开头,并检查浏览器中的 SSL 证书信息,确保连接已加密。

在Node.js中使用SSL/TLS

const https = require('https');
const fs = require('fs');// 读取 SSL 证书
const options = {key: fs.readFileSync('path/to/private.key'), cert: fs.readFileSync('path/to/certificate.crt'),ca: fs.readFileSync('path/to/chain.pem')  // 可选:证书链文件
};// 创建 HTTPS 服务器
https.createServer(options, (req, res) => {res.writeHead(200);res.end('Hello, Secure World!');
}).listen(443, () => {console.log('HTTPS server running on port 443');
});

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词