开启一机一证

最近更新时间:2025-08-22 17:48:52

我的收藏

使用场景

“一机一证” 实际是双向认证的一种特殊情况,每个客户端(每台设备)使用自行签发的 CA 证书及 CA 证书签发的不同的客户端证书(设备证书)进行认证。
消息队列 MQTT 版专业集群额外支持了 ”一机一证“ 的功能,您在产品的控制台上自由注册和管理设备的 CA 证书和客户端证书(设备证书),在设备出厂前,通过给每台设备烧录独特的设备证书,这样极大程度上降低了单个设备证书泄漏的影响半径。

操作步骤

配置证书注册方式

1. 登录 MQTT 控制台
2. 在左侧导航栏单击资源管理 > 集群管理,选择好地域后,单击要配置证书的集群的“ID”,进入集群基本信息页面。
3. 认证管理页面,进入 X.509 证书管理页签,单击右侧的编辑图标

,在弹窗中完成证书配置。
证书来源:选择 “自定义证书” 选项。
认证方式:选择 “一机一证” 选项。
服务端证书配置:
证书来源:根据您的业务需求选择合适的认证方式,当前仅支持选择来自腾讯云 SSL证书
授权 MQTT 服务可以下载并应用 SSL 证书能力:必选,不勾选 MQTT 服务将无法应用 SSL 证书能力。
服务端证书:勾选您要配置的 SSL 证书,如果当前没有维护在腾讯云的 SSL 证书或者现有的证书不合适,您可以参见 SSL 快速入门申请证书。
CA 证书来源:当前仅支持手动上传 CA 证书并注册。开启 “一机一证” 功能后,在集群详情页面 CA 证书管理页面添加 CA 证书。下文将重点介绍。
客户端证书来源:支持自动注册手动注册
默认激活状态:支持注册后自动激活和手动激活。


4. 单击提交,完成证书配置。
5. 完成 “一机一证” 的配置后,集群详情页会新增 “CA 证书管理” 和 “客户端证书管理” 页面,如下图所示。




手动注册 CA 证书

开启 “一机一证” 认证模式后,客户需要先在 “CA 证书管理” 页面手动注册 CA 证书。

签发 CA 证书

在正式注册 CA 证书之前,需要自行签发 CA 证书,以下简要介绍签发 CA 证书的步骤,如您已有完成签发的 CA 证书可以跳过当前的“签发 CA 证书”步骤。
注意:
如您使用的是 Windows 系统,需要将 OpenSSL 的安装目录的 bin 子目录添加到您的系统 PATH 环境变量中,如下图所示。

2. 以下均以 RSA 算法证书为例,使用以下命令生成一个密钥对。
openssl genrsa -out CA.key 2048
3. 使用上一步生成的密钥对中的私钥(private key)生成证书签发请求文件(csr)。
openssl req -new -key CA.key -out CA.csr
4. 页面会返回以下示例,根据提示输入对应的参数。
Country Name (2 letter code) [AU]:
State or Province Name (full name) []:
Locality Name (for example, city) []:
Organization Name (for example, company) []:
Organizational Unit Name (for example, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
注意:
Common Name 字段填写的域名需要和集群的接入点域名保持一致,推荐使用 *.mqtt.tencenttdmq.com
如果需要保证该证书的配置仅对当前集群生效,可以根据使用场景(公网或 VPC 网络)写入对应的域名,例如公网可以填写 mqtt-xxxxxx-gz-public.mqtt.tencenttdmq.com,内网可以填写 mqtt-xxxxxx-gz-vpce-xxxxxx.mqtt.tencenttdmq.com
5. 生成自签名的 RSA 算法的 CA 证书 CA.crt
Mac
Windows
CentOS
openssl x509 -req -extfile /System/Library/OpenSSL/openssl.cnf -extensions v3_ca -in CA.csr -out CA.crt -signkey CA.key -CAcreateserial -days 3650
openssl x509 -req -extfile C:\\Progra~1\\OpenSSL-Win64\\bin\\cnf\\openssl.cnf -extensions v3_ca -in CA.csr -out CA.crt -signkey CA.key -CAcreateserial -days 3650
openssl x509 -req -extfile /etc/pki/tls/openssl.cnf -extensions v3_ca -in CA.csr -out CA.crt -signkey CA.key -CAcreateserial -days 3650

验证证书

在本地完成 CA 证书的签发后,您可以在控制台通过注册码后,生成对应的验证证书,验证证书用于验证 CA 证书本身有效性,包括证书是否由可信任的 CA 机构颁发。参考上述签发 CA 证书的流程,生成验证证书的流程如下:
1. 以下均以 RSA 算法证书为例,使用以下命令生成验证证书的密钥对。
openssl genrsa -out VerificationCert.key 2048
2. 使用上一步生成的密钥对中的私钥(private key)生成验证证书的签发请求文件(csr)。
openssl req -new -key VerificationCert.key -out VerificationCert.csr
3. 登录 MQTT 控制台,在左侧导航栏单击资源管理 > 集群管理,选择好地域后,单击要配置证书的集群的“ID”,进入集群基本信息页面。在 CA 证书管理页面,单击注册 CA 证书,进入注册配置页面。复制页面上方生成的注册码,填写到下一步的 Common Name 字段。

注意:
在本地生成并上传验证证书前,请不要关闭当前弹窗。弹窗关闭后会导致注册码重新生成,导致验证证书校验不通过。
4. 页面会返回以下示例,根据提示输入对应的参数。将上一步复制的注册码填写到 Common Name 字段中,其他字段视实际情况填写,可以为空。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) []:
Locality Name (for example, city) []:
Organization Name (for example, company) []:
Organizational Unit Name (for example, section) []:
Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
5. 执行如下命令,生成CA证书的验证证书 VerificationCert.crt。
openssl x509 -req -in VerificationCert.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out VerificationCert.crt -days 600 -sha512

