(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文件夹下会自动创建对应目录。

  1. 运行以下命令查看rabbitmq服务是否启动成功
  2. docker ps -a
  3. 如果启动失败,请参照我的另一篇文章,从【第六步】开始看
  4. https://blog.csdn.net/a15940835457/article/details/105405467

第一步,创建文件夹

  1. cd /home
  2. mkdir rmpca
  3. cd rmqca
  4. mkdir certs private
  5. chmod 700 private
  6. echo 01 > serial
  7. touch index.txt

第二步,在rmpca文件夹下创建【openssl.cnf】文件。因为-config参数要指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值。

openssl.cnf配置如下

  1. [ ca ]
  2. default_ca = rmqca
  3. [ rmqca ]
  4. dir = .
  5. certificate = $dir/cacert.pem
  6. database = $dir/index.txt
  7. new_certs_dir = $dir/certs
  8. private_key = $dir/private/cakey.pem
  9. serial = $dir/serial
  10. default_crl_days = 7
  11. default_days = 365
  12. default_md = sha256
  13. policy = rmqca_policy
  14. x509_extensions = certificate_extensions
  15. [ rmqca_policy ]
  16. commonName = supplied
  17. stateOrProvinceName = optional
  18. countryName = optional
  19. emailAddress = optional
  20. organizationName = optional
  21. organizationalUnitName = optional
  22. [ certificate_extensions ]
  23. basicConstraints = CA:false
  24. [ req ]
  25. default_bits = 2048
  26. default_keyfile = ./private/cakey.pem
  27. default_md = sha256
  28. prompt = yes
  29. distinguished_name = root_ca_distinguished_name
  30. x509_extensions = root_ca_extensions
  31. [ root_ca_distinguished_name ]
  32. commonName = hostname
  33. [ root_ca_extensions ]
  34. basicConstraints = CA:true
  35. keyUsage = keyCertSign, cRLSign
  36. [ client_ca_extensions ]
  37. basicConstraints = CA:false
  38. keyUsage = digitalSignature
  39. extendedKeyUsage = 1.3.6.1.5.5.7.3.2
  40. [ server_ca_extensions ]
  41. basicConstraints = CA:false
  42. keyUsage = keyEncipherment
  43. extendedKeyUsage = 1.3.6.1.5.5.7.3.1

这里使用sha256进行加密,sha1已经不安全了,虽然性能会慢200多毫秒,无所谓。

第三步,生成CA证书

  1. 执行如下两个命令
  2. openssl req -x509 -config openssl.cnf -newkey rsa:2048 -days 365 -out cacert.pem -outform PEM -subj /CN=MyRmqca/ -nodes
  3. openssl x509 -in cacert.pem -out cacert.cer -outform DER

证书生成成功

第四步,生成服务端证书

  1. 执行如下几个命令
  2. cd ..
  3. mkdir server
  4. cd server
  5. openssl genrsa -out key.pem 2048
  6. openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodes
  7. cd ../rmqca
  8. openssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensions
  9. cd ../server
  10. openssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:MySecretPassword

如果在执行第5个命令出先如下错误

先执行以下命令,再执行上面的第5条命令即可。

  1. cd /root
  2. openssl rand -writerand .rnd

第五步,生成客户端证书

  1. cd ..
  2. mkdir client
  3. cd client
  4. openssl genrsa -out key.pem 2048
  5. openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=$(hostname)/O=server/ -nodes
  6. cd ../rmqca
  7. openssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensions
  8. cd ../client
  9. openssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:MySecretPassword

第六步,把【rmqca】【server】【client】三个文件夹放到【/home/rabbitmq/ssl】文件夹下

  1. 执行以下3条命令
  2. cp -r rmqca /home/rabbitmq/ssl
  3. cp -r server /home/rabbitmq/ssl
  4. 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配置如下:

  1. loopback_users.guest = false
  2. listeners.tcp.default = 5672
  3. # SSL\TLS通信的端口
  4. listeners.ssl.default = 5671
  5. # 服务端私钥和证书文件配置
  6. ssl_options.cacertfile = /home/rabbitmq/etc/rabbitmq/ssl/rmqca/cacert.pem
  7. ssl_options.certfile = /home/rabbitmq/etc/rabbitmq/ssl/server/cert.pem
  8. ssl_options.keyfile = /home/rabbitmq/etc/rabbitmq/ssl/server/key.pem
  9. # 有verify_none和verify_peer两个选项,verify_none表示完全忽略验证证书的结果,verify_peer表示要求验证对方证书
  10. ssl_options.verify = verify_peer
  11. # 若为true,服务端会向客户端索要证书,若客户端无证书则中止SSL握手;若为false,则客户端没有证书时依然可完成SSL握手
  12. ssl_options.fail_if_no_peer_cert = true

第八步,重启RabbitMQ服务

  1. docker start rabbitmq
  2. docker ps -a

第九步,登录控制台 【localhost:15672】,看见如下图说明配置成功。

 

(0)

相关推荐