使用IP自签名SSL证书

server/2024/12/14 11:30:23/

最近需要创建WebSocket服务器并使用SSL证书,由于是内网测试,所以需要使用指定IP的自签SSL证书。
其实笔者前面博文
使用nexus3作为Docker镜像仓库
解决nexus3登录x509: certificate has expired or is not yet valid
中有创建过相应的证书,这里再记录一下:

以下命令都在Windows命令行下或者Linux终端下输入运行。

一、生成CA根证书私钥

$ openssl genrsa -out ca.key 2048

二、生成CA证书

$ openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt

https://i-blog.csdnimg.cn/direct/4ebbb4f679db4e9c9f6b0191093c6ec1.png" alt="在这里插入图片描述" />

如果不想交互输入证书的国家,城市,组织名等等信息,可以在上面的命令加上参数:-subj "/CN=*"

三、生成服务器私钥

与生成CA证书私钥一样:

$ openssl genrsa -out server.key 2048

四、生成服务器证书签名请求文件

证书签名请求文件,即CSR(Certificate Signing Request)文件,这里直接使用参数-subj "/CN=*"跳过交互输入信息:

$ openssl req -new -key server.key -subj "/CN=*" -out server.csr

当然,也可以像前面一样来使用参数-subj "/CN=*",手动输入各信息。

五、使用CA证书生成服务器签名证书

1. 创建辅助文件

为了使用IP进行自签名,需要创建一个辅助文件:

$ echo subjectAltName=IP:192.168.0.8 > extfile.cnf

这样做只能允许一个IP地址,如果需要有多个IP地址,需要编辑extfile.cnf

subjectAltName = @alt_names[alt_names] 
IP.1 = 192.168.0.8
IP.2 = 127.0.0.1

还可以设置DNS:

subjectAltName = @alt_names[alt_names] 
IP.1 = 192.168.0.8
IP.2 = 127.0.0.1
DNS.1 = localhost

2. 生成服务器签名证书

$ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 365

六、测试

在服务器中需要使用server.keyserver.crt文件启动https或者wss服务,客户端则需要使用ca.crt证书来连接服务器,这样就可以正常通信了。

下面给出一个JS的wss客户端代码,main.js

const fs = require("fs");
const ca = fs.readFileSync('ca.crt','utf8');
const WebSocket = require("ws");
//const url = "wss://192.168.0.8:8300";
const url = "wss://127.0.0.1:8300";
//const url = "wss://localhost:8300";
const client = new WebSocket(url,{ca: ca}
);client.on("connectFailed", function (error) {console.log("连接失败:", error.toString());
});client.on("error", function (error) {console.log("连接错误:", error.toString());
});client.on("close", function () {console.log("连接关闭");
});client.on("message", function (message) {if (message.type === "utf8") {console.log("接收到消息:", message.utf8Data);}
});client.on("open", function () {console.log("WebSocket 客户端已连接");
});

需要先使用npm安装ws

npm install ws

https://i-blog.csdnimg.cn/direct/d729f45c228a40b28f8007a31f81a382.png" alt="在这里插入图片描述" />

如果对你有帮助,欢迎点赞收藏!!!


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

相关文章

安卓主板_MTK联发科android主板方案

在当前智能设备的发展中,安卓主板的配置灵活性和性能优化显得尤为重要。安卓主板的联发科方案,在芯片上,搭载联发科MTK6761、MT8766、MT6765、MT6762、MT8768、MT8390、MTK8370以及MT8788等型号,均基于64位的四核或八核架构设计。…

接口自动化框架详解(Pytest+request+Allure)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分&a…

深度优先遍历(DFS)

深度优先遍历(DFS) 1. 计算布尔二叉树的值2. 求根节点到叶节点数字之和3.二叉树剪枝4.验证二叉搜索树5. 二叉搜索树中第 K 小的元素6. 二叉树的所有路径 深度优先遍历(DFS,全称为Depth First Traversal),是…

【软件工程】一篇入门UML建模图(用例图、对象图、顺序图与协作图)

​ 🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1…

使用html 和JavaScript 实现一个点餐系统

1.完整的点餐系统页面 2. 主要功能和改进: 菜单管理: 上架和下架菜品的功能正常工作。新增菜品和修改菜品信息的功能正常工作。 购物车模块: 在总价后面增加了“会员价”一栏,展示每个菜品在会员折扣下的总价。结算时根据是否是会员来计算相应的总金额&…

2023年12月GESPC++三级真题解析

一、单选题(每题2分,共30分) 题目123456789101112131415答案 C D C C C A A D C C A B A C B 1.下面C数组的定义中,会丢失数据的是( )。 A.char dict_key[] {p,t,o}; B.int dict_value[] {33,22,11}; C.ch…

通过模拟对CLIP进行解释:如何通过梯度提升正样本的相似度?

通过模拟对CLIP进行解释:如何通过梯度提升正样本的相似度? 具体CLIP可以参考笔者的另外的博客: CLIP 的核心训练代码与对比损失的解释:中英双语 和 对比损失(Contrastive Loss)与大模型:Contra…

如何解决 java.lang.IndexOutOfBoundsException 异常问题?亲测有效的解决方法!

IndexOutOfBoundsException 是 Java 中常见的运行时异常,表示访问了无效的索引(数组、集合、字符串等)。本文将从原因分析到解决方法,并提供真实案例和代码示例,帮你彻底解决这个问题。 1. 问题分析 抛出 IndexOutOfB…