WebSocket接入SSL证书

目录

  • 碎碎念
  • 解决方法
    • 创建 HTTPS WebSocket 服务器
    • 创建系统服务
    • 启动服务

碎碎念

在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因此,在配置 WebSocket 服务器时,我们也需要确保其支持 HTTPS。

在这种情况下,直接运行 HOST=0.0.0.0 PORT=9000 npx y-websocket 将无法正常工作,因为它不支持 HTTPS。接下来,我们将介绍如何通过创建一个支持 HTTPS 的 WebSocket 服务器来解决这个问题。

解决方法

创建 HTTPS WebSocket 服务器

首先,我们需要创建一个文件 secure-server.js,该文件将用于配置 HTTPS 和 WebSocket 服务器:

const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');
const { setupWSConnection } = require('y-websocket/bin/utils');const port = process.env.PORT || 9000;
const host = process.env.HOST || '0.0.0.0';
const cert = process.env.SSL_CERT || '/path/to/cert.pem';
const key = process.env.SSL_KEY || '/path/to/key.pem';
// 也可以是 
// const cert = process.env.SSL_CERT || '/path/to/cert.pem';
// const key = process.env.SSL_KEY || '/path/to/cert.key';const server = https.createServer({cert: fs.readFileSync(cert),key: fs.readFileSync(key)
});const wss = new WebSocket.Server({ server });wss.on('connection', (conn, req) => setupWSConnection(conn, req, { docName: req.url.slice(1).split('?')[0] }));server.listen(port, host, () => {console.log(`https://${host}:${port}`);
});

在上述代码中,我们使用 https 模块创建了一个 HTTPS 服务器,并使用 ws 模块创建了一个 WebSocket 服务器。通过读取 SSL 证书和密钥文件,我们确保了服务器的安全性。

创建系统服务

为了确保我们的 WebSocket 服务器能够在系统启动时自动运行,我们需要创建一个 systemd 服务文件 y-websocket.service

[Unit]
Description=Y-WebSocket Server Service
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/path/to/WorkingDirectory
Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/key.pem"
; 或者是 Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/cert.key"
ExecStart=/usr/bin/node /path/to/secure-server.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=y-websocket-server[Install]
WantedBy=multi-user.target

这个服务文件定义了 WebSocket 服务器的启动和运行方式。通过设置环境变量,我们可以灵活地配置服务器的主机、端口和 SSL 证书路径。

启动服务

最后,我们需要运行以下指令来启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl restart y-websocket.service
sudo systemctl enable y-websocket.service

通过以上步骤,我们创建了一个支持 HTTPS 的 WebSocket 服务器,并确保其在系统启动时自动运行。这不仅提高了服务器的安全性,还简化了服务器的管理和维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39170.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统导论——第13章 抽象:地址空间

一、早期系统 从内存来看,早期的机器并没有提供多少抽象给用户。基本上,机器的物理内存如图13.1所示 操作系统曾经是一组函数(实际上是一个库),在内存中(在本例中,从物理地址0开始)&…

网络爬虫-2:基础与理论

一.同步加载与异步加载 1.1同步加载定义: 页面所有内容一起加载出来,当某一个数据加载有问题,整个页面就不会加载出来(如HiFiNi音乐网站),所以又叫阻塞模式 1.2爬取步骤: 看netword->document 2.1异步加载定义: 数据是分开加载的,当某一份数据有异常时,不影响其他数据…

【Docker系列五】Docker Compose 简介

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步,就可以 点击搜索 Models : https://ollama.com/search然后点击下载: 选择后复制: ollama run deepseek-r1:32b例如: 让它安装完成后&#xff1…

【CC2530 教程 二】CC2530定时器实现微秒、毫秒、秒延时函数

目录 一、CC2530定时器: 二、CC2530定时器: (1)定时器1(Timer1): (2)定时器2(Timer2): (3)定时器3和定时…

23种设计模式-创建型模式-工厂方法

文章目录 简介场景问题1. 直接依赖具体实现2. 违反开闭原则3. 条件分支泛滥4. 代码重复风险 解决根本问题完整类图完整代码说明核心优势代码优化静态配置表动态策略 总结 简介 工厂方法是一种创建型设计模式,它提供了在父类中创建对象的接口,但允许子类…

Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析

