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

golang ws升级为wss

首先需要一份openssl证书

1.安装openssl

windows安装openssl 的下载地址在 https://slproweb.com/products/Win32OpenSSL.html

无脑点安装就行,记得最后安装完成的页面取消勾选

安装完成后记得配置环境变量

2.生成证书

openssl req -x509 -days 36500 -nodes -newkey rsa -keyout ./antiy1.key -out ./antiy1.crt -subj "/CN=antiy"

-x509 : 说明生成自签名证书,自签名证书又称为根证书,是自己颁发给自己的证书,即证书中的颁发者和主体名相同。

-days n : 指定自签名证书的有效期限,默认30天,需要和"-x509"一起使用。

-nodes : 如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密,即不需要输入passphase.

-newkey : -newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,然后生成的密钥名称由-keyout参数指定。当指定newkey选项时,后面指定rsa:bits说明产生rsa密钥,位数由bits指定。 如果没有指定选项-key和-newkey,默认自动生成秘钥。

-keyout : 指明创建的新的私有密钥文件的文件名

-out : -out 指定生成的证书请求或者自签名证书名称

-config : 默认参数在ubuntu上为 /etc/ssl/openssl.cnf, 可以使用-config指定特殊路径的配置文件

-batch : 指定非交互模式,直接读取config文件配置参数,或者使用默认参数值

-verbose : 显示操作执行的详细信息

-subj args :替换或自定义证书请求时需要输入的信息,并输出修改后的请求信息。args的格式为"/type0=value0/type1=value1…“,如果value为空,则表示使用配置文件中指定的默认值,如果value值为”.",则表示该项留空。

其中可识别type有:

    C是Country、ST是state、L是localcity、O是Organization、OU是Organization Unit、CN是common name等

3.升级wss为ws,同时使用embed将证书打包进可执行文件

func Start() {//处理ws的连接http.HandleFunc("/ws", HandleConnection)certData, err := cert.ReadFile("certs/server.crt")if err != nil {log.Fatalf("Failed to read cert.pem: %v", err)}keyData, err := cert.ReadFile("certs/server.key")if err != nil {log.Fatalf("Failed to read key.pem: %v", err)}// 加载证书cert, err := tls.X509KeyPair(certData, keyData)if err != nil {log.Fatalf("Failed to load key pair: %v", err)}// 配置 TLStlsConfig := &tls.Config{Certificates: []tls.Certificate{cert},}// //监听7001端口号,作为websocket连接的服务log.Info("Server started on :7001")server := &http.Server{Addr:      "[::]:7001",TLSConfig: tlsConfig,}err = server.ListenAndServeTLS("", "") // 已经在 tlsConfig 中加载了证书if err != nil {log.Fatalf("Server failed: %v", err)}log.Info("Server started on :7001")
}

也可以不打包进可执行文件

func main() {// 加载服务器的证书和私钥cert, err := tls.LoadX509KeyPair("certs/antiy1.crt", "certs/antiy1.key")if err != nil {log.Fatalf("failed to load server cert and key: %v", err)}// 加载客户端的 CA 根证书// clientCACertPool, err := loadClientCA("certs/antiy1.crt")if err != nil {log.Fatalf("failed to load client CA: %v", err)}// 创建 TLS 配置tlsConfig := &tls.Config{Certificates: []tls.Certificate{cert}, // 服务器证书// ClientCAs:    clientCACertPool,        // 客户端证书的 CA// ClientAuth:   tls.RequireAndVerifyClientCert, // 强制要求客户端证书MinVersion: tls.VersionTLS12, // 设置最低支持 TLS 版本}// 创建 HTTPS 服务器server := &http.Server{Addr:      ":443",TLSConfig: tlsConfig,}// WebSocket 路由http.Handle("/ws", websocket.Handler(wsHandler))// 启动服务器fmt.Println("Starting WSS server on :443 with mTLS")log.Fatal(server.ListenAndServeTLS("", ""))
}

相关文章:

golang ws升级为wss

首先需要一份openssl证书 1.安装openssl windows安装openssl 的下载地址在 https://slproweb.com/products/Win32OpenSSL.html 无脑点安装就行,记得最后安装完成的页面取消勾选 安装完成后记得配置环境变量 2.生成证书 openssl req -x509 -days 36500 -nodes …...

FFMPEG录屏(17)--- 使用 DwmRegisterThumbnail 捕获指定窗口图像数据

