MQTT ssl/tls证书生成

配置 TLS/SSL

配置 TLS/SSL

注意

该功能在基础版中不可用

EMQX Cloud 专业版部署 提供自定义单向/双向 TLS/SSL 配置,具体如下:

认证方式 是否支持自签名证书 服务器证书 证书链 私有秘钥 客户端 CA 证书
单向认证 支持 需要 需要 需要 不需要
双向认证 支持 需要 需要 需要 需要

单向认证视频

https://www.bilibili.com/video/BV1FL4y137YM/?vd_source=4bb07790996c60f7ab327586872310d6

双向认证视频

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 证书。它必须包含公有密钥、网站的完全限定域名 (FQDN) 或 IP 地址以及有关发布者的信息。证书可以由您的私有密钥或发证 CA 的私有密钥进行自签名。如果证书由 CA 签名,则在导入证书时必须包含证书链。

  • 证书必须是有效的,有效期开始之前和结束的 60 天之内,无法导入证书。

  • 证书、私有密钥和证书链必须采用 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----- 
      
      

#创建证书

  1. 登录 EMQX Cloud 控制台 (opens new window)
  2. 进入部署详情,点击 +TLS/SSL 配置 按钮,配置证书内容,您可以上传文件或者直接填写证书内容
    • TLS/SSL 认证类型:
      • 单向认证:仅客户端验证服务端证书。
      • 双向认证:客户端和服务端相互验证证书。
    • 公钥证书:服务端证书
    • 证书链:证书链,通常第三方机构签发证书时会提供,如缺失您可以前往 证书链补全 (opens new window)补全
    • 私钥:私有秘钥
    • 客户端 CA 证书:选择双向认证时,需要提供客户端的 CA 证书
  3. 填写完成后,点击 确定
image.png

#测试连接

测试之前,请确保创建了认证信息,参考 认证和鉴权,您可以使用 MQTTX (opens new window)连接和测试。在本教程中我们将使用用 MQTTX 进行测试:

  • 新建连接,输入 Name,Client ID 随机生成即可
  • 选择 Host,填入部署的连接地址和端口
    • 若选择 SSL 连接,选择 mqtts://8883 端口
    • 若选择 WebSocket with SSL,选择 wss://8084 端口
  • 输入创建的认证信息:用户名和密码
  • SSL/TLS 选择 true
  • 证书选择
    • 第三方机构认证的证书,不需要提供 CA 证书
    • 自签名证书,提供服务端 CA 证书,若双向认证,还需要提供客户端证书和私钥
  • 打开严格模式
  • 连接
image.png

#删除证书

删除证书会断开客户端到 88838084 的连接,请确保这不会影响到您的业务。

  1. 登录 EMQX Cloud 控制台 (opens new window)
  2. 进入部署详情,点击 TLS/SSL 配置 部分的证书的删除按钮。
  3. 在对话框点击“确定”,完成删除。

#生成自签名证书

请先确保您已经安装了 OpenSSL(opens new window)

#服务端证书生成

  1. CA 证书生成 server-ca.crt

    subj 依据实际使用情况调整。

    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. 服务端秘钥生成 server.key

openssl genrsa -out server.key 2048

  1. 创建 openssl.cnf 文件

替换 IP.1 地址为当前部署地址

注意:使用亚马逊中国的用户,请将 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 = <当前部署的地址>
# 亚马逊中国的部署使用 DNS.1
# DNS.1 = <当前部署的地址>
EOF

  1. 生成服务端证书请求文件 server.csr
openssl req -new -key server.key -config openssl.cnf -out server.csr

  1. 用 CA 证书给服务端证书签名,生成服务端证书 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. 查看服务端证书信息
openssl x509 -noout -text -in server.crt

  1. 验证证书
openssl verify -CAfile server-ca.crt server.crt

#客户端证书生成

  1. CA 证书生成 client-ca.crt

    subj 依据实际使用情况调整。

    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. 证书内容包含多个证书

    购买的证书包含中间证书,以文本形式打开证书,多个证书是按照用户证书 - 中间证书 - Root 证书的顺序。一般来说,证书包含用户证书和多个中间证书,您需要将用户证书和中间证书分离开,并将中间证书填入到证书链中。

    -----BEGIN CERTIFICATE-----
    
    用户证书
    
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    
    中间证书
    
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    
    根证书
    
    -----END CERTIFICATE-----
    
    
  2. 缺少证书链

    证书链补全:https://myssl.com/chain_download.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容