2016-06-20 10 views
1

クライアント側のJavaScriptから直接RabbitMQキューに登録するようにRabbitMQ Web Stompを設定しようとしています。 RabbitMQ Web Stomp JavascriptクライアントでSSLを使用しようとするとエラーが発生します。HTTPSによるRabbitMQ + Web STOMP + JavaScriptクライアントのエラー

RabbitMQサーバーはDockerコンテナで正しく動作しており、別のコンテナでJava Springを実行しているTomcat Webサーバー経由で問題なくアクセスできます。

EXPOSE 5671 61613 61614 15671 15672 15674 

とRabbitMQのコンテナ設定するには、ドッキングウィンドウ-compose.yml:

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

[ 
    {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は、次のポートを公開します。ここでは

はRabbitMQの設定ファイルです

コンテナを実行すると、ウサギ管理はポート15672で利用できます。 URL http://192.168.99.100:15674/ws,http://192.168.99.100:15674/stompおよびhttp://192.168.99.100:15674/stomp/infoにアクセスできます。 HTTPS経由の同じURLは機能しません。

また、RabbitMQサーバーとの相互作用(つまり、ポート5671経由)をSSLを使用してWebサーバーのバックエンドから直接使用することもできます。

ただし、HTTPSを使用してJavascript経由で接続しようとすると、接続がすぐに終了します(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 GET https://192.168.99.100:15674/stomp/infoネット:: ERR_CONNECTION_CLOSED

任意のアイデアどこが間違っているの?私はWeb SocketsやSTOMPの専門家ではなく、私はErlangの開発者ではないため、エラーを完全に理解するのはかなり難しいです。どのような助けが大いに感謝!ここでのRabbitMQサーバー側で

は、接続がクローズさせる、その要求に対して表示されるログです:

のRabbitMQ-SERVER_1は| =エラーレポート==== 2016年6月20日:: 05:59:03 ===

rabbitmq-server_1 |牧場のリスナーhttpは、cowboy_protocolで開始された接続プロセスを持っていました:< 0.27746.0での開始位置:{function_clause、{{cowboy_protocol、parse_method、[< >>、{state、#Port < 0.30021>、ranch_tcp、 cowboy_handler]、false、[{listener、http}、{{'_'、[]、[{[< < "stomp" >>、 '...']、[]、sockjs_cowboy_handler、{サービス、 "/ stomp"、#Fun、{}、 "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min。rabbit_ws_handler、[{type、text}]}}]]]、[ws >> >>]、[]、false、true、5000,25000,131072、#Fun、undefined}}、{[< < "未定義、未定義、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,10,0,8,0,6,0,29,0,23,0,24 >>]、[{ファイル、 "src/cowboy_protocol.erl"}、ライン、168}]}]}

のRabbitMQ-SERVER_1 |

のRabbitMQ-SER ver_1 | =エラーレポート==== 2016年6月20日:: 05:59:03 ===

rabbitmq-server_1 |プロセス内のエラー< 0.27747.0>終了値を持つノードrabbit @ 4391a6fed075上で:

rabbitmq-server_1 | {function_clause、

rabbitmq-server_1 | [{cowboy_protocol、parse_method、

rabbitmq-server_1 | [< < >>

rabbitmq-server_1 | {状態、#ポート< 0.30022>、ranch_tcp、

rabbitmq-server_1 | [cowboy_router、cowboy_handler]、

rabbitmq-server_1 | false、

rabbitmq-server_1 | [{listener、http}、

rabbitmq-server_1 | {ディスパッチ、

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

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

rabbitmq-server_1 | []、sockjs_cowboy_handler、

rabbitmq-server_1 | {サービス、 "/ stomp"、

rabbitmq-server_1 | Fun、{}、

rabbitmq-server_1 | "//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min。WS "|偽、真、5000,25000,131072、

のRabbitMQ-SERVER_1 | |#楽しい、未定義}}、

のRabbitMQ-SERVER_1 {[< <

RabbitMQの-SERVER_1、" JS

rabbitmq-server_1 | undefined、undefined、5,1,100,4096,64,4096,100,5000、[>>]、[]、[]、rabbit_ws_handler、[タイプ、テキスト}]}]] 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,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,111,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,0,2,1,0,0,10,0,8,0,6,0,29,0,

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

rabbitmq-server_1 | [{file、 "src/cowboy_protocol.erl"}、{line、168}]}]}

rabbitmq-server_1 |

rabbitmq-server_1 | =エラーレポート==== 2016年6月20日:: 05:59:03 ===

rabbitmq-server_1 |牧場のリスナーhttpは、cowboy_protocolで開始された接続プロセスを持っていました:<の0.27747.0で終了した理由:{function_clause、{{cowboy_protocol、parse_method、[< >>、{state、#Port < 0.30022>、ranch_tcp、 cowboy_handler]、false、[{listener、http}、{{'_'、[]、[{[< < "stomp" >>、 '...']、[]、sockjs_cowboy_handler、{サービス、 "/ stomp"、#Fun、{}、 "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true,5000,25000,131072,#Fun,undefined} {{type、text}}}}]}]、未定義、未定義、5,1,100,4096,64,4096,100,5000、{0、255、 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,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}]}]}

は、事前にありがとうございます。

答えて

0

sslを使用すると、ポートが別のポートはhttpと同じではありません。

あなたは、これはそれが私

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

+0

返信いただきありがとうございます。しかし、私が言及したように、私は既にRabbitMQのSSLを設定しており、Javaクライアントを使って動作しています。SSLでRabbitMQ Web STOMPを使用しようとすると問題が発生します(ちなみに、以下のプラグインが有効になります:rabbitmq_management rabbitmq_stomp rabbitmq_web_stomp)。 –

0

ポートが実際に(私の設定の15671)SSLを使用するように変更する必要があるために働い手順使用して設定しますが、エラーを「接続が拒否され、」取得保管することができます。

私は自分の間違いに気付きました。間違った証明書がWeb Stomp設定で指定されました。

WRONG:
certfileに:cacert.pemの
キーファイル:rabbitmq.cert.key
cacertfile:

CORRECT rabbitmqkey.pem:
cacertfile:cacert。 pem
certfile:rabbitmq.cert.key
キーファイル:へ

{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を使用して接続:rabbitmqkey.pemだから、

、それからのRabbitMQの設定を変更した後に働いた

<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というセットアップで何か問題が発生しましたか? –

関連する問題