通过浏览器的HTTPS通过networking套接字连接mqtt客户端
我想使用带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 broker在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代理?
正如您询问的其他问题所述,Web浏览器拥有自己的可信CA证书列表,您的自签名证书将不在此列表中,因此连接将失败。
您可以将自己的可信任证书导入到浏览器中,但是如何做到这一点,每个浏览器都有所不同,因此您必须为浏览器的每个实例执行此操作,因此对于单个testing而言只是非常有用。
如果您需要允许公众成员(或浏览器,您不能安装您的证书)连接到您的经纪人,那么你将不得不从一个公认的CA获得证书。 您将不得不为此付费或使用像http://letsencrypt.org这样的服务
由于使用自签名证书,您有问题相反 – 您可以使用:
- 服务cloudflare作为前(与https和wss在免费计划)。 阅读关于云耀斑
- 从letsencrypt获得临时证书 (有一个免费的计划)。 阅读关于letsencrypt
- 获取可信付费证书
- 使用公共签名证书与服务器进行双向authentication,但使用私有CA的客户端
- HTTPS密码在节点js 0.4
- Google App Engine – Node.js – 未从请求处理程序发送的出站https请求
- 尝试使用协议分析器(Charles)捕获node.js httpstream量,但无法使节点使用代理
- 带保持活动标头的Node.js https.request
- Node.js Flatiron HTTPS服务器
- Bluemix可扩展容器组自定义域SSL证书
- 用于数据保存的Node.js压缩代理
- 带有Express的Socket.IO不能使用https(Apache2 Ubuntu16.04)