195、SpringBoot--配置RabbitMQ消息Broker的SSL 和 管理控制台的HTTPS

开启Rabbitmq的一些命令:

小黑窗输入:

rabbitmq-plugins enable rabbitmq_management 启动控制台插件,就是启动登录rabbitmq控制台的页面

rabbitmq_management 代表了RabbitMQ的管理界面。

rabbitmq-server 启动rabbitMQ服务器

上面这个:rabbitmq-plugins enable rabbitmq_management 启动控制台插件,就是启动登录rabbitmq控制台的页面,就是为了打开这个:

启动浏览器访问 http://localhost:15672/ 将看到登录界面

管理员启动小黑窗:

rabbitmq-service install 添加rabbitMQ为本地服务

用来添加这个

其他命令:

查看监听端口:rabbitmq-diagnostics listeners

查看节点信息命令:rabbitmq-diagnostics status --node rabbit@JHComputer

★ RabbitMQ的配置文件

▲ 保存位置

Linux及类似系统中配置文件位于/etc/rabbitmq/目录下
Windows系统中配置文件位于%APPDATA%\RabbitMQ\下(C:\Users\JH\AppData\Roaming\RabbitMQ)

▲ 3个配置文件:
- rabbitmq.conf:新式格式(类似application.properties风格)的配置文件。

- advanced.config:经典格式(JSON风格)的配置文件。
  只有极少数rabbitmq.conf 不支持的配置(如LDAP)才需要使用该配置文件

- rabbitmq-env.conf (Windows用rabbitmq-env.conf.bat):用于集中管理RabbitMQ所需的环境变量。

具体可参考https://www.rabbitmq.com/configure.html#config-location页面

★ 配置RabbitMQ的端口

在rabbitmq.conf文件中增加如下配置(5672是默认值) :
listeners.tcp.default = 5673
▲ 配置完成后,可通过Web管理界面的Overview→Nodes→rabbit@pc名查看节点信息。

▲ 也可通过如下命令查看节点信息
rabbitmq-diagnostics status --node rabbit@JHComputer

▲ 或通过如下命令查看监听端口:
rabbitmq-diagnostics listeners

演示:

在这里创建这个配置文件,在启动RabbitMQ的时候,就会自动加载这个配置文件

启动RabbitMQ,可以看出自己添加的配置文件被加载了

配置完成后,可通过Web管理界面的Overview→Nodes→rabbit@pc名查看节点信息。

这个rabbit@pc名 就是 rabbit@JHComputer,如图

▲ 也可通过如下命令查看节点信息

rabbitmq-diagnostics status --node rabbit@JHComputer

再开启一个小黑窗输入这个命令

监听端口成功变成我们自己定义的 5763

这个能看这个节点的所有信息

▲ 或通过如下命令查看监听端口:

rabbitmq-diagnostics listeners

这个命令只单独看端口

什么是SSL?

SSL证书是数字证书的一种,也称SSL服务器证书。

★ 启用消息Broker的SSL

SSL: Secure Sockets Layer,安全套接字层

要启用消息Broker的SSL,需要证书。

▲ 启用消息Broker的SSL需要两步:
(1)获得证书。使用自签名证书或购买权威机构颁发的证书。
(2)设置证书。
 具体可参考https://www.rabbitmq.com/ssl.html#enabling-tls

证书没买的话,就自己生成一个自签名证书,但是安全性低,没啥用,仅作为演示。

★ 生成自签名证书

RabbitMQ提供了一个小工具来生成证书。直接运行该工具包来生成证书即可。

▲ 执行如下命令clone工具包:
git clone https://github.com/michaelklishin/tls-gen tls-gen
该命令执行完成后,会在当前目录下多出一个tls-gen目录,该目录下就保存了额RabbitMQ所提供的证书工具。

▲ 修改tls-gen目录下的common.mk文件,将其中PYTHON := 的值改为Python3命令的绝对路径。
   ------你的电脑上必须安装Python 3。这暗示了:该工具需要有Python环境。

▲ 进入tls-gen\basic目录下,执行如下命令(需要msys2工具)来生成证书(其中123456用于指定私钥密码):

make PASSWORD=123456

▲ 证书生成完成后,会在basic目录下生成result、testca、server和client四个文件夹。

▲ 关键就是result目录下的几个文件:

- result/ca_certificate.pem:CA的证书。
- result/server_certificate.pem:服务器端用的证书
- result/server_key.pem:服务器端所用key文件
- result/client_key.p12:客户端信任该证书所需要的密钥文件,供Java客户端使用。

生成自签名证书的演示

用这个命令需要已经安装有git

▲ 执行如下命令clone工具包:

git clone https://github.com/michaelklishin/tls-gen tls-gen

该命令执行完成后,会在当前目录下多出一个tls-gen目录,该目录下就保存了额RabbitMQ所提供的证书工具。

▲ 修改tls-gen目录下的common.mk文件,将其中PYTHON := 的值改为Python3命令的绝对路径。

------你的电脑上必须安装Python 3。这暗示了:该工具需要有Python环境。

因此,再安装一个python3.8版本
python3.8下载及安装

▲ 进入tls-gen\basic目录下,执行如下命令(需要msys2工具)来生成证书

(其中123456用于指定私钥密码): make PASSWORD=123456
安装msys2

证书生成完成后,会在basic目录下生成result、testca、server和client四个文件夹。

