我目前有一个名为“rabbitmq.
我为rabbitmq仪表板获取了由certbot(让我们加密)生成的nginx证书,并将它们放入rabbitmq配置中:
#listeners.tcp = none
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq/certs/fullchain.pem
ssl_options.certfile = /etc/rabbitmq/certs/cert.pem
ssl_options.keyfile = /etc/rabbitmq/certs/privkey.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
重新启动rabbitmq后,我可以在客户端计算机上诊断我与openssl的连接:
openssl s_client -connect rabbitmq.<server>.com:5671 -cert cert.pem -key privkey.pem -CAfile fullchain.pem -verify 8 -verify_hostname rabbitmq.<server>.com
但是 openssl 引发错误:
00864C1001000000:error:0A000418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:ssl/record/rec_layer_s3.c:1588:SSL alert number 48
我尝试将
verify_peer
更改为 verify_none
并且 SSL 客户端可以工作:
...
SSL handshake has read 4579 bytes and written 405 bytes
Verification error: unable to get issuer certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 2 (unable to get issuer certificate)
---
...
AMQP closed
但我不喜欢取消安全措施。我的 python pika 客户端无法工作。
我的第一个问题是我的工作做得好吗?我需要获取服务器证书(ca、cert、key)还是需要为客户端重新生成另一个证书?
SSL 警报编号 48 表示“unknown_ca”。服务器无法验证您发送的客户端证书,因为它找不到服务器信任的 CA 的任何路径。您可能缺少证书签名者的根 CA?
ssl_options.fail_if_no_peer_cert 应设置为 false,除非您的服务器必须验证连接来自何处。在这种情况下,它必须知道客户端证书提供者...... 如果您确保客户端无法在没有密码的情况下登录,那么这并不是一个巨大的安全问题。连接将受到保护。
使用letsencrypt,配置如下:
management.ssl.cacertfile = /etc/letsencrypt/live/example.com/chain.pem
management.ssl.certfile = /etc/letsencrypt/live/example.com/cert.pem
management.ssl.keyfile = /etc/letsencrypt/live/example.com/privkey.pem
谨防续订后的权限修改。