
# MQTT 注册组静态策略发放示例
#### 制作CA证书
1. 在浏览器中访问[这里](https://slproweb.com/products/Win32OpenSSL.html)，下载并进行安装OpenSSL工具，安装完成后配置环境变量。
2. 在 D:\\certificates 文件夹下，以管理员身份运行cmd命令行窗口。
3. 生成密钥对（rootCA.key）： 
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   生成"密钥对"时输入的密码在生成"证书签名请求文件"、"CA证书"，"验证证书"以及"设备证书"时需要用到，请妥善保存。
   ```
   openssl genrsa -des3 -out rootCA.key 2048
   ```
   
   
4. 使用密钥对生成证书签名请求文件： 
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   生成证书签名请求文件时，要求填写证书唯一标识名称（Distinguished Name，DN）信息，参数说明如下[表1]所示。
    表1证书签名请求文件参数说明 
   | **提示**                                            | **参数名称**            | **取值样例**                      |
   |:---|:---|:---|
   | Country Name (2 letter code) \[\]:                | 国家/地区               | CN                            |
   | State or Province Name (full name) \[\]:          | 省/市                 | GuangDong                     |
   | Locality Name (eg, city) \[\]:                    | 城市                  | ShenZhen                      |
   | Organization Name (eg, company) \[\]:             | 组织机构（或公司名）          | Huawei Technologies Co., Ltd. |
   | Organizational Unit Name (eg, section) \[\]:      | 机构部门                | Cloud Dept.                   |
   | Common Name (eg, fully qualified host name) \[\]: | CA名称（CN）            | Huawei IoTDP CA               |
   | Email Address \[\]:                               | 邮箱地址                | /                             |
   | A challenge password \[\]:                        | 证书密码，如您不设置密码，可以直接回车 | /                             |
   | An optional company name \[\]:                    | 可选公司名称，如您不设置，可以直接回车 | /                             |
      
   ```
   openssl req -new -key rootCA.key -out rootCA.csr
   ```
   
   
5. 生成CA证书（rootCA.crt）： 
   ```
   openssl x509 -req -days 50000 -in rootCA.csr -signkey rootCA.key -out rootCA.crt
   ```
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   "-days"后的参数值指定了该证书的有效天数，此处示例为50000天，您可根据实际业务场景和需要进行调整。
   
   
 
 #### 获取设备发放终端节点
表2设备发放节点列表 
| 区域名称   | 区域         | 终端节点（Endpoint）                      | 端口   | 协议    |
|:---|:---|:---|:---|:---|
| 华北-北京四 | cn-north-4 | iot-bs.cn-north-4.myhuaweicloud.com | 8883 | MQTTS |
   
#### 上传并验证CA证书
1. 登录[设备发放控制台](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)，进入"证书"界面，单击右上角"上传CA证书"，填写"证书名称"并上传上述"制作CA证书"步骤后生成的"CA证书（rootCA.crt文件）"，单击"确定"。
   
   图1上传CA证书   
   ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001835989777.png "点击放大")
   
   
2. 验证[步骤1]中上传的CA证书，只有成功验证证书后该证书方可使用。
   
   1. 为验证证书生成密钥对。
      ```
      openssl genrsa -out verificationCert.key 2048
      ```
      
   
   2. 获取随机验证码。
      图2上传CA证书完成页   
      ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001789190628.png "点击放大")
      图3复制验证码   
      ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001836109833.png "点击放大") 
   
   3. 利用此验证码生成证书签名请求文件CSR。
      ```
      openssl req -new -key verificationCert.key -out verificationCert.csr
      ```
      ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
      CSR文件的Common Name (e.g. server FQDN or YOUR name) 需要填写前一过程中获取到的随机验证码。
      
   
   4. 使用CA证书、CA证书私钥和CSR文件创建验证证书（verificationCert.crt）。
      ```
      openssl x509 -req -in verificationCert.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out verificationCert.crt -days 500 -sha256
      ```
      ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
      生成验证证书用到的"rootCA.crt"和"rootCA.key"这两个文件，为"制作CA证书"中所生成的两个文件。
      "-days"后的参数值指定了该证书的有效天数，此处示例为500天，您可根据实际业务场景和需要进行调整。
      
   
   5. 上传验证证书进行验证。
      图4上传验证证书   
      ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001835989781.png "点击放大") 
   
   
   
   
 