使用 DwmRegisterThumbnail 捕获指定窗口图像数据 在 Windows 平台上,捕获指定窗口的图像数据可以通过多种方法实现,其中一种高效的方法是使用 [DwmRegisterThumbnail] 本文将介绍如何使用 [DwmRegisterThumbnail] 捕获窗口图像数据,并提供一…...

点亮一个LED(51)

目录 1.LED介绍 2.硬件电路 3.程序设计 3.1.点亮一颗LED 3.2.LED闪烁 3.3.LED流水灯实现 1.LED介绍 发光二极管也具有二极管普遍的特性单向导电性,有阳极和阴极之分 ,上图左侧式插件式LED ,长的引脚是阳极;左侧是贴片式的带…...

Flink窗口分配器WindowAssigner

前言 Flink 数据流经过 keyBy 分组后,下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口,元素可以被分发到一个或多个窗口中,Flink 内置了常用的窗口分配器,包括:tumbling wi…...

【Tinymce】富文本编辑器在vue项目中的使用;引入付费格式刷,上传视频、图片

引言 富文本编辑器有很多,对比了一下,还是决定用tinymce(号称宇宙最强),基础的插件确实好用,但是一些更好用的插件,比如格式刷等都是高级版(付费),当然也有人…...

Java实现简单的5阶m序列密钥生成

