我想將測驗 MQTT-Client 作為 MQTT-Broker 連接到我的 Node.js 應用程式。我正在使用
對于我的 MQTT 客戶端,ADVANCED, CERTIFICATES, SERVER CERTIFICAT (CA)我選擇了 ca.pem 檔案。如果我選擇“加密”,它可以作業。但如果選擇“驗證證書”,則會出現錯誤:主機名/IP 與證書的替代名稱不匹配:IP:127.0.0.1 不在證書串列中

不幸的是,我不知道我做錯了什么,在此先感謝:(
uj5u.com熱心網友回復:
MQTT Explorer是使用Node.js和 MQTT 庫MQTT.js 構建的。根據這個問題:
Node.js 要求 IP 地址位于證書的 subjectAltNames 中,而不是 CN。也許 MQTT.fx 不需要,但它應該。
和:
如果您的服務器證書在主題欄位中顯示 CN=localhost,請使用 localhost 而不是 127.0.0.1 進行連接,它應該可以作業。如果它說 CN=127.0.0.1,你必須創建一個新的,因為 Node.js 不會驗證 IP 地址,除非它在 ??SAN 擴展中。有一種方法可以在代碼中解決它(我認為這是一個名為 checkServerIdentity 的選項),但如果我遇到這個問題,我更愿意修復我的證書。
此答案中列出了 Node 中采用的方法的基本原理,其中包括來自 RFC2818 的以下參考:HTTP Over TLS :
在某些情況下,URI 被指定為 IP 地址而不是主機名。在這種情況下,iPAddress subjectAltName 必須出現在證書中,并且必須與 URI 中的 IP 完全匹配。
當您使用基于 TLS 的 MQTT(而不是基于 TLS 的 HTTP)時,您可能會認為上述內容不適用,但鑒于 TLS 庫的主要用途是用于 HTTP 流量,因此它通過以下方式向 RFC 確認是有道理的默認。
您有幾個選擇,包括:
- 創建證書/連接時使用主機名(例如
localhost)而不是 IP。 - 將 IP 添加為 subjectAltName
- 修改庫以使用 noop
checkServerIdentity(請參閱此答案)。 - 使用另一個應用程式進行測驗(不推薦,因為某些應用程式可以作業,而另一些則不能)。上面參考的問題提到 MQTT.fx 有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436297.html
標籤:javascript 节点.js ssl MQTT 伊蚊
