功能概述
云消息队列 MQTT 版目前已支持中国商用密码算法(SM2/SM3/SM4),支持 GB/T 38636-2020 TLCP 标准,即双证书国密通信协议,同时也支持 RFC 8998,即TLS 1.3+ 国密单证书模式。目前可以在自定义证书功能里面,上传和使用国密证书来启动国密功能。
前提条件
已安装国密实现库Tongsuo。
注意事项
如需使用国密功能,请提交工单进行申请。
目前云消息队列 MQTT 版仅铂金版和专业版实例支持国密功能。
目前支持国密功能的地区:杭州、上海、北京、深圳、乌兰察布、张家口、广州、新加坡、法兰克福。
使用说明
国密功能的使用流程和普通的基于自定义x.509证书双向认证的功能流程基本一致,区别在于证书的制作命令和算法差异,具体教程可以参考Tongsuo官方文档证书使用说明。
证书制作
假设机器上已安装Tongsuo路径在/home/admin/tongsuo,如下图所示:
$ll /home/admin/tongsuo total 16 drwxrwxr-x 2 admin admin 4096 Dec 16 14:28 bin drwxrwxr-x 3 admin admin 4096 Dec 16 14:28 include drwxrwxr-x 5 admin admin 4096 Dec 16 14:28 lib64 drwxrwxr-x 5 admin admin 4096 Dec 16 14:28 ssl证书制作脚本和配置参考Tongsuo官方文档证书中mkcert.sh、ca.conf、subca.conf。其中mkcert.sh脚本中注意修改Tongsuo的安装目录,且执行前需要设置环境变量如下:
export LD_LIBRARY_PATH=/home/admin/tongsuo/lib64:$LD_LIBRARY_PATH export PATH=/home/admin/tongsuo/bin:$PATH执行脚本后会生成相应证书列表:
$ll /home/admin/sm2-tlcp total 104 -rw-rw-r-- 1 admin admin 3328 Jan 16 10:36 ca.cnf -rw-rw-r-- 1 admin admin 709 Jan 16 10:45 ca.crt -rw-rw-r-- 1 admin admin 513 Jan 16 10:45 ca.csr -rw------- 1 admin admin 241 Jan 16 10:45 ca.key -rw-rw-r-- 1 admin admin 1422 Jan 16 10:45 chain-ca.crt -rw-rw-r-- 1 admin admin 1409 Jan 16 13:55 client_enc.crt -rw-rw-r-- 1 admin admin 513 Jan 16 10:45 client_enc.csr -rw------- 1 admin admin 241 Jan 16 10:45 client_enc.key -rw-rw-r-- 1 admin admin 1413 Jan 16 13:55 client_sign.crt -rw-rw-r-- 1 admin admin 517 Jan 16 10:45 client_sign.csr -rw------- 1 admin admin 241 Jan 16 10:45 client_sign.key drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 crl drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 db -rw-rw-r-- 1 admin admin 2393 Jan 16 10:45 mkcert.sh drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 newcerts drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 private -rw-rw-r-- 1 admin admin 700 Jan 16 10:45 server_enc.crt -rw-rw-r-- 1 admin admin 513 Jan 16 10:45 server_enc.csr -rw------- 1 admin admin 241 Jan 16 10:45 server_enc.key -rw-rw-r-- 1 admin admin 700 Jan 16 10:45 server_sign.crt -rw-rw-r-- 1 admin admin 517 Jan 16 10:45 server_sign.csr -rw------- 1 admin admin 241 Jan 16 10:45 server_sign.key -rw-rw-r-- 1 admin admin 4047 Jan 16 10:37 subca.cnf -rw-rw-r-- 1 admin admin 713 Jan 16 10:45 subca.crt -rw-rw-r-- 1 admin admin 509 Jan 16 10:45 subca.csr -rw------- 1 admin admin 241 Jan 16 10:45 subca.key
将签发的服务端签名和加密双证书托管至阿里云证书管理服务控制台,操作步骤如下:
在左侧导航栏选择证书管理 > SSL证书管理 V2.0,在上传证书页签,点击上传证书。
证书标准选择国密(SM2)标准。
自定义证书名称。
证书文件上传生成的server_sign.crt。
证书私钥上传生成的server_sign.key。
加密证书上传生成的server_enc.crt。
加密私钥上传生成的server_enc.key。
在云消息队列 MQTT 版控制台实例页面上传CA证书(ca.crt),操作步骤如下:
在左侧导航栏选择证书管理 > CA证书。点击注册证书。
上传验证证书。
上传CA证书。
客户端证书设置参考代码demo,主要设置代码示例:
MQTTAsync_SSLOptions ssl =MQTTAsync_SSLOptions_initializer; // 分别填写 CA证书、客户端证书、客户端私钥 ssl.trustStore = "/home/admin/sm2-tlcp/chain-ca.crt"; ssl.enable_ntls = 1; ssl.sign_cert_file = "/home/admin/sm2-tlcp/client_sign.crt"; ssl.sign_key_file = "/home/admin/sm2-tlcp/client_sign.key"; ssl.enc_cert_file = "/home/admin/sm2-tlcp/client_enc.crt"; ssl.enc_key_file = "/home/admin/sm2-tlcp/client_enc.key";