2016-06-20 23 views
1

Ich versuche, RabbitMQ Web Stomp RabbitMQ-Warteschlangen direkt von clientseitigen JavaScript zu abonnieren. Ich habe Fehler bei der Verwendung von SSL mit dem RabbitMQ Web Stomp Javascript-Client.Fehler mit RabbitMQ + Web STOMP + JavaScript Client über HTTPS

Der RabbitMQ-Server läuft ordnungsgemäß in einem Docker-Container und wird problemlos über den Tomcat-Webserver mit Java Spring auf einem anderen Container aufgerufen. Hier

ist die RabbitMQ Konfigurationsdatei:

[ 
    {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"} 
         ]} 
         ]} 
]. 

Die Dockerfile macht die folgenden Anschlüsse:

EXPOSE 5671 61613 61614 15671 15672 15674 

Und die Docker-compose.yml den RabbitMQ Container einzurichten:

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

Beim Ausführen des Containers ist das Rabbit Management auf Port 15672 verfügbar d Die URLs http://192.168.99.100:15674/ws, http://192.168.99.100:15674/stomp und http://192.168.99.100:15674/stomp/info sind zugänglich. Die gleichen URLs über HTTPS funktionieren nicht.

Ich auch zu interagieren (d. H. Verbinden und senden/empfangen von Nachrichten) mit dem RabbitMQ-Server mit SSL direkt in Java (über Port 5671) von der Web-Server-Back-End.

Wenn ich jedoch über HTTPS versuche, eine Verbindung über Javascript herzustellen, wird die Verbindung sofort geschlossen (HTTPS ist nicht nur aus Sicherheitsgründen erforderlich, sondern auch, weil die Seite über HTTPS geladen wird und alle JavaScript-Anfragen gesichert werden müssen) nicht vom Browser blockiert werden). Hier ist der Code, die ich benutze:

<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> 

Der folgende Fehler in der Konsole des Browsers angezeigt wird:

sockjs.min.js: 27 GET https://192.168.99.100:15674/stomp/info net :: ERR_CONNECTION_CLOSED

Jede Idee Wo mache ich etwas falsch? Ich bin kein Experte für Web Sockets oder STOMP, und ich bin kein Erlang-Entwickler, was es ziemlich schwer macht, den Fehler vollständig zu verstehen. Jede Hilfe sehr geschätzt!

Auf der RabbitMQ Server-Seite, hier sind die Protokolle, die für diese Anforderung erscheinen, so dass die Verbindung geschlossen werden:

rabbitmq-server_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | Ranch Listener http hatte Connection-Prozess mit cowboy_protocol gestartet: start_link/4 um < 0.27746.0> beenden mit Grund: {function_clause, [{cowboy_protocol, parse_method, [< < >>, {Zustand, # Port < 0.30021>, ranch_tcp, [ cowboy_router, cowboy_handler], false, [{zuhörer, http}, {ausgang, [{'_', [], [{< < "stampfen" >>, '...'], [], sockjs_cowboy_handler, { Dienst, "/ stomp", # Spaß, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js ", falsch, wahr, 5000,25000,131072, # Spaß, undefiniert}}, {[< <" ws ">>], [], rabbit_ws_handler, [{Typ, Text}]}}}}}], undefiniert, undefiniert, 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 >>], [{datei, "src/cowboy_protocol.erl"}, { Linie, 168}]}]}

rabbitmq-server_1 |

rabbitmq-ser ver_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | Fehler im Prozess < 0.27747.0> am Knoten Hase @ 4391a6fed075 mit Ausgangswert:

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 | falsch,

rabbitmq-server_1 | [{Listener, http},

rabbitmq-server_1 | {Versand,

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

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

rabbitmq-server_1 | [], sockjs_cowboy_handler,

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

rabbitmq-server_1 | Spaß, {},

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

rabbitmq-server_1 | false, true, 5000,25000,131072,

rabbitmq-server_1 | # Spaß, undefined}},

rabbitmq-server_1 | {[< <" ws ">>], [], rabbit_ws_handler, [{Typ, 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,140,128,201,104,90,3,39,96,30,35,45,2,6,1,46,227,175,146,

rabbitmq-server_1 | 0,020,192,10,192,10,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,117,80,0,0,0,11,2,2,1,0,0,10,0,8,0,6,0,29,0,

rabbitmq-server_1 | 23,0,24 >>],

rabbitmq-server_1 | [{Datei, "src/cowboy_protocol.erl"}, {Zeile, 168}]}}}

rabbitmq-server_1 |

rabbitmq-server_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===

rabbitmq-server_1 | Ranch Listener http hatte Connection-Prozess mit cowboy_protocol gestartet: start_link/4 um < 0.27747.0> mit Grund verlassen: {Funktion_Clause, [{Cowboy_Protocol, Parse_Method, [< < >>, {Zustand, # Port < 0.30022>, Ranch_tcp, [ cowboy_router, cowboy_handler], false, [{zuhörer, http}, {ausgang, [{'_', [], [{< < "stampfen" >>, '...'], [], sockjs_cowboy_handler, { service, "/ stomp", # Spaß, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true5000,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,140,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,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 >> ], [{Datei "src/cowboy_protocol.erl"}, {line, 168}]}]}

Vielen Dank im Voraus, wenn jemand kann dies helfen, mich aufklären.

Antwort

0

Wenn Sie SSL verwenden, ist der Port ein anderes ist nicht das gleiche für http.

können Sie konfigurieren, indem diese Schritte es für mich gearbeitet

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

+0

Vielen Dank für die Antwort. Aber wie bereits erwähnt, habe ich SSL für RabbitMQ konfiguriert und es funktioniert mit einem Java-Client. Das Problem tritt auf, wenn Sie RabbitMQ Web STOMP mit SSL verwenden (übrigens sind die folgenden Plugins aktiviert: rabbitmq_management rabbitmq_stomp rabbitmq_web_stomp). –

0

Der Hafen in der Tat geändert werden muss die Verwendung von SSL (15671 auf meine Konfiguration), behielt aber immer Fehler „Connection Refused“.

Erst nach ein paar weiteren Stunden bemerkte ich meinen eigenen Fehler: In meiner Web Stomp-Konfiguration wurden die falschen Zertifikate angegeben.

FALSCH:
certfile: cacert.pem
keyfile: rabbitmq.cert.key
cacertfile: rabbitmqkey.pem

RICHTIG:
cacertfile: cacert. pem
certfile: rabbitmq.cert.key
keyfile: rabbitmqkey.pem

Also, es hat funktioniert, nachdem sie von der RabbitMQ Konfiguration zu ändern:

{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"} 
         ]} 
         ]} 

zu:

{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"} 
         ]} 
         ]} 

und Anschluss-Port 15671 mit:

<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

Hatte die gleiche Konfiguration auf einer stark frequentierten Service-Site und arbeitete als Charme. Mit Chrome 56 (auch Firefox) funktioniert es jedoch nicht mehr. Haben Sie Probleme mit Ihrem Setup, @ guillaume-prevost, festgestellt? –