在EMQX服务器配置私有证书双向认证

EMQX双向认证指的是客户端与服务端之间建立安全连接时,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份。本文介绍如何在EMQX服务器和MQTT客户端配置阿里云自签名X.509格式证书,实现EMQX的双向TLS/SSL认证。

重要

本文以Windows 10 64位操作系统、emqx-4.4.19-otp24.3.4.6-windows-amd64和mqttfx-1.7.1-windows-x64(模拟物联网设备)为例介绍。不同的操作系统、服务器或客户端设备,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务

前提条件

已通过阿里云私有CA服务申请客户端和服务端证书。具体操作,请参见申请私有证书

说明

本文是以阿里云PCA自签服务端和客户端证书为例介绍,如果您需要使用CA中心颁发的阿里云服务端证书,您需要购买并申请SSL证书,具体操作,请参见购买SSL证书

步骤一:准备MQTT客户端和EMQX服务端证书

说明

本文是以阿里云PCA自签服务端和客户端证书为例介绍,如果您需要配置CA中心颁发的阿里云服务端证书或客户端证书,请参见下载SSL证书到本地下载根证书和中间证书

  1. 登录数字证书管理服务控制台

  2. 在左侧导航栏,选择证书管理 > PCA证书管理,在PCA证书管理页面,选择PCA服务所在地域。

  3. 准备服务端证书。

    1. 准备证书链文件cacert.pem

      1. 私有CA页签,定位到目标子CA,在操作列,单击详情

        image

      2. 详情面板,复制子CA证书内容,然后在本地新建一个TXT文件,将该内容粘贴进去,并将文件命名为cacert.pem。

    2. 准备证书文件cert.pem和证书私钥文件key.pem

      1. 私有CA页签,定位到目标子CA,在操作列,单击证书列表

        image.png

      2. 证书列表页面,定位到目标服务端证书,在操作列,单击下载

      3. 证书下载对话框,选择证书格式为PEM,单击确认并下载

      4. 解压证书压缩包,将证书文件(PEM格式)命名为cert.pem。在Shell终端执行openssl rsa -in domain.key -out key.pem,将证书私钥文件解密,并保存为key.pem。

        说明

        domain.key需替换为实际的证书私钥文件。

  4. 准备客户端证书。

    1. 私有CA页签,定位到目标子CA,在操作列,单击证书列表

      image.png

    2. 证书列表页面,定位到目标服务端证书,在操作列,单击下载

    3. 证书下载对话框,选择证书格式为PEM,单击确认并下载

    4. 准备包含证书链的文件client-cert.pem和私钥文件client-key.pem

      1. 解压证书压缩包,在Shell终端执行openssl rsa -in <domain.key> -out client-key.pem,将证书私钥文件解密,并保存为client-key.pem。

        说明

        domain.key需替换为实际的证书私钥文件。

      2. 私有CA页签,定位到目标子CA,在操作列,单击详情。在详情面板,复制子CA证书内容,将该内容粘贴至解压后的证书文件,并将文件命名为client-cert.pem。

步骤二:替换EMQX服务端默认证书

  1. 打开EMQX证书配置目录\emqx\etc\certs,将步骤一准备的客户端证书文件(client-cert.pem、client-key.pem)和服务端证书文件(cert.pem、cacert.pem、key.pem)复制粘贴替换certs目录原有的文件。

    image.png

  2. 在本地操作系统,右键单击image.png图标,并单击Windows PowerShell(管理员)(A)

  3. 进入\emqx\bin目录,执行以下命令,启动EMQX。

    ./emqx start

步骤三:配置MQTT客户端证书

  1. 打开MQTT客户端,单击image.png图标。

  2. 按照下图指引,配置Self signed certificates,单击Apply,单击OK

    image.png

    • CA Flie:服务端证书链文件(cacert.pem)

    • Client Certificate File:客户端证书文件(client-cert.pem)

    • Client Key File:客户端证书私钥文件(client-key.pem)

步骤四:测试双向认证

测试前,您需要在本地操作系统C:\Windows\System32\drivers\etc目录下的hosts文件添加域名映射,即本地IP与证书绑定域名映射,格式为:127.0.0.1 <domain_name>

  1. 在MQTT客户端,单击Connect

  2. Subscribe页签,输入EMQX默认的主题testtopic/#,单击Subscribe,并等待接收服务端消息。

    image.png

  3. 在本地操作系统的浏览器中输入localhost:18083,进入EMQX管理界面。

  4. 在左侧导航栏,选择工具 > Webcocket

  5. 连接区域,单击连接

  6. 消息区域。输入消息,单击发送

    image.png

  7. 在MQTT客户端,如果接收到消息,表示证书安装成功。

    image.png