2016-10-14 106 views
7

我想在網絡瀏覽器上使用帶HTTPS的網絡套接字運行mqtt客戶端。有了HTTP,我沒有問題。以下是使用HTTP時Web瀏覽器上的代碼。通過網絡套接字連接mqtt客戶端與HTTPS從瀏覽器

<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> 

我這是怎麼開始的單機莫斯卡經紀人使用HTTPS上的WebSockets。

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代理?

+0

使用'WSS:// 127 ...',而不是'WS ....' – Molda

+0

Molda,我想,但我得到的錯誤'WebSocket連接到'wss://127.0.0.1:3000 /'失敗:WebSocket開放握手被取消' – user781486

+0

這可能與SSL證書有關。你是如何創建的? – Molda

回答

6

正如您詢問的其他問題所述,Web瀏覽器擁有自己的可信CA證書列表,您的自簽名證書將不在此列表中,因此連接將失敗。

您可以將自己的可信任證書導入瀏覽器,但如何做到這一點與每個瀏覽器都有所不同,您必須爲每個瀏覽器實例執行此操作,因此僅對單個測試非常有用。

如果您需要允許公衆成員(或瀏覽器無法安裝您的證書)連接到您的經紀人,那麼您將不得不從公認的CA獲得證書。你將不得不要麼付出代價的,或者使用類似http://letsencrypt.org

+0

如果證書是自簽名的,瀏覽器通常會在訪問HTTP網站時提示用戶特定頁面不安全。沒有提示,連接不應該失敗。 – user781486

+3

瀏覽器在從javascript – hardillb

+0

hardillb啓動時不會提示,謝謝。現在答案很清楚。 – user781486

2

您有問題的服務由於使用自簽名證書的 相反 - 你可以使用:

  1. 服務的CloudFlare爲前面(用https和wss免費計劃)。閱讀關於cloud flare
  2. 獲取臨時證書letsencrypt(有一個免費的計劃)。閱讀關於letsencrypt
  3. 獲取信任的完稅憑證
+0

快速點,Cloudfare不適用於本機MQTT連接 – hardillb

相關問題