使用rmqca作为RabbitMQ的认证中心,certs文件用于存放CA产生的证书,private存放CA的密钥,改变其权限不允许第三方访问,serial存放CA证书的序列号,index.txt存放CA颁发的证书。
# mkdir rmqca # cd rmqca # mkdir certsprivate # chmod 700private # echo 01 >serial # touch index.txt
# openssl req -x509 -config openssl.cnf-newkey rsa:2048 -days 365 \ -out cacert.pem -outformPEM -subj /CN=MyRmqca/ -nodes # openssl x509 -in cacert.pem -out cacert.cer-outform DER
生成RSA密钥然后为其提供证书
# cd .. # ls rmqca # 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:123456
# cd .. # ls server testca # 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=client/ -nodes # cd ../rmqca # openssl ca-config openssl.cnf -in ../client/req.pem -out \ ../client/cert.pem -notext -batch -extensions client_ca_extensions # cd ../client # openssl pkcs12 -export -out keycert.p12 -in cert.pem-inkey key.pem -passout pass:123456
在rabbit(rabbit.config)的配置中加入如下配置:
{rabbit, [ {ssl_listeners, [5671]}, {ssl_options,[{cacertfile,"/path/to/testca/cacert.pem"}, {certfile,"/path/to/server/cert.pem"}, {keyfile,"/path/to/server/key.pem"}, {verify,verify_peer}, {fail_if_no_peer_cert,false}]} ]}
有关于是否需要客户端提供证书,以及是否需要被信赖的证书。是由verify和fail_if_no_peer_cert两个参数来控制的。如果设置为{fail_if_no_peer_cert,false},这表示我们已经准备好接受客户端,且不需要它向我们发送证书。如果设置{verify,verify_peer}选项,表示如果客户端向我们发送一个证书,我们必须和它建立一个信任。
如果设置{verify, verify_none},客户端和服务端之间将不会有证书交换。
cacertfile:根证书的路径
certfile:服务端证书路径
keyfile:服务端key路径
在rabbit(rabbit.config)的配置中加入如下配置:
{rabbitmq_web_stomp, [{ssl_config, [{port, 15671}, {backlog, 1024}, {certfile, path/to/certs/client/cert.pem"}, {keyfile, "path/to/certs/client/key.pem"}, {cacertfile,"path/to/certs/testca/cacert.pem"}, {password, "changeme"} ] }] }
配置项参数说明如下:
port:端口号
backlog:最大等待连接队列数,默认1024
certfile:客户端证书路径
keyfile:客户端key路径
caceretfile:根证书路径
password:客户端证书保护密码
配置好如上项,就可以通过https://ip:port/stomp访问了。