如果RabbitMQ服务在内网中,只有内网的应用连接,我们认为这些连接都是安全的,但是个别情况我们需要让RabbitMQ对外提供服务。这种情况有两种解决方案:

  1. 在RabbitMQ外层在封装一层应用,应用对外提供服务,本质来说RabbitMQ还是只对内网提供服务。相对更安全,但灵活性差。

  2. RabbitMQ直接对外提供服务。这时除了服务本身的安全性还要考虑数据在互联网传输过程中是否可能被拦截破解。业界标准的解决方案就是SSL。

安装Git

1、首先应该安装好必要的依赖包,省得在安装过程中出现各种问题。

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

2、下载并编译git 
下载、解压

wget https://www.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz
tar xzf git-1.8.3.1.tar.gz

编译并验证

cd git-1.8.3.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >>/etc/bashrc
source /etc/bashrc
git --version

安装成功

生成证书

首先确保已经安装好openssl,通常在安装WEB运行环境时都会自动安装。我就找了我之前的一个WEB服务器。 
检测方法:

openssl version

在Google了一番之后,我发现了这篇文章:

http://www.gettingcirrius.com/2013/01/configuring-ssl-for-rabbitmq.html

国内的童鞋们也许需要通过代理才能访问,不过没关系,作者还在github上写了一些shell脚本方便生成证书,项目github地址为:

https://github.com/Berico-Technologies/CMF-AMQP-Configuration

可直接通过git命令进行clone到本地(最好新建个文件夹AMQPSSL):

git clone https://github.com/Berico-Technologies/CMF-AMQP-Configuration.git  

在clone后的项目目录中,doc文件夹下有详细的说明shell脚本如何使用。

对RabbitMQ SSL支持官方文档感兴趣的童鞋,请移步:

https://www.rabbitmq.com/ssl.html

1. 确保已经安装好了openssl,具体安装方法请自行google;

切换到 CMF-AMQP-Configuration/ssl 文件夹,运行

sh setup_ca.sh MyRabbitMQCA  

名称定义为”MyRabbitMQCA”,这个名字可以自行指定,用于在证书中显示证书颁发机构名。

  • 生成服务器证书
sh make_server_cert.sh rabbitmq-server rabbit

一个参数是服务器名,第二个参数是密码。

  • 生成客户端证书
sh create_client_cert.sh rabbit-client rabbit

第一个参数是客户端名称,第二个参数是密码。

执行完以上步骤之后,会在ssl目录下生成:ca、server、client三个文件夹。

配置RabbitMQ Server用到的三个文件如下: 
配置RabbitMQ SSL只会用到以下3个文件:

ca/cacert.pem
server/rabbitmq-server.cert.pem
server/rabbitmq-server.key.pem

将这三个文件拷贝到RabbitMQ的建议可以把需要用到的3个文件带目录结构拷贝到  /rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl 目录下(没有ssl文件夹的话可以新建),那么配置文件内容为:目录中。

配置RabbitMQ开启SSL

在WEB控制台中可以看到rabbitmq.config的地址,如果没有就新建这个文件

vi /rabbitmqinaction/rabbitmq/etc/rabbitmq/rabbitmq.config

