7

我想使用带有 HTTPS 的 Web 套接字在 Web 浏览器上运行 mqtt 客户端。使用 HTTP,我没有问题。这是使用 HTTP 时 Web 浏览器上的代码。

<script>
      var client  = mqtt.connect( 'wss://127.0.0.1:3000', {username:'test_user', password:'test_password'} );
      client.subscribe("mqtt/test");

      client.on("message", function(topic, payload) {
        alert([topic, payload].join(": "));
        client.end();
      });

      client.publish("mqtt/test", "testing hello world!");
</script> 

这就是我启动独立 mosca 代理以在 websockets 上使用 HTTPS 的方式。

mosca --very-verbose --key ./tls-key.pem --cert ./tls-cert.pem --credentials ./credentials.json --https-port 3000 --https-bundle --https-static ./ | pino

我应该如何更改浏览器上的 mqtt 客户端代码以通过 HTTPS 连接到 websockets 上的 Mosca 代理?

4

2 回答 2

6

正如您在其他问题中所讨论的那样,Web 浏览器有自己的受信任 CA 证书列表,您的自签名证书不会出现在此列表中,因此连接将失败。

您可以将自己的受信任证书导入浏览器,但如何执行此操作因每个浏览器而异,您必须为浏览器的每个实例都这样做,因此仅对个人测试真正有用。

如果您需要允许公众(或无法安装证书的浏览器)连接到您的代理,那么您必须从公认的 CA 获得证书。您必须为此付费或使用http://letsencrypt.org 之类的服务

于 2016-10-14T08:04:31.753 回答
2

由于使用自签名证书而导致您遇到问题 而 不是 - 您可以使用:

  1. 服务cloudflare作为前面(在免费计划中使用 https 和 wss)。阅读云耀斑
  2. 从letsencrypt获取临时证书(有免费计划)。阅读有关Letsencrypt 的信息
  3. 获取受信任的付费证书
于 2016-10-22T19:29:35.113 回答