Цель: Я занимаюсь исследованием аутентификации RabbitMQ без пароля.Моя цель - подключить простой Java-клиент к серверу RabbitMQ с помощью TLS
Платформа :
- Rabbit-сервер версии 3.7.7
- erlang версия 21.0.1
Шаги, предпринятые в соответствии с документацией:
Я имею в виду документацию по https://www.rabbitmq.com/ssl.html
1) Я сгенерировал CA, Сертификаты, закрытые ключи, как указано в (https://www.rabbitmq.com/ssl.html#manual-certificate-generation)
2). Основные настройки, связанные с TLS, выполняются в rabbitmq.config следующим образом (https://www.rabbitmq.com/ssl.html#enabling-tls):
[{
rabbit, [
{
tcp_listeners, [5672]
},{
tcp_listeners, [{"127.0.0.1", 5672},
{"::1", 5672}]
},
{password_hashing_module, rabbit_password_hashing_sha512},
{auth_mechanisms, ['PLAIN', 'AMQPLAIN', 'EXTERNAL']},
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile, "/path/to/ca_certificate_bundle.pem"},
{certfile, "/path/to/server_certificate.pem"},
{keyfile, "/path/to/server/private_key.pem"},
{password, "password"},
{verify, verify_peer},
{fail_if_no_peer_cert, false}]}
]
}].
3) Я проверил, что TLS включен в файле журнала (https://www.rabbitmq.com/ssl.html#enabling-tls-verify-configuration)
4) Я устанавливаю простой пример java-клиента на сервер RabbitMQ по TLS без проверки сертификатов, как упоминалосьв https://www.rabbitmq.com/ssl.html#java-client-connecting
Проблема:
После запуска кода я получаю исключение тайм-аута сокета следующим образом:
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
at sun.security.ssl.AppOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at java.io.DataOutputStream.flush(Unknown Source)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:147)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:153)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:285)
at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:900)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:859)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:817)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:954)
at Example1.main(Example1.java:17)
В Example1.java сбой линии при Соединении conn = factory.newConnection ();
Я искал в сетиза этим исключением, но предлагаемые решения, похоже, не связаны между собой.Можете ли вы сказать мне, где я иду не так?