如何使用SANS创建RabbitMQ证书
本文由我们社区的一位强大成员贡献:
Bradley Herrin, IBM
bcherrin.wolfpack@gmail.com
GitHub: bradleycherrin
当尝试通过TLS连接RabbitMQ时,如果证书中没有启用san,可能会遇到以下错误。2022-03-15T23:10:21.393Z [jfxr] [ERROR] [35739315012a120d] [mq_connector:270] [main]连接到rabbit消息队列检查mq设置错误。错误:x509:证书依赖于传统的Common Name字段,请使用san代替
如何使用SANS创建证书
要解决这个问题,我们需要使用san创建证书。执行此操作的步骤可能取决于您的OpenSSL版本。在下面的示例中,该证书是使用OpenSSL 1.1.1创建的。这些说明应该类似于我们文档中的说明维基,但是,本文将介绍如何使用san创建证书和常规配置步骤。
1.我们需要创建一个包含subjectAltName的openssl.cnf文件。下面是一个例子供参考。
(要求)
Default_bits = 4096
Default_md = sha256
Default_keyfile = privkey.pem
Distinguished_name = req_distinguished_name
Attributes = req_attributes
x509_extensions = v3_ca #要添加到自签名证书中的扩展
(req_attributes)
(req_distinguished_name)
countryName =美国
countryName_min = 2
countryName_max = 2
stateOrProvinceName = XXX
localityName = XXX
0.organizationName = JFROG
organizationalUnitName = XXX
commonName = www.si-fil.com
commonName_max = 64
emailAddress = example@www.si-fil.com
emailAddress_max = 64
[v3_ca]
subjectKeyIdentifier =哈希
authorityKeyIdentifier = keyid:既往,发行人
basicConstraints = critical,CA:true
[req_ext]
subjectAltName = DNS:testxray.vm
2.配置了openssl.cnf之后,就可以运行下面的命令来生成所需的证书。请注意,subjectAltName仅作为示例。
Openssl req -new -nodes -text out ca.csr -keyout ca-key。. pem -subj "/CN=certificate-authority" -addext "subjectAltName = DNS:testx射线.vm"
Openssl x509 -req -in ca.csr -text -extfile Openssl .cnf -extensions v3_ca -signkey ca-key。导出ca-cert.pem
Openssl req -new -nodes -text -out server。CSR -keyout server-key。pem -subj "/CN=testx射线。vm" -addext "subjectAltName = DNS:testxray.vm"
Openssl x509 -req -in服务器。csr -text -extfile openssl.cnf -extensions v3_ca -CA ca-cert. xmlpem -CAkey ca-key。输出server-cert.pem
Openssl req -new -nodes -text -out客户端。CSR -keyout client-key。pem -subj "/CN=testx射线。vm" -addext "subjectAltName = DNS:testxray.vm"
Openssl x509 -req -in客户端。csr -text -extfile openssl.cnf -extensions v3_ca -CA ca-cert. xmlpem -CAkey ca-key。输出client-cert.pem
3.我们需要将这些证书复制到正确的位置。请参考以下文档,因为这可能取决于您的安装类型。
4.然后,我们需要配置x光系统。Yaml来使用这些证书。下面是一个示例系统。Yaml供参考。
共享:
rabbitMq:
##关闭rabbitmq和xray的其他服务
##默认rabbitmq将一直运行
#自动停车:真
节点:
rabbitmqConf:
—name: ssl_options.cacertfile
价值:/var/opt/jfrog/xray/data/rabbitmq/certs/ca-cert.pem
—name: ssl_options.certfile
价值:/var/opt/jfrog/xray/data/rabbitmq/certs/server-cert.pem
—name: ssl_options.keyfile
价值:/var/opt/jfrog/xray/data/rabbitmq/certs/server-key.pem
—name: ssl_options.verify
价值:verify_peer
—name: ssl_options.fail_if_no_peer_cert . zip
值:false
—名称:management.listener.ssl
值:true
—名称:listener .ssl.default
值:5671
自动停车:真
url: amqp: / /客人:password@rabbitmq: 5671
密码:密码
env:
GODEBUG:“x509ignoreCN = 0”
RABBITMQ_ERLANG_COOKIE: "{{xray_first_node}}-ERLANG-COOKIE"
RABBITMQ_NODENAME: "{{inventory_hostname_short}}"
XRAY_CERT_FILE_PATH: / opt / jfrog / x光/ var /数据/服务器/证书/ client-cert.pem”
XRAY_CERT_KEY_FILE_PATH: / opt / jfrog / x光/ var /数据/服务器/证书/ client-key.pem”
XRAY_CA_CERT_FILE_PATH: / opt / jfrog / x光/ var /数据/服务器/证书/ ca-cert.pem”
5.我们还需要确保$XRAY_HOME/app/bin/rabbitmq/rabbitmq.conf配置为使用certs。它应该类似于下面所示。
听众。TCP = none
listener .ssl.default = {{xray_rabbitmq_ssl_port_1}}
listeners.ssl。Other_port = {{xray_rabbitmq_ssl_port_2}}
loopback_users。Guest = false
ssl_options。Verify = verify_peer
ssl_options。Fail_if_no_peer_cert = false
ssl_options。Cacertfile = {{xray_rabbitmq_certs_dir}}/ca-cert.pem
ssl_options。Certfile = {{xray_rabbitmq_certs_dir}}/server-cert.pem
ssl_options。Keyfile = {{xray_rabbitmq_certs_dir}}/server-key.pem
Management.ssl.port = {{xray_rabbitmq_management_ssl_port}}
Management.ssl.cacertfile = {{xray_rabbitmq_certs_dir}}/ca-cert.pem
Management.ssl.certfile = {{xray_rabbitmq_certs_dir}}/server-cert.pem
Management.ssl.keyfile = {{xray_rabbitmq_certs_dir}}/server-key.pem
Management.listener.ssl = true
6.运行REST API在Xray中启用与RabbitMQ的TLS连接¶
curl -u -X PUT -H "Content-Type: application/json" http://:8082/xray/api/v1/configuration/systemParameters -d '{"sslInsecure": false,"maxDiskDataUsage": 80,"monitorSamplingInterval": 300,"mailNoSsl": false,"messageMaxTTL": 7,"jobInterval": 86400,"allowSendingAnalytics": true,"httpsPort": 443,"enableTlsConnectionToRabbitMQ": true,"httpClientMaxConnections": 50,"httpClientMaxIdleConnections": 20}'
7.重新启动x射线,检查是否可以连接到RabbitMQ
