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 已安装,…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
