(1条消息) RabbitMQ 配置 SSL/TSL
首先,这篇文章讲的是基于docker安装的rabbitMQ配置SSL,如果你的MQ不是用docker安装的,在配置密钥文件路径的时候,可能方法不太一样。
docker运行RabbitMQ镜像时必须开放5671端口,和映射/etc/rabbitmq/ssl文件,命令如下
docker run -itd --name rabbitmq -v /home/rabbitmq/etc/rabbitmq:/etc/rabbitmq -v /home/rabbitmq/lib/rabbitmq:/var/lib/rabbitmq -v /home/rabbitmq/log/rabbitmq/:/var/log/rabbitmq -v /home/rabbitmq/ssl:/etc/rabbitmq/ssl -p 5671:5671 -p 5672:5672 -p 15672:15672 --privileged=true rabbitmq:management
执行完成后,在home文件夹下会自动创建对应目录。
运行以下命令查看rabbitmq服务是否启动成功docker ps -a如果启动失败,请参照我的另一篇文章,从【第六步】开始看https://blog.csdn.net/a15940835457/article/details/105405467
第一步,创建文件夹
cd /homemkdir rmpcacd rmqcamkdir certs privatechmod 700 privateecho 01 > serialtouch index.txt
第二步,在rmpca文件夹下创建【openssl.cnf】文件。因为-config参数要指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值。
openssl.cnf配置如下
[ ca ]default_ca = rmqca[ rmqca ]dir = .certificate = $dir/cacert.pemdatabase = $dir/index.txtnew_certs_dir = $dir/certsprivate_key = $dir/private/cakey.pemserial = $dir/serialdefault_crl_days = 7default_days = 365default_md = sha256policy = rmqca_policyx509_extensions = certificate_extensions[ rmqca_policy ]commonName = suppliedstateOrProvinceName = optionalcountryName = optionalemailAddress = optionalorganizationName = optionalorganizationalUnitName = optional[ certificate_extensions ]basicConstraints = CA:false[ req ]default_bits = 2048default_keyfile = ./private/cakey.pemdefault_md = sha256prompt = yesdistinguished_name = root_ca_distinguished_namex509_extensions = root_ca_extensions[ root_ca_distinguished_name ]commonName = hostname[ root_ca_extensions ]basicConstraints = CA:truekeyUsage = keyCertSign, cRLSign[ client_ca_extensions ]basicConstraints = CA:falsekeyUsage = digitalSignatureextendedKeyUsage = 1.3.6.1.5.5.7.3.2[ server_ca_extensions ]basicConstraints = CA:falsekeyUsage = keyEnciphermentextendedKeyUsage = 1.3.6.1.5.5.7.3.1
这里使用sha256进行加密,sha1已经不安全了,虽然性能会慢200多毫秒,无所谓。
第三步,生成CA证书
执行如下两个命令openssl req -x509 -config openssl.cnf -newkey rsa:2048 -days 365 -out cacert.pem -outform PEM -subj /CN=MyRmqca/ -nodesopenssl x509 -in cacert.pem -out cacert.cer -outform DER
证书生成成功

第四步,生成服务端证书
执行如下几个命令cd ..mkdir servercd serveropenssl genrsa -out key.pem 2048openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodescd ../rmqcaopenssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensionscd ../serveropenssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:MySecretPassword
如果在执行第5个命令出先如下错误

先执行以下命令,再执行上面的第5条命令即可。
cd /rootopenssl rand -writerand .rnd
第五步,生成客户端证书
cd ..mkdir clientcd clientopenssl genrsa -out key.pem 2048openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodescd ../rmqcaopenssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensionscd ../clientopenssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:MySecretPassword
第六步,把【rmqca】【server】【client】三个文件夹放到【/home/rabbitmq/ssl】文件夹下
执行以下3条命令cp -r rmqca /home/rabbitmq/sslcp -r server /home/rabbitmq/sslcp -r client /home/rabbitmq/ssl
第七步,修改RabbitMQ的配置文件rabbitmq.conf。在RabbitMQ3.7.0以后,配置文件是sysctl格式。
查看具体配置文件文档请移步https://www.rabbitmq.com/configure.html
rabbitmq.conf文件位置在【/home/rabbitmq/etc/rabbitmq】下
也可以执行以下命令寻找rabbitmq.conf文件位置
find / -name rabbitmq.conf
rabbitmq.conf配置如下:
loopback_users.guest = falselisteners.tcp.default = 5672# SSL\TLS通信的端口listeners.ssl.default = 5671# 服务端私钥和证书文件配置ssl_options.cacertfile = /home/rabbitmq/etc/rabbitmq/ssl/rmqca/cacert.pemssl_options.certfile = /home/rabbitmq/etc/rabbitmq/ssl/server/cert.pemssl_options.keyfile = /home/rabbitmq/etc/rabbitmq/ssl/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
第八步,重启RabbitMQ服务
docker start rabbitmqdocker ps -a
第九步,登录控制台 【localhost:15672】,看见如下图说明配置成功。

赞 (0)

