(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 /home
mkdir rmpca
cd rmqca
mkdir certs private
chmod 700 private
echo 01 > serial
touch index.txt
第二步,在rmpca文件夹下创建【openssl.cnf】文件。因为-config参数要指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值。
openssl.cnf配置如下
[ ca ]
default_ca = rmqca
[ rmqca ]
dir = .
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
default_crl_days = 7
default_days = 365
default_md = sha256
policy = rmqca_policy
x509_extensions = certificate_extensions
[ rmqca_policy ]
commonName = supplied
stateOrProvinceName = optional
countryName = optional
emailAddress = optional
organizationName = optional
organizationalUnitName = optional
[ certificate_extensions ]
basicConstraints = CA:false
[ req ]
default_bits = 2048
default_keyfile = ./private/cakey.pem
default_md = sha256
prompt = yes
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = hostname
[ root_ca_extensions ]
basicConstraints = CA:true
keyUsage = keyCertSign, cRLSign
[ client_ca_extensions ]
basicConstraints = CA:false
keyUsage = digitalSignature
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ server_ca_extensions ]
basicConstraints = CA:false
keyUsage = keyEncipherment
extendedKeyUsage = 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/ -nodes
openssl x509 -in cacert.pem -out cacert.cer -outform DER
证书生成成功
第四步,生成服务端证书
执行如下几个命令
cd ..
mkdir server
cd server
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodes
cd ../rmqca
openssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensions
cd ../server
openssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:MySecretPassword
如果在执行第5个命令出先如下错误
先执行以下命令,再执行上面的第5条命令即可。
cd /root
openssl rand -writerand .rnd
第五步,生成客户端证书
cd ..
mkdir client
cd client
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodes
cd ../rmqca
openssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensions
cd ../client
openssl 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/ssl
cp -r server /home/rabbitmq/ssl
cp -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 = false
listeners.tcp.default = 5672
# SSL\TLS通信的端口
listeners.ssl.default = 5671
# 服务端私钥和证书文件配置
ssl_options.cacertfile = /home/rabbitmq/etc/rabbitmq/ssl/rmqca/cacert.pem
ssl_options.certfile = /home/rabbitmq/etc/rabbitmq/ssl/server/cert.pem
ssl_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 rabbitmq
docker ps -a
第九步,登录控制台 【localhost:15672】,看见如下图说明配置成功。
赞 (0)