[
{rabbit, [{vm_memory_high_watermark_paging_ratio, 0.4},
{vm_memory_high_watermark, 0.4},
{tcp_listeners, []},
{ssl_listeners, []},
{ssl_options, [{cacertfile,"/rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl/cacert.pem"},
{certfile,"/rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl/rabbitmq-server.cert.pem"},
{keyfile,"/rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl/rabbitmq-server.key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, true}
]}
]}
].

ssl_listeners 指定SSL监听5671端口。 
fail_if_no_peer_cert 意思是是否强制验证证书。

    • 重启RabbitMQ
rabbitmqctl stop
rabbitmq-server -detached
  • 查看是否开启

RabbitMQ消息队列(十四)-启用SSL安全通讯的更多相关文章

  1. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  2. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  3. RabbitMQ消息队列(四)-服务详细配置与日常监控管理

    RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sbin/rabbitmq-server -detached ] 查看 ...

  4. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)[转]

    上篇文章中,我们把每个Message都是deliver(提供)到某个Consumer.在这篇文章中,我们将会将同一个Message deliver(提供)到多个Consumer中.这个模式也被成为 & ...

  5. Rabbitmq消息队列(四) 发布订阅

    1.简介 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者,在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模式被称为“发布/订阅” ...

  6. RabbitMQ消息队列(四): 消息路由

    1. 路由: 前面的示例中,我们或得到的消息为广播消息,但是无法更精确的获取消息的子集,比如:日志消息,worker1只需要error级别的日志, 而worker2需要info,warning,err ...

  7. 基于Python语言使用RabbitMQ消息队列(四)

    路由 在上一节我们构建了一个简单的日志系统.我们能够广播消息给很多接收者. 在本节我们将给它添加一些特性——我们让它只订阅所有消息的子集.例如,我们只把严重错误(critical error)导入到日 ...

  8. (十四)RabbitMQ消息队列-启用SSL安全通讯

    原文:(十四)RabbitMQ消息队列-启用SSL安全通讯 如果RabbitMQ服务在内网中,只有内网的应用连接,我们认为这些连接都是安全的,但是个别情况我们需要让RabbitMQ对外提供服务.这种情 ...

  9. (十)RabbitMQ消息队列-高可用集群部署实战

    原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...

  10. (十二)RabbitMQ消息队列-性能测试

    原文:(十二)RabbitMQ消息队列-性能测试 硬件配置 宿主机用的联想3850X6的服务器四颗E7-4850v3的处理器,DDR4内存,两块1.25TB的pcie固态.在宿主机上使用的事esxi5 ...

随机推荐

  1. [BZOJ1925][SDOI2010]地精部落(DP)

    题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...

  2. Deepin下配置JDK8

    下载JDK 首先在http://www.oracle.com/technetwork/java/javase/downloads/index.html下载对应的JDK 本人下载的是JDK8 解压tar ...

  3. Spring Security 整合freemaker 实现简单登录和角色控制

    Spring Security 整合freemaker 实现简单登录和角色控制     写这篇文章是因为我做了一个电商网站项目,近期刚加上权限控制.整个过程很简单,在此给大家梳理一下,也算是自己对知识 ...

  4. ueditorUE 去掉本地保存成功的提示框!

    网上修改什么JS的太麻烦,这样比较暴力,仅供参考 这里直接修改的样式: ue.ready(function () {                 $(".edui-editor-mess ...

  5. HBuilder git合作-上传项目到Git Hub

    1.初始项目的创建 这里假设你已经在Git Hub上面建立好了代码的远程仓库,并已经邀请好了队员 在HBuidler中创建好初始的项目,然后右键,"Team"->" ...

  6. Kotlin基础

    1.函数也是对象,可以作为参数和返回值 2.使用驼峰命名,尽量避免下划线 3.public函数应当有说明文档 4.lambda中花括号内前后都应该有空格 5.空值安全检查  var s: String ...

  7. 长沙学院APP

    一.开发背景 作为一名长大学子,我认为我们学校没有一个自己专属的手机APP是一件遗憾的事情,虽然大部分的211,985高校也没有一个自己专属的APP,所以,要是我们学校能开发一个出来,那逼格肯定就不一 ...

  8. 微软75亿收购Github,微软以开发者为中心的初心不变

    前天关于微软要收购 GitHub 的消息传出后,很多人都纷纷讨论,希望 GitHub 能够独立存在,不被任何大厂收购,可是 GitHub 也要生存啊.那又有人说:希望是 Google 来收购 GitH ...

  9. JavaEE开发之Spring中的条件注解、组合注解与元注解

    上篇博客我们详细的聊了<JavaEE开发之Spring中的多线程编程以及任务定时器详解>,本篇博客我们就来聊聊条件注解@Conditional以及组合条件.条件注解说简单点就是根据特定的条 ...

  10. [Swift]LeetCode741. 摘樱桃 | Cherry Pickup

    In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 mea ...