当前位置: 首页 > news >正文

使用IP自签名SSL证书

最近需要创建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

在这里插入图片描述

如果不想交互输入证书的国家,城市,组织名等等信息,可以在上面的命令加上参数:-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

在这里插入图片描述

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

http://www.lryc.cn/news/502328.html

相关文章:

  • 数据库中的运算符
  • 定制erp真的很贵吗?
  • Java Integer的数值比较
  • QGroundControl之5-AppSettings.cc
  • Django Fixtures 使用指南:JSON 格式详解
  • 单元测试SpringBoot
  • 邮件营销平台应如何提升外贸开发信的效果?
  • 绘制折线图遇到问题记录
  • python 调Qt C++ 写法配置和坑点
  • css设置透明的几种办法
  • 刷题日志【4】
  • 如何制作自己的字体文件.ttf
  • gradle在IDEA 中无法使用的启动守护线程的问题
  • Spring Boot 配置多数据源并手动配置事务
  • YashanDB 23.2 YAC 共享集群部署和使用自带YMP迁移工具进行数据迁移,效果很city
  • 【数学】矩阵的逆与伪逆 EEGLAB
  • 狐猬编程 C++ L3 第7课 字符串入门 元音字母
  • APP UI自动化测试的思路小结
  • 2412d,d的7月会议
  • ANOMALY BERT 解读
  • 定时/延时任务-Netty时间轮源码分析
  • React的一些主要优点是?
  • RabbitMQ 基本使用方法详解
  • [leetcode100] 101. 对称二叉树
  • Vue.createApp的对象参数
  • 短信验证码burp姿势
  • ubuntu WPS安装
  • 中粮凤凰里共有产权看房记
  • 学习笔记068——Hibernate框架介绍以及使用方法
  • Maven 安装配置(详细教程)