配置 TLS/SSL
注意
該功能在基礎(chǔ)版中不可用
EMQX Cloud 專業(yè)版部署 提供自定義單向/雙向 TLS/SSL 配置,具體如下:
| 認(rèn)證方式 | 是否支持自簽名證書 | 服務(wù)器證書 | 證書鏈 | 私有秘鑰 | 客戶端 CA 證書 |
|---|---|---|---|---|---|
| 單向認(rèn)證 | 支持 | 需要 | 需要 | 需要 | 不需要 |
| 雙向認(rèn)證 | 支持 | 需要 | 需要 | 需要 | 需要 |
單向認(rèn)證視頻
https://www.bilibili.com/video/BV1FL4y137YM/?vd_source=4bb07790996c60f7ab327586872310d6
雙向認(rèn)證視頻
#證書限制
-
證書必須指定加密算法和密鑰大小。EMQX Cloud 支持下列算法:
- 1024 位 RSA (RSA_1024)
- 2048 位 RSA (RSA_2048)
證書必須是 SSL/TLS X.509 版本 3 證書。它必須包含公有密鑰、網(wǎng)站的完全限定域名 (FQDN) 或 IP 地址以及有關(guān)發(fā)布者的信息。證書可以由您的私有密鑰或發(fā)證 CA 的私有密鑰進行自簽名。如果證書由 CA 簽名,則在導(dǎo)入證書時必須包含證書鏈。
證書必須是有效的,有效期開始之前和結(jié)束的 60 天之內(nèi),無法導(dǎo)入證書。
證書、私有密鑰和證書鏈必須采用 PEM 編碼。
私有秘鑰必須是無密碼的。
私有秘鑰支持
PKCS#1和PKCS#8格式。證書的加密算法必須與簽名 CA 的加密算法匹配。例如,如果簽名 CA 的密鑰類型為 RSA,則該證書的密鑰類型也必須為 RSA。
-
格式說明:
-
證書格式
-----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- -
證書鏈格式
-----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- -
私有秘鑰格式
-----BEGIN (RSA) PRIVATE KEY----- Base64–encoded private key -----END (RSA) PRIVATE KEY-----
-
#創(chuàng)建證書
- 登錄 EMQX Cloud 控制臺 (opens new window)。
- 進入部署詳情,點擊
+TLS/SSL 配置按鈕,配置證書內(nèi)容,您可以上傳文件或者直接填寫證書內(nèi)容- TLS/SSL 認(rèn)證類型:
- 單向認(rèn)證:僅客戶端驗證服務(wù)端證書。
- 雙向認(rèn)證:客戶端和服務(wù)端相互驗證證書。
- 公鑰證書:服務(wù)端證書
- 證書鏈:證書鏈,通常第三方機構(gòu)簽發(fā)證書時會提供,如缺失您可以前往 證書鏈補全 (opens new window)補全
- 私鑰:私有秘鑰
- 客戶端 CA 證書:選擇雙向認(rèn)證時,需要提供客戶端的 CA 證書
- TLS/SSL 認(rèn)證類型:
- 填寫完成后,點擊
確定。

#測試連接
測試之前,請確保創(chuàng)建了認(rèn)證信息,參考 認(rèn)證和鑒權(quán),您可以使用 MQTTX (opens new window)連接和測試。在本教程中我們將使用用 MQTTX 進行測試:
- 新建連接,輸入 Name,Client ID 隨機生成即可
- 選擇 Host,填入部署的連接地址和端口
- 若選擇 SSL 連接,選擇
mqtts://和8883端口 - 若選擇 WebSocket with SSL,選擇
wss://和8084端口
- 若選擇 SSL 連接,選擇
- 輸入創(chuàng)建的認(rèn)證信息:用戶名和密碼
- SSL/TLS 選擇 true
- 證書選擇
- 第三方機構(gòu)認(rèn)證的證書,不需要提供 CA 證書
- 自簽名證書,提供服務(wù)端 CA 證書,若雙向認(rèn)證,還需要提供客戶端證書和私鑰
- 打開嚴(yán)格模式
- 連接

#刪除證書
刪除證書會斷開客戶端到 8883 和 8084 的連接,請確保這不會影響到您的業(yè)務(wù)。
- 登錄 EMQX Cloud 控制臺 (opens new window)。
- 進入部署詳情,點擊
TLS/SSL 配置部分的證書的刪除按鈕。 - 在對話框點擊“確定”,完成刪除。
#生成自簽名證書
請先確保您已經(jīng)安裝了 OpenSSL(opens new window)
#服務(wù)端證書生成
-
CA 證書生成
server-ca.crtsubj 依據(jù)實際使用情況調(diào)整。
openssl req \ -new \ -newkey rsa:2048 \ -days 365 \ -nodes \ -x509 \ -subj "/C=CN/O=EMQ Technologies Co., Ltd/CN=EMQ CA" \ -keyout server-ca.key \ -out server-ca.crt 服務(wù)端秘鑰生成
server.key
openssl genrsa -out server.key 2048
- 創(chuàng)建
openssl.cnf文件
替換 IP.1 地址為當(dāng)前部署地址
注意:使用亞馬遜中國的用戶,請將 IP.1 替換成 DNS.1
cat << EOF > ./openssl.cnf
[policy_match]
countryName = match
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
commonName = Server
[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
# EMQX Cloud deployment connections address
# 非亞馬遜的部署使用 IP.1
IP.1 = <當(dāng)前部署的地址>
# 亞馬遜中國的部署使用 DNS.1
# DNS.1 = <當(dāng)前部署的地址>
EOF
- 生成服務(wù)端證書請求文件
server.csr
openssl req -new -key server.key -config openssl.cnf -out server.csr
- 用 CA 證書給服務(wù)端證書簽名,生成服務(wù)端證書
server.crt
openssl x509 -req \
-days 365 \
-sha256 \
-in server.csr \
-CA server-ca.crt \
-CAkey server-ca.key \
-CAcreateserial -out server.crt \
-extensions v3_req -extfile openssl.cnf
- 查看服務(wù)端證書信息
openssl x509 -noout -text -in server.crt
- 驗證證書
openssl verify -CAfile server-ca.crt server.crt
#客戶端證書生成
-
CA 證書生成
client-ca.crtsubj 依據(jù)實際使用情況調(diào)整。
openssl req \ -new \ -newkey rsa:2048 \ -days 365 \ -nodes \ -x509 \ -subj "/C=CN/O=EMQ Technologies Co., Ltd/CN=EMQ CA" \ -keyout client-ca.key \ -out client-ca.crt 客戶端秘鑰生成
client.key
openssl genrsa -out client.key 2048
- 生成客戶端證書請求文件
client.csr
openssl req -new -key client.key -out client.csr -subj "/CN=Client"
- 用 CA 證書給客戶端證書簽名,生成
client.crt
openssl x509 -req -days 365 -sha256 -in client.csr -CA client-ca.crt -CAkey client-ca.key -CAcreateserial -out client.crt
- 查看客戶端端證書信息
openssl x509 -noout -text -in client.crt
- 驗證證書
openssl verify -CAfile client-ca.crt client.crt
#常見問題
-
證書內(nèi)容包含多個證書
購買的證書包含中間證書,以文本形式打開證書,多個證書是按照用戶證書 - 中間證書 - Root 證書的順序。一般來說,證書包含用戶證書和多個中間證書,您需要將用戶證書和中間證書分離開,并將中間證書填入到證書鏈中。
-----BEGIN CERTIFICATE----- 用戶證書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 中間證書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 根證書 -----END CERTIFICATE----- -
缺少證書鏈