RabbitMQ Web-Stomp 插件的 SSL 配置问题

问题描述 投票:0回答:2

首先,我按照this生成密钥、证书和CA证书到目录clientservertestca。然后我验证了,SSL 有效。 然后我按照this配置RabbitMQ Web-Stomp Plugin,我的ssl_config如下:

[
  {rabbitmq_web_stomp,
      [{ssl_config, [{port,       15671},
                     {backlog,    1024},
                     {certfile,   "path/to/certs/client/cert.pem"},
                     {keyfile,    "path/to/certs/client/key.pem"},
                     {cacertfile, "path/to/certs/testca/cacert.pem"},
                     {password,   "changeme"}]}]}
].

但是,当我尝试通过以下代码通过 websockets 连接它时,该代码是从here复制的,并且我做了一些修改。

<!DOCTYPE html>
<html><head>
  <script src="jquery.min.js"></script>

  <script src="stomp.js"></script>
  <style>
      .box {
          width: 440px;
          float: left;
          margin: 0 20px 0 20px;
      }
      .box div, .box input {
          border: 1px solid;
          -moz-border-radius: 4px;
          border-radius: 4px;
          width: 100%;
          padding: 5px;
          margin: 3px 0 10px 0;
      }
      .box div {
          border-color: grey;
          height: 300px;
          overflow: auto;
      }
      div code {
          display: block;
      }
      #first div code {
          -moz-border-radius: 2px;
          border-radius: 2px;
          border: 1px solid #eee;
          margin-bottom: 5px;
      }
      #second div {
          font-size: 0.8em;
      }
  </style>
  <title>RabbitMQ Web STOMP Examples : Echo Server</title>
  <link href="main.css" rel="stylesheet" type="text/css"/>
</head><body lang="en">
    <h1><a href="index.html">RabbitMQ Web STOMP Examples</a> > Echo Server</h1>

    <div id="first" class="box">
      <h2>Received</h2>
      <div></div>
      <form><input autocomplete="off" value="Type here..."></input></form>
    </div>

    <div id="second" class="box">
      <h2>Logs</h2>
      <div></div>
    </div>

    <script>
        var has_had_focus = false;
        var pipe = function(el_name, send) {
            var div  = $(el_name + ' div');
            var inp  = $(el_name + ' input');
            var form = $(el_name + ' form');
            var print = function(m, p) {
                p = (p === undefined) ? '' : JSON.stringify(p);
                div.append($("<code>").text(m + ' ' + p));
                div.scrollTop(div.scrollTop() + 10000);
            };
            if (send) {
                form.submit(function() {
                    send(inp.val());
                    inp.val('');
                    return false;
                });
            }
            return print;
        };
      // Stomp.js boilerplate

          var client = Stomp.client('wss://192.168.111.131:15671/ws');

      client.debug = pipe('#second');
      var print_first = pipe('#first', function(data) {

            client.send('/queue/webstomp', {"content-type":"text/plain"}, data);


      });
      var on_connect = function(x) {
          id = client.subscribe("/queue/webstomp", function(d) {
               print_first(d.body);
          });
      };
      var on_error =  function() {
        console.log('error');
      };
      client.connect('test', 'test', on_connect, on_error, '/');
      $('#first input').focus(function() {
          if (!has_had_focus) {
              has_had_focus = true;
              $(this).val("");
          }
      });
    </script>
</body></html>

它回复我说我失去了连接,如下图所示。 enter image description here

我非常感谢有关此问题的任何有用的建议。

顺便说一句:此代码示例在我没有使用 SSL 时有效。

ssl websocket rabbitmq stomp
2个回答
4
投票

最后我通过参考这篇文章弄清楚了这一点,所以关键点是首先通过访问https中的地址来明确授权我的证书,在我的例子中是

wss://192.168.111.131:15671/ws
。所以我需要在浏览器中访问
https://192.168.111.131:15671/ws
并授权例外,然后我才能正常进行wss连接。


0
投票

更新 RabbitMQ 版本 4.0 和 Erlang OTP 27。

  1. 无法安装自证书(我在VM中构建RabbitMQ服务器)
  2. 如果您的证书是手动创建的,您必须在客户端安装证书

使用 wss://192.168.111.131:15671/ws 之前,可以测试一下 websocket https://192.168.111.131:15671/ws

© www.soinside.com 2019 - 2024. All rights reserved.