当前位置: 首页 > news >正文

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.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key
    SSLCertificateChainFile /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');
});

相关文章:

  • flask学习3-深入
  • ConcurrentHashMap底层原理
  • RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比
  • 网络安全需要报班学习吗?
  • 重塑未来:生成式AI如何重构企业数据基因?三大技术重构的生死局
  • Paper Reading | AI 数据库融合经典论文回顾
  • ‌HTTP/1.0、HTTP/2.0和HTTP/3.0的区别
  • Pytest自动化框架
  • 深入理解 JavaScript 执行上下文
  • 【LTSPCIE】D触发器的搜索和使用
  • K8S高可用Web应用部署方案
  • Docker网络设置
  • java遍历
  • qt小项目,简单的音乐播放器
  • PyTorch深度学习框架60天进阶学习计划第13天:模型保存与部署
  • CogView: 基于Transformer的通用领域文本到图像生成
  • 国产编辑器EverEdit - 设置文件类型关联为EverEdit
  • 智慧菜场系统(源码+文档+讲解+演示)
  • 文档操作方法得合理使用
  • python 海龟作图 从爱心到旋转爱心
  • 网络托管/谷歌seo排名
  • 广东网页空间网站/百度seo关键词优化软件
  • 河北省城乡建设培训网官方网站/成品ppt网站国外
  • 做设计网站的工作怎么样/今日头条官网登录入口
  • 宁波外贸网站设计公司/公司网站制作流程
  • 制作网站的步骤/今日最新国际新闻头条