RabbitMQ指南(七) SSL\TLS通信

RabbitMQ指南(七) SSL\TLS通信

7.1 证书生成和配置

  RabbitMQ对外提供服务时,为保证通信的安全性,通常使用SSL/TLS加密通信。
  关于非对称加密、SSL\TLS协议、证书授权中心(Certificate Authority,CA)可参考其他资料,本文仅演示RabbitMQ SSL\TLS通信的具体操作。对于生成证书,本文使用RabbitMQ官网推荐的tls-gen工具,该工具可在MacOS和Linux系统中使用,要求系统中装有openssl和Python 3.5以上版本。
  使用tls-gen生成证书:

# 下载,也可手工从以下网址下载后上传至服务器
git clone https://github.com/michaelklishin/tls-gen tls-gen
cd tls-gen/basic
# 123456是自定义的私钥密码,客户端会用到
make PASSWORD=123456
make verify
make info

  证书生成完毕后,会在basic目录下生成result、testca、server和client四个文件夹。
  通常使用单向认证的方式进行SSL\TLS通信,所需的文件为:
  (1)CA的证书文件testca/cacert.cer,C#客户端需要信任签名的CA;
  (2)CA证书文件result/ca_certificate.pem,用于服务端配置;
  (3)服务端证书文件result/server_certificate.pem,用于服务端配置;
  (4)服务端私钥文件result/server_key.pem,用于服务端配置;
  (5)客户端证书文件result/client_key.p12,用于客户端。
  在RabbitMQ解压目录的etc/rabbitmq/路径下,加入文件rabbitmq.conf(本文使用新格式配置文件,旧格式相应配置可自行参照官网的示例文件)。该路径为RabbitMQ默认配置文件路径,也可以RABBITMQ_CONFIG_FILE环境变量指定配置文件的路径。
  rabbitmq.conf内容:

# 限定非SSL\TLS的通信仅可在服务端本地连接
listeners.tcp.default = 127.0.0.1:5672
# SSL\TLS通信的端口
listeners.ssl.default = 5671
# 服务端私钥和证书文件配置
ssl_options.cacertfile = /root/tls-gen/basic/result/ca_certificate.pem
ssl_options.certfile = /root/tls-gen/basic/result/server_certificate.pem
ssl_options.keyfile = /root/tls-gen/basic/result/server_key.pem
# 有verify_none和verify_peer两个选项,verify_none表示完全忽略验证证书的结果,verify_peer表示要求验证对方证书
ssl_options.verify = verify_peer
# 若为true,服务端会向客户端索要证书,若客户端无证书则中止SSL握手;若为false,则客户端没有证书时依然可完成SSL握手
ssl_options.fail_if_no_peer_cert = true

7.2 Java客户端

  使用Java提供的keytool工具,将服务端证书server_certificate.pem转换为keystore证书文件:

keytool -import -alias rabbitmqserver -file F:/server_certificate.pem -keystore F:/server.keystore

  其中,“F:/server_certificate.pem”是服务端证书文件路径,“F:/server.keystore”是生成的keystore证书文件的路径。生成文件时要求设置一个密钥库口令,本文设置为“abcdef”。
  Java客户端如下:

import java.io.FileInputStream;
import java.security.KeyStore;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;


public class Sender {
   

	// RabbitMQ服务端地址、端口、用户名、密码
	private static final String ADDRESS = "10.176.64.227";
	private static final int PORT = 5671;
	private static 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值