2016-06-20 14 views
1

Я пытаюсь настроить RabbitMQ Web Stomp для подписки на очереди RabbitMQ непосредственно с клиентского JavaScript. У меня есть ошибки при попытке использовать SSL с помощью Javascript-клиента RabbitMQ Web Stomp.Ошибка с RabbitMQ + Web STOMP + JavaScript-клиент по HTTPS

Сервер RabbitMQ работает надлежащим образом в контейнере Docker и доступен без проблем через веб-сервер Tomcat, на котором запущена Java Spring на другом контейнере.

Вот конфигурационный файл RabbitMQ:

[ 
    {rabbit, [ 
      {ssl_listeners, [5671] }, 
      {ssl_options, [ 
       {cacertfile,    "/etc/rabbitmq/ssl/ca/cacert.pem" }, 
       {certfile,    "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem" }, 
       {keyfile,    "/etc/rabbitmq/ssl/server/rabbitmq.key.pem" }, 
       {verify,     verify_peer}, 
       {fail_if_no_peer_cert, false}]}, 
      {loopback_users, []} 
    ]}, 
    {rabbitmq_web_stomp, [ 
         {ssl_config, [ 
          {port,  15671}, 
          {backlog, 1024}, 
          {certfile, "/etc/rabbitmq/ssl/ca/cacert.pem"}, 
          {keyfile, "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem"}, 
          {cacertfile, "/etc/rabbitmq/ssl/server/rabbitmq.key.pem"}, 
          {password, "changeme"} 
         ]} 
         ]} 
]. 

Dockerfile предоставляет следующие порты:

EXPOSE 5671 61613 61614 15671 15672 15674 

И докер-compose.yml для настройки RabbitMQ контейнер:

rabbitmq-server: 
    build: rabbitmq-ssl 
    image: gprevost/rabbitmq-ssl:latest 
    ports: 
     - "5671:5671" 
     - "61613:61613" 
     - "61614:61614" 
     - "15671:15671" 
     - "15672:15672" 
     - "15674:15674" 

При запуске контейнера управление кроликом доступно на порту 15672, d доступны URL-адреса http://192.168.99.100:15674/ws, http://192.168.99.100:15674/stomp и http://192.168.99.100:15674/stomp/info. Те же URL-адреса через HTTPS не работают.

Я также могу взаимодействовать (т. Е. Подключать и отправлять/получать сообщения) с сервером RabbitMQ, используя SSL непосредственно на Java (через порт 5671) из веб-сервера.

Однако, когда я пытаюсь подключиться через Javascript с помощью HTTPS, соединение немедленно закрывается (HTTPS требуется не только для целей безопасности, но и потому, что страница загружается через HTTPS, поэтому все запросы JavaScript должны быть защищены от не блокируется браузером). Вот код я использую:

<script src="//cdnjs.cloudflare.com/ajax/libs/sockjs-client/0.3.4/sockjs.min.js"></script> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script> 

<script th:fragment="script" th:inline="javascript" type="text/javascript"> 

    $(document).ready(function(e) { 
     var ws = new SockJS("https://192.168.99.100:15674/stomp"); 
     var client = Stomp.over(ws); 
    }); 

</script> 

появляется следующее сообщение об ошибке в консоли браузера:

sockjs.min.js: 27 ПОЛУЧИТЬ https://192.168.99.100:15674/stomp/info нетто :: ERR_CONNECTION_CLOSED

Любая идея где я делаю что-то неправильно? Я не эксперт с веб-сокетами или STOMP, и я не разработчик Erlang, поэтому довольно сложно полностью понять эту ошибку. Любая помощь очень ценится!

На стороне сервера RabbitMQ, вот журналы, которые появляются для этого запроса, в результате чего соединение будет закрыто:

