网站首页 > 技术文章 正文
## 为客户端和服务器生成自签名证书
为了启用 TLS/SSL,我们需要证书/密钥对。 这可以借助 OpenSSL 为客户端和服务器生成自签名证书。
1. **生成自签名CA证书**
我们现在将使用 OpenSSL 创建所有必需的密钥和证书。 让我们开始创建 CA 证书。 确保所有证书都放在以下目录中:
```bash
cd /home/chen/rabbitmq_server-3.11.6/ssl
```
第一步是制作根私钥:
```bash
openssl genrsa -out RMQ-CA-Key.pem
```
下一步是签署证书。
```bash
openssl req -new -key RMQ-CA-Key.pem -x509 -days 100 -out RMQ-CA-cert.pem
```
运行上述命令后,交互式脚本将启动并询问各种信息。 我们将在此处提供所有必需的详细信息。
输入Common-Name (CN) 时需要注意要使用服务器 IP 或 hostname。 完成后,这将生成根 CA 证书。
现在,我们将创建服务器密钥和服务器证书。
2. **生成服务器密钥**
```bash
openssl genrsa -out RMQ-server-key.pem
```
3. **生成 CSR(证书签名请求):**
```bash
openssl req -new -key RMQ-server-key.pem -out RMQ-signingrequest.csr
```
当我们运行上面的命令时,它会询问各种参数(Country、State、ON、OU 等),我们还需要选择一个 common name (CN)。 这最好是服务器的 IP 或 hostname。
4. **生成自签名证书**
```bash
openssl x509 -req -days 100 -in RMQ-signingrequest.csr -CA RMQ-CA-cert.pem -CAkey RMQ-CA-Key.pem -CAcreateserial -out RMQ-server-cert.pem
```
最后,我们需要使用它们来设置 TLS/SSL。
如果你打算启用双向验证,还需要执行如下额外步骤,来生成客户端证书和密钥:
1. **生成客户端密钥**
```bash
openssl genrsa -out RMQ-client-key.pem
```
1. **生成 CSR(证书签名请求):**
```bash
openssl req -new -key RMQ-client-key.pem -out RMQ-signingrequest.csr
```
当我们运行上面的命令时,它会询问各种参数(Country、State、ON、OU 等),我们还需要选择一个common name (CN)。 这最好是客户端的 IP 或 hostname。
2. **生成自签名证书**
```bash
openssl x509 -req -days 100 -in RMQ-signingrequest.csr -CA RMQ-CA-cert.pem -CAkey RMQ-CA-Key.pem -CAcreateserial -out RMQ-client-cert.pem
```
最终,我们生成了以下文件:
```bash
chenjing@LAPTOP-IH0640SI:/home/chen/rabbitmq_server-3.11.6/ssl$ ls -l
drwxrwxrwx 1 chenjing chenjing 4096 Feb 18 11:54 ./
drwxrwxrwx 1 chenjing chenjing 4096 Feb 18 12:00 ../
-rwxrwxrwx 1 chenjing chenjing 1679 Feb 18 11:40 RMQ-CA-Key.pem
-rwxrwxrwx 1 chenjing chenjing 1452 Feb 18 11:37 RMQ-CA-cert.pem
-rwxrwxrwx 1 chenjing chenjing 1452 Feb 18 11:37 RMQ-server-cert.pem
-rwxrwxrwx 1 chenjing chenjing 1452 Feb 18 11:37 RMQ-server-key.pem
-rwxrwxrwx 1 chenjing chenjing 1338 Feb 18 11:40 RMQ-client-cert.pem
-rwxrwxrwx 1 chenjing chenjing 1679 Feb 18 11:37 RMQ-client-key.pem
```
## 在 RabbitMQ 服务器中启用 TLS/SSL 支持
要在 RabbitMQ 中启用 TLS 支持,我们需要在以下位置创建一个名为 `rabbitmq.conf` 的配置文件:
```bash
cd ~/rabbitmq_server-3.11.6/etc/rabbitmq/
vim rabbitmq.conf
```
然后,将以下配置代码粘贴到文件中:
```
listeners.ssl.default = 5671
ssl_options.cacertfile = /home/chen/rabbitmq_server-3.11.6/ssl/RMQ-CA-cert.pem
ssl_options.certfile = /home/chen/rabbitmq_server-3.11.6/ssl/RMQ-server-cert.pem
ssl_options.keyfile = /home/chen/rabbitmq_server-3.11.6/ssl/RMQ-server-key.pem
# 启用双向认证
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert=true
# 如果不启用双向认证,请取消注释下面两行
#ssl_options.verify = verify_none
#ssl_options.fail_if_no_peer_cert = false
```
## 使用 RabbitMQ Assistant 连接
RabbitMQ Assistant下载地址:
http://www.redisant.cn/rta
如果打算使用 RabbitMQ Assistant 进行连接,客户端证书需要使用 pfx 格式:
```bash
openssl x509 -in RMQ-client-cert.pem -out RMQ-client-cert.crt
openssl pkcs12 -export -in RMQ-client-cert.crt -inkey RMQ-client-key.pem -out client.pfx
```
更多参考资料见以下链接:
- [TLS Support](https://www.rabbitmq.com/ssl.html)
- [Management Plugin](https://www.rabbitmq.com/management.html)
猜你喜欢
- 2025-06-30 记录一次彻底清除挖矿病毒(挖矿 清退)
- 2025-06-30 linux计划任务管理(linux计划任务设置)
- 2025-06-30 Linux基本命令—修改命令别名(linux永久修改别名)
- 2025-06-30 CentOS nodejs环境配置(centos nodejs安装)
- 2025-06-30 一文带你掌握shell脚本中的if条件语句,轻松搞定工作需求
- 2025-06-30 如何在Shell中使用加密密码 ?Linux 进阶收藏!
- 2025-06-30 从Git远程仓库单独拉取指定目录或文件
- 2025-06-30 Shell脚本关于循环的一些总结(shell 脚本 循环)
- 2025-06-30 Elasticsearch 的用户名和密码设置
- 2025-06-30 苹果为 OS X 发布 bash 更新:修复 Shellshock 漏洞
- 1506℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 493℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 484℃MySQL service启动脚本浅析(r12笔记第59天)
- 462℃启用MySQL查询缓存(mysql8.0查询缓存)
- 458℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 442℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 421℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 418℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)