• 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页面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    ★ 配置RabbitMQ的端口

    在rabbitmq.conf文件中增加如下配置(5672是默认值) :
    listeners.tcp.default = 5673
    ▲ 配置完成后,可通过Web管理界面的Overview→Nodes→rabbit@pc名查看节点信息。
    
    ▲ 也可通过如下命令查看节点信息
    rabbitmq-diagnostics status --node rabbit@JHComputer
    
    ▲ 或通过如下命令查看监听端口:
    rabbitmq-diagnostics listeners
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    演示:

    在这里创建这个配置文件,在启动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
    
    • 1
    • 2
    • 3
    • 4

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

    ★ 生成自签名证书

    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客户端使用。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    生成自签名证书的演示

    用这个命令需要已经安装有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客户端使用。
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述

    ★ 配置消息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盘
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    # 配置 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
  • 相关阅读:
    FinalShell或者XShell工具 突然连不上服务器(绝对好使!)
    asio做tcp的自动拆包时,asio的match condition如何使用的详细说明
    Tomat的默认servlet(DefaultServlet)
    解决mybatis用Map返回的字段全变大写的问题
    js-day05-对象
    JS中执行上下文和执行栈是什么?
    查询中一些字段的用法
    vscode_c++_slambook 编译配置
    opensips开启python支持
    【无标题】
  • 原文地址:https://blog.csdn.net/weixin_44411039/article/details/133223037