通过Web套接字使用来自浏览器的HTTPS连接mqtt客户端

时间:2016-10-14 03:29:45

标签: node.js https websocket mqtt mosca

我想使用带有HTTPS的网络套接字在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代理?

2 个答案:

答案 0 :(得分:6)

正如您提出的其他问题所述,网络浏览器拥有自己的可信CA证书列表,您的自签名证书将不在此列表中,因此连接将失败。

您可以将自己的受信任证书导入浏览器,但如何执行此操作会因每个浏览器而异,您必须为每个浏览器实例执行此操作,因此仅对单个测试非常有用。

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

等服务

答案 1 :(得分:2)

由于使用自签名证书,您遇到了问题 相反 - 您可以使用:

  1. 服务 cloudflare 作为前台(在免费套餐中使用https和wss)。阅读cloud flare
  2. letsencrypt 获取临时证书(有免费计划)。阅读letsencrypt
  3. 获取受信任的付费证书