使用IP自签名SSL证书
最近需要创建WebSocket服务器并使用SSL证书,由于是内网测试,所以需要使用指定IP的自签SSL证书。 其实笔者前面博文 使用nexus3作为Docker镜像仓库 解决nexus3登录x509: certificate has expired or is not yet valid 中有创建过相应的证书,这里再记录一下:
以下命令都在Windows命令行下或者Linux终端下输入运行。
一、生成CA根证书私钥
1$ openssl genrsa -out ca.key 2048
二、生成CA证书
1$ openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt
如果不想交互输入证书的国家,城市,组织名等等信息,可以在上面的命令加上参数:-subj "/CN=*"
三、生成服务器私钥
与生成CA证书私钥一样:
1$ openssl genrsa -out server.key 2048
四、生成服务器证书签名请求文件
证书签名请求文件,即CSR(Certificate Signing Request)文件,这里直接使用参数-subj "/CN=*"
跳过交互输入信息:
1$ openssl req -new -key server.key -subj "/CN=*" -out server.csr
当然,也可以像前面一样来使用参数-subj "/CN=*"
,手动输入各信息。
五、使用CA证书生成服务器签名证书
1. 创建辅助文件
为了使用IP进行自签名,需要创建一个辅助文件:
1$ echo subjectAltName=IP:192.168.0.8 > extfile.cnf
这样做只能允许一个IP地址,如果需要有多个IP地址,需要编辑extfile.cnf
1subjectAltName = @alt_names
2
3[alt_names]
4IP.1 = 192.168.0.8
5IP.2 = 127.0.0.1
还可以设置DNS:
1subjectAltName = @alt_names
2
3[alt_names]
4IP.1 = 192.168.0.8
5IP.2 = 127.0.0.1
6DNS.1 = localhost
2. 生成服务器签名证书
1$ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 365
六、测试
在服务器中需要使用server.key
和server.crt
文件启动https
或者wss
服务,客户端则需要使用ca.crt
证书来连接服务器,这样就可以正常通信了。
下面给出一个JS的wss
客户端代码,main.js
:
1const fs = require("fs");
2const ca = fs.readFileSync('ca.crt','utf8');
3const WebSocket = require("ws");
4//const url = "wss://192.168.0.8:8300";
5const url = "wss://127.0.0.1:8300";
6//const url = "wss://localhost:8300";
7const client = new WebSocket(
8 url,
9 {ca: ca}
10);
11
12client.on("connectFailed", function (error) {
13 console.log("连接失败:", error.toString());
14});
15
16client.on("error", function (error) {
17 console.log("连接错误:", error.toString());
18});
19
20client.on("close", function () {
21 console.log("连接关闭");
22});
23
24client.on("message", function (message) {
25 if (message.type === "utf8") {
26 console.log("接收到消息:", message.utf8Data);
27 }
28});
29
30client.on("open", function () {
31 console.log("WebSocket 客户端已连接");
32});
需要先使用npm安装ws
库
1npm install ws
如果对你有帮助,欢迎点赞收藏!!!
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2024/2024-12-12-使用IP自签名SSL证书/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。