我想建立从Java客户端到RabbitMQ AMQP消息代理的AMQP连接。它实际上工作正常,如https://www.rabbitmq.com/api-guide.html所述。
我在做:
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
factory.setHost(hostName);
factory.setPort(portNumber);
Connection conn = factory.newConnection();
或作为等同物,以下内容相同:
ConnectionFactory factory = new ConnectionFactory();
factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost");
Connection conn = factory.newConnection();
但我是否正确假设我的URI字符串中的用户名和密码是通过互联网传输的?如果是这种情况,我想知道如何使这种身份验证更安全。
答案 0 :(得分:0)
默认情况下,amqp不使用加密。所以是的,当我阅读文档时,您的用户名确实会在amqp协议中以纯文本格式发送。
RabbitMQ支持official rabbitmq documentation中所述的amqp的tls加密。
因此,为了保护您的连接,您必须在Rabbitmq中启用ssl auth并告诉它在哪里可以找到有效的证书。
例如在rabbitmq.conf
中:
listeners.ssl.default = 5671
ssl_options.cacertfile = /path/to/ca_certificate.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = false