3

ここで例を実行しました: https://github.com/crossbario/crossbarexamples/tree/master/wss/python、すべて正常に動作します。

ただし、次のケースは機能しません。

config.json ファイル:

{
  "controller": {},
  "workers": [
    {
      "type": "router",
      "realms": [
        {
          "name": "realm1",
          "roles": [
            {
              "name": "anonymous",
              "permissions": [
                {
                  "uri": "*",
                  "publish": true,
                  "subscribe": true,
                  "call": true,
                  "register": true
                }
              ]
            }
          ]
        }
      ],
      "transports": [
        {
          "type": "web",
          "endpoint": {
            "type": "tcp",
            "port": 9000,
            "tls": {
              "key": "server_key.pem",
              "certificate": "server_cert.pem",
              "dhparam": "dhparam.pem",
              "ciphers": "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS"
            }
          },
          "paths": {
            "/": {
              "type": "static",
              "directory": "../web"
            },
            "ws": {
              "type": "websocket"
            }
          }
        }
      ]
    }
  ]
}

web/index.html ファイルは、TLS が機能するかどうかを確認するためのものです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Router</title>
</head>
<body>
    This is a router.
</body>
</html>

証明書を生成しました。 の Web サイトに接続すると、すべてが正常に機能しhttps://127.0.0.1:9000ます。ページが正しく読み込まれます。

ただし、node.js で別のプロジェクトをセットアップして、何かを登録しようとしました.. (ページ読み込みカウントの例から取得したコード)

のコードserver.js:

var connection = new autobahn.Connection({
   url: 'wss://127.0.0.1:9000/ws',
   realm: 'realm1'}
);

connection.onopen = function (session) {
   console.log("connected to WAMP router");
   app.session = session;

   // REGISTER a procedure for remote calling
   //
   function get_visits () {
      return app.visits;
   }
   session.register('com.example.get_visits', get_visits).then(
      function (reg) {
         console.log("procedure get_visits() registered");
      },
      function (err) {
         console.log("failed to register procedure: " + err);
      }
   );
};

connection.onclose = function (reason, details) {
   console.log("WAMP connection closed", reason, details);
   app.session = null;
}

connection.open();

これでwss://127.0.0.1:9000/wsルーターの正しい URL になりましたが、常に次のメッセージが表示されます。

WAMP connection closed unreachable { reason: null,
  message: null,
  retry_delay: 1.8090544409276008,
  retry_count: 1,
  will_retry: true }

サーバーに接続できません。

いくつかの基本的な概念が私を逃れていると確信しています。おそらく、あなたは私を正しい方向に導くことができます.

4

2 に答える 2

0

自己署名証明書を使用している場合は、ブラウザーにそれを信頼するように指示する必要があります。そうしないと、TLS レイヤーで接続が失敗します。

最近、クライアント証明書のサポートと完全に機能する例を「crossbarexamples」リポジトリに追加しました: https://github.com/crossbario/crossbarexamples/tree/master/authenticate/client_tls

上記のリンクの例では、中間 CA 証明書をブラウザー (または自己署名ルート CA 証明書) にインポートします。

于 2015-12-13T20:07:44.960 に答える
0

追加すると

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

server.js コードに挿入すると、node.js は自己署名証明書を受け入れる必要があります。(ここでnode.js の問題に関する議論を参照してください。

于 2016-08-22T23:42:13.563 に答える