RabbitMQ-Server_1 | = ОШИБКА ОТЧЕТА ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | У слушателя ранчо http был запущен процесс соединения с cowboy_protocol: start_link/4 at < 0.27746.0> exit с причиной: {function_clause, [{cowboy_protocol, parse_method, [< >>, {state, # Port < 0.30021>, ranch_tcp, [ cowboy_router, cowboy_handler], false, [{listener, http}, {dispatch, [{'_', [], [{[< < "stomp" >>, '...'], [], sockjs_cowboy_handler, { сервис "/ топать", # Fun, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js ", false, true, 5000,25000,131072, # Fun, undefined}}, {[< <" ws ">>], [], rabbit_ws_handler, [{type, text}]}]}]}], неопределенные, неопределенные, 5,1 100,4096,64,4096,100,5000,1466402348682}, < < 22,3,1,0,137,1,0,0,133,3,2,124,30,85,16,113,253,213,38,165,219,181,225,215,84 , 87,194,106,235,193,207,37,26,166,115,208,87,3,91,89,138,121,207,0,0,16,192,10,192,20,192,9,192,19,0,53,0,47,0,10,86,0,1,0,0 , 76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5,1,0,0,0,0,51,116,0,0 , 0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,116,112,47,49,46,49,117,80,0,0,0,11 , 0,2,1,0,0,10,0,8,0,6,0,29,0,23,0,24 >>], [{файл, "SRC/cowboy_protocol.erl"}, { линия, 168}]}]}

RabbitMQ-SERVER_1 |

RabbitMQ-сер ver_1 | = ОШИБКА ОТЧЕТА ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | Ошибка в процессе < 0.27747.0> на узле кролика @ 4391a6fed075 с выходным значением:

rabbitmq-server_1 | {function_clause,

rabbitmq-server_1 | [{cowboy_protocol, parse_method,

rabbitmq-server_1 | [< < >>,

rabbitmq-server_1 | {state, # Port < 0.30022>, ranch_tcp,

rabbitmq-server_1 | [cowboy_router, cowboy_handler],

rabbitmq-server_1 | false,

rabbitmq-server_1 | [{слушатель, http},

rabbitmq-server_1 | {рассылка,

rabbitmq-server_1 | [{'_', [],

rabbitmq-server_1 | [{[< < "stomp" >>, '...'],

rabbitmq-server_1 | [], sockjs_cowboy_handler,

rabbitmq-server_1 | {service, "/ stomp",

rabbitmq-server_1 | Fun, {},

rabbitmq-server_1 | «//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.JS "

RabbitMQ-Server_1 | ложь, правда, 5000,25000,131072,

RabbitMQ-SERVER_1 | # Fun, неопределенные}},

RabbitMQ-Server_1 | {[< <" WS «>>], [], rabbit_ws_handler, [{type, text}]}]}]}],

rabbitmq-server_1 | undefined, undefined, 5,1,100,4096,64,4096,100,5000, 1466402348684},

rabbitmq-server_1 < < 22,3,1,0,141,1,0,0,137,3,2,82,175,8,177,50,73,15,108,57,27,92,102,

rabbitmq-server_1 | 113,100,40,128,201,104,90,3,39,96,30,35,45,2,6,1,46,227,175,146,

rabbitmq-server_1 | 0,0,20,192,10,192,20,0,57,192,9,192,19,0,51,0,53,0,47,0,10,86,0,1,

rabbitmq-server_1 | 0,0,76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5,1,0,0,0,0,51,116, 0,0,

rabbitmq-server_1 | 0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,

rabbitmq-server_1 | 116, 112, 47, 49, 46, 49, 111, 80, 0, rabbitmq-server_1 | 23,0,24 >>],

rabbitmq-server_1 | [{файл, "src/cowboy_protocol.erl"}, {line, 168}]}]}

rabbitmq-server_1 |

rabbitmq-server_1 | = ОШИБКА ОТЧЕТА ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | У слушателя ранчо http был процесс подключения, начатый с cowboy_protocol: start_link/4 в < 0.27747.0> exit с причиной: {function_clause, [{cowboy_protocol, parse_method, [< >>, {state, # Port < 0.30022>, ranch_tcp, [ cowboy_router, cowboy_handler], false, [{listener, http}, {dispatch, [{'_', [], [{[< < "stomp" >>, '...'], [], sockjs_cowboy_handler, { сервис "/ топать", # Fun, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true,5000,25000,131072,#Fun,undefined} }, {[< < "ws" >>], [], rabbit_ws_handler, [{type, text}]}]}]}], undefined, undefined, 5,1,100,4096,64,4096,100,5000, 1466402348684}, < < 22,3,1,0,141,1,0,0,137,3,2,82,175,8,177,50,73,15,108,57,27,92,102,113,100,40,128,201,104,90,3,39,96,30,35 , 45,2,6,1,46,227,175,146,0,0,20,192,10,192,20,0,57,192,9,192,19,0,51,0,53,0 , 47,0,10,86,0,1,0,0,76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5 , 1,0,0,0,0,51,116,0,0,0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,116,112,47 , 49,46,49,117,80,0,0,0,11,0,2,1,0,0,10,0,8,0,6,0,29,0,23,0,24 >> ], [{файл, "src/cowboy_protocol.erl"}, {line, 168}]}]}

Спасибо заранее, если кто-нибудь может помочь мне прояснить это.

ответ

0

Когда вы используете ssl, порт другой не то же самое для http.

можно настроить с помощью этого действия он работал для меня

http://www.gettingcirrius.com/2013/01/configuring-ssl-for-rabbitmq.html

+0

Благодарим вас за ответ. Но, как я уже упоминал, я уже настроил SSL для RabbitMQ и работает с использованием клиента Java. Проблема возникает при попытке использовать RabbitMQ Web STOMP с SSL (кстати, активируются следующие плагины: rabbitmq_management rabbitmq_stomp rabbitmq_web_stomp). –

0

Порт действительно должен быть изменен, чтобы использовать SSL (15671 на моей конфигурации), но продолжал получать «Connection Отказался» ошибка.

Только спустя несколько часов я заметил свою собственную ошибку: неправильные сертификаты были указаны в моей конфигурации Web Stomp.

НЕПРАВИЛЬНО:
CERTFILE: cacert.pem
файл_ключа: rabbitmq.cert.key
cacertfile: rabbitmqkey.pem

ПРАВИЛЬНО:
cacertfile: cacert. pem
certfile: rabbitmq.cert.key
файл_ключа: rabbitmqkey.pem

Так, он работал после изменения конфигурации RabbitMQ от:

{rabbitmq_web_stomp, [ 
         {ssl_config, [ 
          {port,  15671}, 
          {backlog, 1024}, 
          {certfile, "/etc/rabbitmq/ssl/ca/cacert.pem"}, 
          {keyfile, "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem"}, 
          {cacertfile, "/etc/rabbitmq/ssl/server/rabbitmq.key.pem"}, 
          {password, "changeme"} 
         ]} 
         ]} 

к:

{rabbitmq_web_stomp, [ 
         {ssl_config, [ 
          {port,  15671}, 
          {backlog, 1024}, 
          {cacertfile, "/etc/rabbitmq/ssl/ca/cacert.pem"}, 
          {certfile, "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem"}, 
          {keyfile, "/etc/rabbitmq/ssl/server/rabbitmq.key.pem"}, 
          {password, "changeme"} 
         ]} 
         ]} 

и подключения с использованием порта 15671:

<script th:fragment="script" th:inline="javascript" type="text/javascript"> 

    $(document).ready(function(e) { 
     var ws = new SockJS("https://192.168.99.100:15671/stomp"); 
     var client = Stomp.over(ws); 
    }); 

</script> 
+0

Имел ту же конфигурацию на сайте службы высокоскоростного трафика и работал в качестве прелести. Однако с Chrome 56 (также последним Firefox) он перестает работать. У вас возникли проблемы с настройкой, @ guillaume-prevost? –

 Смежные вопросы

  • Нет связанных вопросов^_^