选择5阶本原多项式:x^5 x^2 1,初始值为{1,0,0,1,1},易得,递推公式为:ak ak-5 ⊕ ak-2 ,其中k≥5。于是可以写出下面这段代码: class BitsEncode {public static void main(String[] args) {//初始化数组…...

013_django基于大数据的高血压人群分析系统2024_dcb7986h_055

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...

OpenCV高级图形用户界面(21)暂停程序执行并等待用户按键输入函数waitKey()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 等待按键 该函数 waitKey 在 delay≤0 时无限等待按键事件,或者在 delay 为正数时等待 delay 毫秒。由于操作系统在切换线程时有最小…...

其他css的用途

1.animation-fill-mode: backwards; //避免了在动画开始前元素的突然显现,动画必要。 2.用rem响应式字体大小,可以在html样式定义font-size?(例10px,62.5%(100%是16px))。然后样式就可以用rem代替px。 3.color: transparent;: 这行代码将文…...

json路径 [‘a‘].b.c[0].d[‘1‘].f,具体代表什么意思

JSON路径是一种用于从JSON对象中提取数据的表达方式。你给出的路径 [a].b.c.d[1].f 代表了如何逐层访问JSON对象中的数据。让我们逐步解析这个路径: ‌[a]‌: 表示访问JSON对象的根元素中键为 a 的值。使用方括号 [] 通常意味着这个键是一个字符串&#…...

等保测评:如何进行有效的安全合规性审查

等保测评(信息安全等级保护测评)是一项至关重要的安全合规性审查工作,旨在帮助组织保障信息系统的安全性、合规性,有效应对安全风险,提升整体安全防护水平。下面将从等保测评的流程、意义、应用场景,以及实…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发二 : 18.04ubuntu安装,linux 下build ffmpeg 4.3 源码 并测试

测试环境 ubuntu 18.04 64 位,安装vmware and ubuntu 安装后调整 分辨率: 让windows 可以和 linux 互相复制黏贴 sudo apt-get autoremove open-vm-tools sudo apt-get update sudo apt-get install open-vm-tools-desktop 一直Y reboot 依赖安装 sud…...

将两张图片的不同标记出来

差异过于细微,阈值设置不当:您的差异可能是颜色或位置的微小变化,当前的阈值和处理方式可能不足以检测到这些细微差异。 图像配准不够精确:由于两张图片内容高度相似,特征点匹配可能存在误差,导致图像对齐…...

HarmonyOS开发(State模型)

一、State模型概述 FA(Feature Ability)模型:从API 7开始支持的模型,已经不再主推。 Stage模型:从API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、Wi…...

在 WPF 中使用 OpenTK:从入门到进阶

一、引言 WPF(Windows Presentation Foundation)是微软推出的用于创建丰富的桌面应用程序用户界面的框架。OpenTK 则为我们提供了强大的图形处理能力,包括 3D 图形渲染、数学计算等功能。将两者结合起来,可以在 WPF 应用程序中实…...

【最新华为OD机试E卷-支持在线评测】水仙花数(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

C# WinForm 用名字name字符串查找子控件

工作上遇到界面控件太多,需要对一些控件批量处理。虽然可以用代码批量控制,但要么是建立数组集合把所有要处理的控件放进去循环处理,要么是一个一个列出来修改属性。 但我大多数要求改的控件命名上是有规律的,所有只需要循环拼接字…...

Ubuntu下安装并初始化Git同时添加SSH密钥

在 Ubuntu 上可以使用以下命令安装git: sudo apt-get update sudo apt-get install git 在 Ubuntu 下安装好 Git 之后,接下来可以进行一些基本的配置和操作,以便更好地使用 Git。 1. 配置 Git 用户信息 在使用 Git 进行版本控制前&#x…...

好用的AI工具:探索智能生活的无限可能

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 一:常用AI工具 1. 语音助手(如Siri、小爱同学) 2. 智…...

-bash: conda: command not found

-bash: conda: command not found 说明当前的终端环境中没有找到 conda 命令,可能是因为 Conda 没有安装,或者当前的环境变量中没有包含 Conda 的路径。 解决方法 确保 Conda 已安装 确认 Conda 路径是否添加到环境变量 如果 Conda 已安装,…...

从原理到实践:使用Cost733完成天气环流分型的完整指南

1. Cost733软件基础解析 天气环流分型是气象研究中的一项关键技术,它能帮助我们将复杂多变的大气环流状态归纳为有限的几种典型模式。这就好比把每天变化的天气照片整理成几本相册,每本相册代表一种典型的天气类型。Cost733正是完成这项工作的专业工具&a…...

如何安装OpenClaw(Clawdbot)?2026年4月京东云轻松部署:安装及大模型API、Skill配置

如何安装OpenClaw(Clawdbot)?2026年4月京东云轻松部署:安装及大模型API、Skill配置。OpenClaw(Clawdbot)是2026年主流的AI自动化助理平台,能借助阿里云轻量服务器达成724小时稳定运转&#xff0…...

如何将Sublime Text打造成Python开发利器:Anaconda插件终极指南

如何将Sublime Text打造成Python开发利器:Anaconda插件终极指南 【免费下载链接】anaconda Anaconda turns your Sublime Text 3 in a full featured Python development IDE including autocompletion, code linting, IDE features, autopep8 formating, McCabe co…...

色彩心理学与品牌情感:vibrant.js颜色提取终极指南 [特殊字符]

色彩心理学与品牌情感:vibrant.js颜色提取终极指南 🎨 【免费下载链接】vibrant.js Extract prominent colors from an image. JS port of Androids Palette. 项目地址: https://gitcode.com/gh_mirrors/vi/vibrant.js 在数字时代,色彩…...

AB测试中的因果推断陷阱:为什么你的随机化试验可能不靠谱?

AB测试中的因果推断陷阱:为什么你的随机化试验可能不靠谱? 在电商大促期间,某平台将"满200减30"的优惠券随机发放给50%用户,一周后发现实验组GMV提升12%,看似效果显著。但进一步分析发现,实验组中…...

避开这5个坑!DataV大屏开发中的常见问题与性能优化指南

避开这5个坑!DataV大屏开发中的常见问题与性能优化指南 在零售行业数字化转型的浪潮中,实时数据监控大屏已成为企业决策的"神经中枢"。DataV作为阿里云推出的专业级数据可视化工具,凭借其丰富的组件库和灵活的配置能力,…...

化工巡检机器人

山东奇妙智能科技有限公司专注于化工行业智能巡检机器人的研发与应用,其产品旨在通过自动化、智能化技术替代传统人工巡检,提升化工生产环境的安全性、效率和精准度。该类机器人通常具备防爆设计、多传感器融合、自主导航等功能,适用于易燃易…...

告别 GCC 11 兼容性烦恼:在 Ubuntu 22.04 上为旧内核项目配置专用编译环境(gcc-9 实战)

在 Ubuntu 22.04 上构建多版本 GCC 编译环境的完整指南 当现代 Linux 发行版遇上历史悠久的开源项目,版本兼容性问题往往成为开发者最大的痛点。Ubuntu 22.04 默认搭载的 GCC 11 编译器虽然性能优异,但在编译某些旧版内核或系统级软件时,可能…...

5步掌握抖音无水印下载终极指南:从零到批量处理高效方案

5步掌握抖音无水印下载终极指南:从零到批量处理高效方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...

微信小程序表格实战:我是如何用原生组件解决数据展示和‘文本无法选中’这个坑的

微信小程序表格实战:原生组件解决数据展示与文本选中难题 第一次在小程序里实现表格功能时,我遇到了一个看似简单却让人头疼的问题——用户无法选中单元格里的文本进行复制。这个在Web开发中根本不是问题的问题,在小程序里却成了影响用户体验…...