上传证书

返回到控制台弹窗,上传 CA 证书 验证证书,确定后单击 提交
上传证书后,服务端会使用验证证书中的公钥对 CA 证书的签名进行解密,并与验证证书中内容的哈希值进行比较。如果两者匹配,则表明签名有效,进而证明 CA 证书是可信的。


管理 CA 证书

CA 证书完成注册后,您可以随时在页面管理已注册的 CA 证书。
在 CA 证书的列表页,可以查看已经注册的 CA 证书的状态,CA 证书有两种状态:已激活和未激活,未激活的证书可以被删除。



注意:
CA 证书取消激活后,使用当前 CA 证书的客户端证书在连接时会被拒绝,因此在进行 CA 证书的状态流转时需要特别注意对于客户端连接的影响。
CA 证书在删除时,会校验当前 CA 证书下是否有处于“已激活”状态下的客户端证书(设备证书),如果有的话会禁止当前的删除 CA 证书操作;如当前 CA 证书下的客户端证书(设备证书)处于“未激活”或者“已吊销”状态,则CA证书可以正常删除。
单击列表操作栏的查看详情,进入 CA 证书详情页,可以查看 CA 证书的相关信息。
在基础信息部分,页面展示 CA 证书的状态,Common Name,Serial Number 等信息。基础信息里的 “失效时间” 为在控制台,CA 证书取消激活的时间,并非证书失效的时间。如果证书为激活状态,则不展示“失效时间”,如下图所示。
同时,详情页还会展示关联了当前 CA 证书的客户端证书,单击客户端证书的序列号可以进入客户端证书的详情。




使用 CA 证书生成服务端/客户端证书

以下以 RSA 算法为例,简单介绍如何使用 CA 证书生成服务端或客户端证书。
如果您使用自签的 CA 证书来生成服务端和客户端证书,您可以按照以下指引来生成,服务端证书生成完成后,您可以上传到 SSL 证书
1. 创建一个名称为 client.csr.cfg 的文件,文件内容按照实际情况对下文进行修改。
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=CN ST=SHXXX L=SH O=TX OU=MQTT emailAddress=xxx@xxx CN=client-test
2. 创建一个名称为 client.crt.cfg 的文件,内容如下:
authorityKeyIdentifier=keyid,
issuerbasicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign
3. 生成客户端证书私钥和验证证书的签发请求文件(csr)。
Mac
Windows
openssl req -new -sha256 -nodes -out client.csr -newkey rsa:2048 -keyout client.key -config <(cat client.csr.cfg)
openssl req -new -sha256 -nodes -out client.csr -newkey rsa:2048 -keyout client.key -config client.csr.cfg
4. 生成客户端证书。
openssl x509 -req -in client.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out client.crt -days 500 -sha256 -extfile client.crt.cfg

注册客户端证书

客户端证书支持手动注册自动注册(在上文提到的 “配置证书注册方式” 时指定)。

自动注册客户端证书

如果选择自动注册客户端,则客户端在和服务端连接时,服务端会校验客户端证书关联的 CA 证书是否已经注册,如果对应的 CA 证书未注册,则认证不通过,客户端连接会被拒绝。
如果对应的 CA 证书已注册,则认证通过,客户端证书会自动出现在 “客户端证书管理” 的列表页。

手动注册客户端证书

1. 登录 MQTT 控制台
2. 在左侧导航栏单击资源管理 > 集群管理,选择好地域后,单击要配置证书的集群的“ID”,进入集群基本信息页面。
3. 进入客户端证书管理页面,单击注册客户端证书。在以下弹窗填写客户端证书的相关信息:
证书来源:手动注册。
CA 证书:选择已经注册了的 CA 证书。
客户端证书:按照文件格式要求上传证书,见上文的 “使用 CA 证书生成客户端证书” 部分。
客户端 ID:“一机一证” 场景下的补充字段,不必填,您可以根据实际场景填写。如果客户端连接时传的 client id 为空,该字段会被认为表示 client id;如果client id 和该字段均为空,则服务端会以客户端证书的 Common Name 字段为准。因此假设客户端没有传 client id 的情况下,请注意保证该字段不要有重复的情况。
是否激活:客户端证书注册后的生效状态,默认开启。您也可以在注册完成后,在控制台手动开启。



管理客户端证书

客户端证书完成注册后,您可以随时在页面管理已注册的客户端证书。
在客户端证书的列表页,可以查看已经注册的证书的状态,客户端证书有三种状态:已激活、未激活、已吊销。已吊销的证书可以被删除。

客户端生效/失效时间支持筛选,可以选出已失效和即将失效(30天内即将过期)的客户端证书。
单击列表操作栏的查看详情,进入客户端证书详情页,可以查看客户端证书的相关信息。
在基础信息部分,页面展示证书的状态,Common Name,Serial Number,关联的 CA 证书等信息。基础信息里的 “失效时间” 为在控制台,CA 证书取消激活的时间,并非证书失效的时间。如果证书为激活状态,则不展示“失效时间”,如上图所示。
同时,详情页还会展示关联了当前 CA 证书的客户端证书,单击客户端证书的序列号可以进入客户端证书的详情。