MQTT ssl/tls證書生成

配置 TLS/SSL

配置 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)證視頻

https://www.bilibili.com/video/BV1sP4y1c7tN/?spm_id_from=pageDriver&vd_source=4bb07790996c60f7ab327586872310d6

#證書限制

  • 證書必須指定加密算法和密鑰大小。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#1PKCS#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)建證書

  1. 登錄 EMQX Cloud 控制臺 (opens new window)
  2. 進入部署詳情,點擊 +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 證書
  3. 填寫完成后,點擊 確定。
image.png

#測試連接

測試之前,請確保創(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 端口
  • 輸入創(chuàng)建的認(rèn)證信息:用戶名和密碼
  • SSL/TLS 選擇 true
  • 證書選擇
    • 第三方機構(gòu)認(rèn)證的證書,不需要提供 CA 證書
    • 自簽名證書,提供服務(wù)端 CA 證書,若雙向認(rèn)證,還需要提供客戶端證書和私鑰
  • 打開嚴(yán)格模式
  • 連接
image.png

#刪除證書

刪除證書會斷開客戶端到 88838084 的連接,請確保這不會影響到您的業(yè)務(wù)。

  1. 登錄 EMQX Cloud 控制臺 (opens new window)。
  2. 進入部署詳情,點擊 TLS/SSL 配置 部分的證書的刪除按鈕。
  3. 在對話框點擊“確定”,完成刪除。

#生成自簽名證書

請先確保您已經(jīng)安裝了 OpenSSL(opens new window)

#服務(wù)端證書生成

  1. CA 證書生成 server-ca.crt

    subj 依據(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
    
    
  2. 服務(wù)端秘鑰生成 server.key

openssl genrsa -out server.key 2048

  1. 創(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

  1. 生成服務(wù)端證書請求文件 server.csr
openssl req -new -key server.key -config openssl.cnf -out server.csr

  1. 用 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

  1. 查看服務(wù)端證書信息
openssl x509 -noout -text -in server.crt

  1. 驗證證書
openssl verify -CAfile server-ca.crt server.crt

#客戶端證書生成

  1. CA 證書生成 client-ca.crt

    subj 依據(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
    
    
  2. 客戶端秘鑰生成 client.key

openssl genrsa -out client.key 2048

  1. 生成客戶端證書請求文件 client.csr
openssl req -new -key client.key -out client.csr -subj "/CN=Client"

  1. 用 CA 證書給客戶端證書簽名,生成 client.crt
openssl x509 -req -days 365 -sha256 -in client.csr -CA client-ca.crt -CAkey client-ca.key -CAcreateserial -out client.crt

  1. 查看客戶端端證書信息
openssl x509 -noout -text -in client.crt

  1. 驗證證書
openssl verify -CAfile client-ca.crt client.crt

#常見問題

  1. 證書內(nèi)容包含多個證書

    購買的證書包含中間證書,以文本形式打開證書,多個證書是按照用戶證書 - 中間證書 - Root 證書的順序。一般來說,證書包含用戶證書和多個中間證書,您需要將用戶證書和中間證書分離開,并將中間證書填入到證書鏈中。

    -----BEGIN CERTIFICATE-----
    
    用戶證書
    
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    
    中間證書
    
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    
    根證書
    
    -----END CERTIFICATE-----
    
    
  2. 缺少證書鏈

    證書鏈補全:https://myssl.com/chain_download.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容