Umi-OCR 是免费开源的离线 OCR 文字识别软件。无需联网,解压即用,支持截图、批量图片、PDF 扫描件的文字识别,能识别数学公式、二维码,可生成双层可搜索 PDF。内置多语言识别库,界面支持多语言切换,提供命令…

【JavaEE】Mybatis基础使用注解 增删改查操作

目录 一、配置日志二、传递参数 #{}三、增(Insert)四、返回主键Options五、删(Delete)六、改(Update)七、查(Select) 一、配置日志 我们加上下面的代码在配置文件中,那么我们在日志中就可以看到…

4.2、网络安全体系与建设内容

目录 网络安全体系架构网络安全组织安全管理网络安全等级保护2.0等保项目流程等保标准变化等保2.0新增内容等保2.0变化智慧城市安全体系应用参考智能交通网络安全体系应用参考 网络安全体系架构 建设网络安全,要体系化,要从一个整体去做考虑&#xff0c…

TCP协议原理

TCP协议原理 本篇介绍 前面已经基本介绍了TCP编程的接口以及基本的步骤,但是并没有其中的原理进行解释。本篇主要聚焦于TCP原理部分,对TCP中重要的内容进行解释 TCP协议报格式 基本示意图如下: 下面针对每一个字段的作用进行简要的概括&a…

go中的文件、目录的操作

1.文件的概念 文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件等。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音等。 文件在程序中以流的形式来操作的。 流:数据在数据源(文件)和程序(内存)之间…

electron js node vscode 调试electron

用npm会下到home里面不知道为什么可能是淘宝源的问题 --------------------------------- 安装cnpm(可选) sudo npm install -g cnpm --registryhttps://registry.npmmirror.com下下来还没办法直接用 sudo find / -name "cnpm"nano ~/.bashr…

深度解析 BPaaS:架构、原则与研发模式探索

在当今复杂多变的业务环境下,软件开发面临着诸多挑战,如何有效地管理业务复杂性并实现系统的可扩展性成为关键。BPaaS应运而生,它作为一种创新的理念和架构模式,改变着企业研发的方式。本文将深入探讨 BPaaS 是什么,以…

大模型架构记录2 【综述-相关代码】

一 简单聊天机器人搭建 1.1 openai调用 import os from openai import OpenAI from dotenv import load_dotenv, find_dotenvload_dotenv() client OpenAI()# 打印所支持的模型 model_lst client.models.list()for model in model_lst:print (model.id)# 调用API接口 comp…

三个print优雅打印datetime模块的“时间密码”

三个模块&三条print(),玩转python时间的上上下下,优雅打印“时间密码”。 笔记模板由python脚本于2025-03-23 22:50:43创建,本篇笔记适合正确研究时间/日期的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出…

【Android】VehiclePropertyAccess引起CarService崩溃

VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性,用于定义车辆属性的访问权限。权限包括 读:READ,只可以读取,不能写入。 VehiclePropertyAccess:READ写:WRITE&#xf…

深入理解traceroute命令及其原理

traceroute 是一个网络诊断工具(Windows上叫tracert),用于显示数据包从本地主机到远程主机经过的路由(跳数)。它可以帮助您了解数据包在网络中的传输路径,以及每跳的延迟情况。这对于网络故障排除、分析网络…

Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!

一、引言:自动化测试的“瓶颈”与MCP的革新 传统自动化测试依赖开发者手动编写脚本,不仅耗时且容易因页面动态变化失效。例如,一个简单的登录流程可能需要开发者手动定位元素、处理等待逻辑,甚至反复调试超时问题。而MCP&#xf…

JVM 学习前置知识

JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件,从底层操作系统到上层开发工具,逐步构建完整的开发与运行环境: 1. 操作系统(Windows, MacOS, Linux, Solaris) 作用&…

【Java/数据结构】队列(Quque)

本博客将介绍队列的相关知识,包括基于数组的普通队列,基于链表的普通队列,基于数组的双端队列,基于链表的双端队列,但不包括优先级队列(PriorityQueue),此数据结构将单独发一篇博客&…