打开msys2软件,输入如图命令,生成完就可以退出了

▲ 关键就是result目录下的几个文件:

- result/ca_certificate.pem:CA的证书。
- result/server_certificate.pem:服务器端用的证书
- result/server_key.pem:服务器端所用key文件
- result/client_key.p12:客户端信任该证书所需要的密钥文件,供Java客户端使用。


★ 配置消息Broker的SSL证书

▲ 在rabbitmq.conf文件中增加如下配置:

如果要禁用非SSL的监听:添加如下配置:

listeners.tcp = none

配置非SSL的监听端口。

listeners.tcp.default = 5672

配置SSL的端口

listeners.ssl.default = 5673

ssl_options.cacertfile = CA证书的路径

ssl_options.certfile = 服务器端证书的路径

ssl_options.keyfile = 服务器端key的路径

ssl_options.verify = verify_peer

verify_none表示忽略证书验证,verify_peer表示要求验证对方证书

ssl_options.fail_if_no_peer_cert = true

若为true,服务器端会向客户端索要证书,若客户端无证书则中止SSL握手;

若为false,则客户端没有证书时依然可完成SSL握手

rabbitmq官网参考

对这个rabbitmq.conf文件进行配置

查看监听端口:rabbitmq-diagnostics listeners

表示配置消息Broker的SSL成功

★ 配置管理界面(rabbitmq_management插件)的HTTPS

没配置之前,这里是http,不安全。

现在要弄成 https 。

http 本身是一个应用层的协议,SSL 是一个网络安全传输层,
基于网络安全传输层 的 http 就变成了所谓的 https

▲ 在rabbitmq.conf文件中增加如下配置(所有management相关的配置都用于配置rabbitmq_management插件):

rabbitmq_management: 代表了RabbitMQ的管理界面。

management.tcp.port = 15672

management.ssl.port = 15673

management.ssl.cacertfile = CA证书的路径

management.ssl.certfile = 服务器端证书的路径

management.ssl.keyfile =服务器端key的路径

management.ssl.verify = verify_none

management.ssl.fail_if_no_peer_cert = false

▲ 具体可参考https://www.rabbitmq.com/management.html#multiple-listeners

如图:两条相同的查看监听端口:rabbitmq-diagnostics listeners。

没标注颜色解释的是配置之前的,标注颜色解释的是配置的之后的,演示区别:

因为 RabbitMQ 的管理界面的服务端口,默认是15672,

所以把上面的15677 改成 15672 。与默认的保持一致最好。

重启rabbitmq服务,再重新查监听端口:rabbitmq-diagnostics listeners。

▲ 若使用自签名的证书,所有浏览器都无法访问该HTTPS服务,因此这些浏览器都不信任该自签名证书。

原本的http访问

使用 https 来访问。

如图:因为配置 https 是用了自己生成的ssl的自签名证书,安全性低,浏览器不信任,不给访问。

如果用买的有权威的签名证书才可以访问。,仅作为演示如何设置证书。

rabbitmq.conf

在c盘


java 复制代码
# 配置 RabbitMQ 的监听端口,默认5672
listeners.tcp.default = 5672

#  消息broker的SSL 的相关配置
#  配置 SSL 的端口
listeners.ssl.default = 5673

# 配置 CA证书的路径
ssl_options.cacertfile = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\ca_certificate.pem

# 配置 服务器端证书的路径
ssl_options.certfile   = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\server_JHComputer_certificate.pem

# 配置 服务器端key的路径,就是私钥证书的位置
ssl_options.keyfile    = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\server_JHComputer_key.pem

# 是否要对客户端的证书进行验证
# verify_none表示忽略证书验证,verify_peer表示要求验证对方证书
ssl_options.verify     = verify_peer

# 客户端验证失败的时候是否直接停止
#  若为true,服务器端会向客户端索要证书,若客户端无证书则中止SSL握手;
#  若为false,则客户端没有证书时依然可完成SSL握手,就是证书即使验证失败,也依然提供服务
ssl_options.fail_if_no_peer_cert = true




# 配置 RabbitMQ 的管理界面的服务端口,默认15672

management.tcp.port = 15672

# 配置 HTTPS 的端口 
management.ssl.port  = 15673

# 配置 CA证书的路径
management.ssl.cacertfile = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\ca_certificate.pem

# 配置 服务器端证书的路径
management.ssl.certfile   = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\server_JHComputer_certificate.pem

# 配置 服务器端key的路径,就是私钥证书的位置
management.ssl.keyfile    = E:\install\RabbitMQ\rabbitmq-3.9.4\tls-gen\basic\result\server_JHComputer_key.pem


# 是否要对客户端的证书进行验证
# verify_none表示忽略证书验证,verify_peer表示要求验证对方证书
management.ssl.verify = verify_none

#  客户端验证失败的时候是否直接停止
#  若为true,服务器端会向客户端索要证书,若客户端无证书则中止SSL握手;
#  若为false,则客户端没有证书时依然可完成SSL握手,就是证书即使验证失败,也依然提供服务
management.ssl.fail_if_no_peer_cert = false
相关推荐
海里真的有鱼1 小时前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺2 小时前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
bjzhang753 小时前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang3 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh3 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
爱上语文5 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱5 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
小宋10215 小时前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq
serve the people5 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政11 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端