TLS/SSL协议下的通讯过程分为两部分,第一部分是握手协议。握手协议的目的是鉴别对方身份并建立一个安全的通讯通道。握手完成之后双方会协商出接下来使用的密码套件和会话密钥;第二部分是record协议,record和其他数据传输协议非常类似,会携带内容类型,版本,长度和荷载等信息,不同的是它所携带的信息是加密了的。
通常来说,我们会需要数字证书来保证TLS通讯的强认证。数字证书的使用本身是一个三方协议,除了通讯双方,还有一个颁发证书的受信第三方,有时候这个受信第三方就是一个CA。和CA的通讯,一般是以预先发行证书的方式进行的。也就是在开始TLS通讯的时候,我们需要至少有2个证书,一个CA的,一个EMQX的,EMQX的证书由CA颁发,并用CA的证书验证。
获得一个真正受外界信任的证书需要到证书服务提供商进行购买。在实验室环境,我们也可以用自己生成的证书来模拟这个过程。下面我们分别以这两种方式来说明EMQX服务器的SSL/TLS启用过程。
注意:购买证书与自签名证书的配置,读者根据自身情况只需选择其中一种进行测试。
如果有购买证书的话,就不需要自签名证书。
为方便EMQX配置,请将购买的证书文件重命名为emqx.crt,证书密钥重命名为emqx.key。
在这里,我们假设您的系统已经安装了OpenSSL。使用OpenSSL附带的工具集就可以生成我们需要的证书了。
首先,我们需要一个自签名的CA证书。生成这个证书需要有一个私钥为它签名,可以执行以下命令来生成私钥:
opensslgenrsa-outca.key2048这个命令将生成一个密钥长度为2048的密钥并保存在ca.key中。有了这个密钥,就可以用它来生成EMQX的根证书了:
opensslreq-x509-new-nodes-keyca.key-sha256-days3650-outca.pem查看CA证书信息(可选):
opensslx509-inca.pem-noout-text根证书是整个信任链的起点,如果一个证书的每一级签发者向上一直到根证书都是可信的,那个我们就可以认为这个证书也是可信的。有了这个根证书,我们就可以用它来给其他实体签发实体证书了。
实体(在这里指的是EMQX)也需要一个自己的私钥对来保证它对自己证书的控制权。生成这个密钥的过程和上面类似:
opensslgenrsa-outemqx.key2048新建openssl.cnf文件,
[req]default_bits=2048distinguished_name=req_distinguished_namereq_extensions=req_extx509_extensions=v3_reqprompt=no[req_distinguished_name]countryName=CNstateOrProvinceName=ZhejianglocalityName=HangzhouorganizationName=EMQXcommonName=Servercertificate[req_ext]subjectAltName=@alt_names[v3_req]subjectAltName=@alt_names[alt_names]IP.1=BROKER_ADDRESSDNS.1=BROKER_ADDRESS然后以这个密钥和配置签发一个证书请求:
opensslreq-new-key./emqx.key-configopenssl.cnf-outemqx.csr然后以根证书来签发EMQX的实体证书:
opensslx509-req-in./emqx.csr-CAca.pem-CAkeyca.key-CAcreateserial-outemqx.pem-days3650-sha256-extensionsv3_req-extfileopenssl.cnf查看EMQX实体证书(可选):
opensslx509-inemqx.pem-noout-text验证EMQX实体证书,确定证书是否正确:
$opensslverify-CAfileca.pememqx.pememqx.pem:OK准备好证书后,我们就可以启用EMQX的TLS/SSL功能了。
在EMQX中mqtt:ssl的默认监听端口为8883。
将前文重命名后的emqx.key文件及emqx.crt文件拷贝到EMQX的etc/certs/目录下,并参考如下配置修改emqx.conf:
MQTTX版本要求:v1.3.2及以上版本
注意:在Certificate一栏只需选择CAsignedserver即可,使用购买证书在进行单向认证连接时不需要携带任何证书文件(CA文件也不需要携带)。
将前文中通过OpenSSL工具生成的emqx.pem、emqx.key及ca.pem文件拷贝到EMQX的etc/certs/目录下,并参考如下配置修改emqx.conf:
最后,打开EMQX的Dashboard在Listeners页面可以看到在8883端口上有一个mqtt:ssl连接。
EMQX研发工程师,负责EMQX的前端开发工作,也是MQTTX的开发者和维护者。
为了更多用户能体验到MQTToverQUIC为物联网消息传输带来的提升,我们将通过本文指导您如何从零开始上手使用MQTToverQUIC。
本文主要介绍如何通过Android与MQTT进行TLS/SSL单向认证和双向认证。
本文将对EMQX5.0所采用的各类安全保障机制与功能进行详细介绍,帮助用户了解EMQX如何保障物联网安全。