使用IP自签名SSL证书

最近需要创建WebSocket服务器并使用SSL证书,由于是内网测试,所以需要使用指定IP的自签SSL证书。

其实笔者前面博文
使用nexus3作为Docker镜像仓库
解决nexus3登录x509: certificate has expired or is not yet valid

中有创建过相应的证书,这里再记录一下:

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

一、生成CA根证书私钥

bash 复制代码
$ openssl genrsa -out ca.key 2048

二、生成CA证书

bash 复制代码
$ openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt

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

三、生成服务器私钥

与生成CA证书私钥一样:

bash 复制代码
$ openssl genrsa -out server.key 2048

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

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

bash 复制代码
$ openssl req -new -key server.key -subj "/CN=*" -out server.csr

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

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

1. 创建辅助文件

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

bash 复制代码
$ echo subjectAltName=IP:192.168.0.8 > extfile.cnf

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

bash 复制代码
subjectAltName = @alt_names
 
[alt_names] 
IP.1 = 192.168.0.8
IP.2 = 127.0.0.1

还可以设置DNS:

bash 复制代码
subjectAltName = @alt_names
 
[alt_names] 
IP.1 = 192.168.0.8
IP.2 = 127.0.0.1
DNS.1 = localhost

2. 生成服务器签名证书

bash 复制代码
$ 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

bash 复制代码
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

bash 复制代码
npm install ws

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

相关推荐
tech讯息28 分钟前
企业 AI Agent 对接外部服务如何安全集成?—— 多租户业务场景优先选用 WebSocket 方案
人工智能·websocket·安全
breeze jiang2 小时前
NestJS MVC 实战:用 hello 项目 7 个文件讲清分层、装饰器、依赖注入与错误处理
node.js·mvc·js
sudebao点com14 小时前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
windows·macos·https·cdn·dns·nslookup·网络排错
月落汀兰1 天前
Linux Nginx全套实战通关|静态站点/虚拟主机/HTTPS/PHP/反向代理/七层负载均衡,每行命令逐参数拆解
linux·nginx·https
RuoyiOffice1 天前
Springboot+WebSocket×场景×渠道:企业统一消息中心编排实战
spring boot·websocket·短信·消息中心·spring boot 3·站内信·场景编排
烟雨江南7851 天前
国产化语音识别如何落地?——灵声智库国产 CPU/OS、GPU/NPU、流式转写与离线私有化部署实践
人工智能·websocket·语音识别·ai客服·企业agent
weixin_431600442 天前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
运维全栈笔记2 天前
致远 OA HTTPS 配置避坑指南
网络协议·http·https
2501_915909062 天前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
Lucis__2 天前
如何实现长连接通信机制?Websocket的最佳实践
网络·websocket·网络协议