golang ws升级为wss

server/2024/10/20 0:06:05/

首先需要一份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("", ""))
}

http://www.ppmy.cn/server/133187.html

相关文章

【秋招笔试-支持在线评测】10.12美团(已改编)秋招-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集…

基于php的旅游管理系统

资源下载https://download.csdn.net/download/qq_63753925/89888793 目录 1 绪论 1.1 背景及意义 1.1.1 系统开发背景 1.1.2 目的及意义 1.3 主要方法及技术路线 2开发环境及技术 2.1硬件设备 2.1.1 开发计算机 2.1.2 服务器 2.2软件及环境 2.2.1开发工具 2.2.2 数据…

Apache Hive 帮助文档

Apache Hive 帮助文档 由于教学需要,本文主要介绍 hive 的 基础 和 哪里可以看帮助文档的介绍, 是一篇对帮助文档整理的文章 官方网站 文章目录 Apache Hive 帮助文档什么是 Hive?Hive 下载Hive帮助文档 什么是 Hive? Apache Hi…

基于深度学习的实时数据驱动的虚拟环境

基于深度学习的实时数据驱动的虚拟环境是近年来在计算机图形学、人工智能和虚拟现实(VR)领域的热门话题。这类虚拟环境能够通过从现实世界中采集的实时数据进行更新和调整,使得用户可以与动态变化的虚拟世界互动,增强沉浸感和现实…

蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,康冠科技,途游游戏,埃科光电25秋招内推

蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,康冠科技,途游游戏,埃科光电25秋招内推 ①蓝禾 【岗位】国内/国际电商运营,设计,研发&#xff0c…

gewechat免费开源微信机器人开发

​聊天机器人,是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上,如PC平台或者移动终端设备平台。聊天机器人系统的主要功能是同用户进行基本沟通并自动回复用户有关产品或服务的问题,以实现降低企业客服运营成本、提升…

ECMAScript与JavaScript的区别:深入解析与代码示例

目录 引言 ECMAScript与JavaScript的定义 ECMAScript JavaScript ECMAScript与JavaScript的关系 区别详解 定义上的区别 功能上的区别 实现上的区别 代码示例 ECMAScript 6 (ES6) 特性示例 箭头函数 模板字面量 JavaScript 特有的扩展 在Web开发中的应用 ECMAS…

前后端请求一致性学习

在进行前后端分离开发项目的过程中,前后端同学往往需要依照接口文档的基本信息以及相应的响应格式进行接口请求的开发,在这个过程中涉及到常见的Get、Post、Put、Patch等等的请求,相应的前后端的书写格式是什么,这篇文章进行一个记…