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证书到本地或下载根证书和中间证书。
登录数字证书管理服务控制台。
在左侧导航栏,选择,在PCA证书管理页面,选择PCA服务所在地域。
准备服务端证书。
准备证书链文件cacert.pem。
在私有CA页签,定位到目标子CA,在操作列,单击详情。
在详情面板,复制子CA证书内容,然后在本地新建一个TXT文件,将该内容粘贴进去,并将文件命名为cacert.pem。
准备证书文件cert.pem和证书私钥文件key.pem。
在私有CA页签,定位到目标子CA,在操作列,单击证书列表。
在证书列表页面,定位到目标服务端证书,在操作列,单击下载。
在证书下载对话框,选择证书格式为PEM,单击确认并下载。
解压证书压缩包,将证书文件(PEM格式)命名为cert.pem。在Shell终端执行
openssl rsa -in domain.key -out key.pem
,将证书私钥文件解密,并保存为key.pem。说明domain.key需替换为实际的证书私钥文件。
准备客户端证书。
在私有CA页签,定位到目标子CA,在操作列,单击证书列表。
在证书列表页面,定位到目标服务端证书,在操作列,单击下载。
在证书下载对话框,选择证书格式为PEM,单击确认并下载。
准备包含证书链的文件client-cert.pem和私钥文件client-key.pem。
解压证书压缩包,在Shell终端执行
openssl rsa -in <domain.key> -out client-key.pem
,将证书私钥文件解密,并保存为client-key.pem。说明domain.key需替换为实际的证书私钥文件。
在私有CA页签,定位到目标子CA,在操作列,单击详情。在详情面板,复制子CA证书内容,将该内容粘贴至解压后的证书文件,并将文件命名为client-cert.pem。
步骤二:替换EMQX服务端默认证书
打开EMQX证书配置目录\emqx\etc\certs,将步骤一准备的客户端证书文件(client-cert.pem、client-key.pem)和服务端证书文件(cert.pem、cacert.pem、key.pem)复制粘贴替换certs目录原有的文件。
在本地操作系统,右键单击图标,并单击Windows PowerShell(管理员)(A)。
进入\emqx\bin目录,执行以下命令,启动EMQX。
./emqx start
步骤三:配置MQTT客户端证书
打开MQTT客户端,单击图标。
按照下图指引,配置Self signed certificates,单击Apply,单击OK。
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>
。
在MQTT客户端,单击Connect。
在Subscribe页签,输入EMQX默认的主题testtopic/#,单击Subscribe,并等待接收服务端消息。
在本地操作系统的浏览器中输入localhost:18083,进入EMQX管理界面。
在左侧导航栏,选择工具 > Webcocket。
在连接区域,单击连接。
在消息区域。输入消息,单击发送。
在MQTT客户端,如果接收到消息,表示证书安装成功。