#### 生成设备证书
1. 使用OpenSSL工具为设备证书生成密钥对（设备私钥）： 
   ```
   openssl genrsa -out deviceCert.key 2048
   ```
   
   
2. 使用设备密钥对，生成证书签名请求文件： 
   ```
   openssl req -new -key deviceCert.key -out deviceCert.csr
   ```
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   生成证书签名请求文件时，要求填写证书唯一标识名称（Distinguished Name，DN）信息，参数说明如下[表2]所示。
    表3证书签名请求文件参数说明 
   | **提示**                                            | **参数名称**            | **取值样例**                      |
   |:---|:---|:---|
   | Country Name (2 letter code) \[\]:                | 国家/地区               | CN                            |
   | State or Province Name (full name) \[\]:          | 省/市                 | GuangDong                     |
   | Locality Name (eg, city) \[\]:                    | 城市                  | ShenZhen                      |
   | Organization Name (eg, company) \[\]:             | 组织机构（或公司名）          | Huawei Technologies Co., Ltd. |
   | Organizational Unit Name (eg, section) \[\]:      | 机构部门                | Cloud Dept.                   |
   | Common Name (eg, fully qualified host name) \[\]: | CA名称（CN）            | Huawei IoTDP CA               |
   | Email Address \[\]:                               | 邮箱地址                | /                             |
   | A challenge password \[\]:                        | 证书密码，如您不设置密码，可以直接回车 | /                             |
   | An optional company name \[\]:                    | 可选公司名称，如您不设置，可以直接回车 | /                             |
      
   
   
3. 使用CA证书、CA证书私钥和CSR文件创建设备证书（deviceCert.crt）。 
   ```
   openssl x509 -req -in deviceCert.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out deviceCert.crt -days 36500 -sha256
   ```
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   生成设备证书用到的"rootCA.crt"和"rootCA.key"这两个文件，为"制作CA证书"中所生成的两个文件，且需要完成"上传并验证CA证书"。
   "-days"后的参数值指定了该证书的有效天数，此处示例为36500天，您可根据实际业务场景和需要进行调整。
   
   
 
#### 添加静态策略
"关键字"为注册组名称中的关键字。设备发放时，注册组下的设备的设备名称为"注册组名称+设备ID"，如果包含设置的关键字，则可按该实例进行发放。
图5创建静态策略   
![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001836024129.png "点击放大")
#### 新增注册组
图6新增注册组   
![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001789544630.png "点击放大")
图7创建证书静态注册组   
![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000002063538261.png "点击放大")
#### 设备引导
1. 下载并修改华为SDK示例代码进行设备引导（这里以[java sdk代码](https://github.com/huaweicloud/huaweicloud-iot-device-sdk-java)为示例）。
   
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   用IDEA/Eclipse打开SDK代码工程，修改DEMO示例BootsrapSelfRegSample中的参数。
   其中deviceId可以自己随意命名，用一个唯一标识设备身份的ID，也可用设备证书的唯一标识身份，设备证书使用者的CN。(因为注册组的场景不存在选择产品所以命名需要注意：如果命名字符串有"_"，那么第一项必须为对应设备接入已经存在的产品ID，如果不包括"_"，那么可以随意命名)。
   ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001148195126.gif "点击放大")
   ScopeId可以在设备发放页面单击 设备-\>注册组列表 查询。
   图8查看ScopeId   
   ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000002063559517.png "点击放大")
   ![](https://support.huaweicloud.com/qs-iotps/public_sys-resources/note_3.0-zh-cn.png)
   bootstrapUri为[获取设备发放终端节点]对应的终端节点。
   keyStore的参数为对应注册组的CA证书签发的设备证书，私钥文件对应的本地目录。如果私钥不加密，那么不需要填写keyPassword，对应bootstrapClient = new BootstrapClient(bootstrapUri, deviceId, keyStore, "", scopeId)。
   运行DEMO程序，看到如下日志，代表设备发放成功，并且已经收到设备发放下发的设备接入地址。如果程序运行没报错，在对应的设备接入平台可以看到设备，并已在线。
   ![](https://support.huaweicloud.com/qs-iotps/figure/zh-cn_image_0000001194194837.gif "点击放大")
   
   
 
