

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建代码签名证书
<a name="ota-code-sign-cert"></a>

要对固件映像进行数字签名，需要代码签名证书和私有密钥。出于测试目的，您可以创建自签名证书和私有密钥。对于生产环境，请通过众所周知的证书颁发机构 (CA) 购买证书。

不同平台需要不同类型的代码签名证书。以下部分介绍如何为符合 FreeRTOS 条件的不同平台创建代码签名证书。

**Topics**
+ [为德州仪器 SF-LAUNCHXL 创建代码签名证书 CC3220](ota-code-sign-cert-ti.md)
+ [为 Espressif 创建代码签名证书 ESP32](ota-code-sign-cert-esp.md)
+ [为 Nordic nrf52840-dk 创建代码签名证书](ota-code-sign-cert-nordic.md)
+ [为 FreeRTOS Windows 模拟器创建代码签名证书](ota-code-sign-cert-win.md)
+ [为自定义硬件创建代码签名证书](ota-code-sign-cert-other.md)

# 为德州仪器 SF-LAUNCHXL 创建代码签名证书 CC3220
<a name="ota-code-sign-cert-ti"></a>

**重要**  <a name="deprecation-message"></a>
该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时，我们建议[从此处开始](freertos-getting-started-modular.md)。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目，请参阅 [Amazon-FreeRTOS Github 存储库迁移指南](github-repo-migration.md)。

 SimpleLink Wi-Fi CC3220 SF 无线微控制器 Launchpad 开发套件支持两个用于固件代码签名的证书链：
+ 生产 (certificate-catalog)

  要使用生产证书链，必须购买商用代码签名证书，并使用 [TI Uniflash 工具](http://www.ti.com/tool/UNIFLASH)将主板设置为生产模式。
+ 测试和开发 (certificate-playground) 

  Playground 证书链允许您使用自签名代码签名证书试用 OTA 更新。

使用 AWS Command Line Interface 将您的代码签名证书、私钥和证书链导入。 AWS Certificate Manager有关更多信息，请参阅AWS Command Line Interface 《用户指南》**中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

下载并安装最新版本的 [SimpleLink CC3220 SDK](http://www.ti.com/tool/download/SIMPLELINK-CC3220-SDK)。默认情况下，所需的文件位于以下位置：

`C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground` (Windows) 

`/Applications/Ti/simplelink_cc32xx_version/tools/cc32xx_tools/certificate-playground` (macOS)

 SimpleLink CC3220 软件开发工具包中的证书采用 DER 格式。要创建自签名代码签名证书，必须将其转换为 PEM 格式。

按照以下步骤创建代码签名证书，该证书链接到德州仪器 playground 证书层次结构 AWS Certificate Manager 并符合标准的 AWS IoT 代码签名。

**注意**  
要创建代码签名证书，请在计算机上安装 [OpenSSL](https://www.openssl.org/)。安装 OpenSSL 后，请确保将 `openssl` 分配给命令提示符或终端环境中的 OpenSSL 可执行文件。

**创建自签名代码签名证书**

1. 使用管理员权限打开命令提示符或终端。

1. 在工作目录中，使用以下文本创建名为 `cert_config.txt` 的文件。*test\$1signer@amazon.com*用您的电子邮件地址替换。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my dn
   
   [ my dn ]
   commonName = test_signer@amazon.com
   
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 创建私有密钥和证书签名请求 (CSR)：

   ```
   openssl req -config cert_config.txt -extensions my_exts -nodes -days 365 -newkey rsa:2048 -keyout tisigner.key -out tisigner.csr
   ```

1. 将 Texas Instruments 操场根 CA 私有密钥从 DER 格式转换为 PEM 格式。

   TI 操场根 CA 私有密钥位于以下位置：

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground\dummy-root-ca-cert-key` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert-key` (macOS)

   ```
   openssl rsa -inform DER -in dummy-root-ca-cert-key -out dummy-root-ca-cert-key.pem
   ```

1. 将 Texas Instruments 操场根 CA 证书从 DER 格式转换为 PEM 格式。

   TI 操场根证书位于以下位置：

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground/dummy-root-ca-cert` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert` (macOS)

   ```
   openssl x509 -inform DER -in dummy-root-ca-cert -out dummy-root-ca-cert.pem
   ```

1. 使用 Texas Instruments 根 CA 对 CSR 进行签名：

   ```
   openssl x509 -extfile cert_config.txt -extensions my_exts  -req -days 365 -in tisigner.csr -CA dummy-root-ca-cert.pem -CAkey dummy-root-ca-cert-key.pem -set_serial 01 -out tisigner.crt.pem -sha1
   ```

1. 将代码签名证书 (`tisigner.crt.pem`) 转换为 DER 格式：

   ```
   openssl x509 -in tisigner.crt.pem -out tisigner.crt.der -outform DER
   ```
**注意**  
稍后可将 `tisigner.crt.der` 证书写入到 TI 开发主板上。

1. 将代码签名证书、私钥和证书链导入： AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://tisigner.crt.pem --private-key fileb://tisigner.key --certificate-chain fileb://dummy-root-ca-cert.pem
   ```

   此命令显示了证书的 ARN。在创建 OTA 更新作业时需要此 ARN。
**注意**  
编写此步骤时假设您将使用代码签名对固件映像 AWS IoT 进行签名。尽管建议使用代码签名， AWS IoT 但您可以手动对固件映像进行签名。

# 为 Espressif 创建代码签名证书 ESP32
<a name="ota-code-sign-cert-esp"></a>

**重要**  <a name="deprecation-message"></a>
该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时，我们建议[从此处开始](freertos-getting-started-modular.md)。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目，请参阅 [Amazon-FreeRTOS Github 存储库迁移指南](github-repo-migration.md)。

乐鑫 ESP32 主板支持带有 ECDSA 代码签名证书的自签名 SHA-256。

**注意**  
要创建代码签名证书，请在计算机上安装 [OpenSSL](https://www.openssl.org/)。安装 OpenSSL 后，请确保将 `openssl` 分配给命令提示符或终端环境中的 OpenSSL 可执行文件。  
使用 AWS Command Line Interface 将您的代码签名证书、私钥和证书链导入。 AWS Certificate Manager有关安装的信息 AWS CLI，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在工作目录中，使用以下文本创建名为 `cert_config.txt` 的文件。*test\$1signer@amazon.com*用您的电子邮件地址替换：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 创建 ECDSA 代码签名私有密钥：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 创建 ECDSA 代码签名证书：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 将代码签名证书、私钥和证书链导入： AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令显示了证书的 ARN。在创建 OTA 更新作业时需要此 ARN。
**注意**  
编写此步骤时假设您将使用代码签名对固件映像 AWS IoT 进行签名。尽管建议使用代码签名， AWS IoT 但您可以手动对固件映像进行签名。

# 为 Nordic nrf52840-dk 创建代码签名证书
<a name="ota-code-sign-cert-nordic"></a>

**重要**  <a name="deprecation-message"></a>
该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时，我们建议[从此处开始](freertos-getting-started-modular.md)。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目，请参阅 [Amazon-FreeRTOS Github 存储库迁移指南](github-repo-migration.md)。

Nordic nrf52840-dk 支持使用 ECDSA 代码签名证书的自签名 SHA256 。

**注意**  
要创建代码签名证书，请在计算机上安装 [OpenSSL](https://www.openssl.org/)。安装 OpenSSL 后，请确保将 `openssl` 分配给命令提示符或终端环境中的 OpenSSL 可执行文件。  
使用 AWS Command Line Interface 将您的代码签名证书、私钥和证书链导入。 AWS Certificate Manager有关安装的信息 AWS CLI，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在工作目录中，使用以下文本创建名为 `cert_config.txt` 的文件。*test\$1signer@amazon.com*用您的电子邮件地址替换：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 创建 ECDSA 代码签名私有密钥：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 创建 ECDSA 代码签名证书：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 将代码签名证书、私钥和证书链导入： AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令显示了证书的 ARN。在创建 OTA 更新作业时需要此 ARN。
**注意**  
编写此步骤时假设您将使用代码签名对固件映像 AWS IoT 进行签名。尽管建议使用代码签名， AWS IoT 但您可以手动对固件映像进行签名。

# 为 FreeRTOS Windows 模拟器创建代码签名证书
<a name="ota-code-sign-cert-win"></a>

FreeRTOS Windows 模拟器需要带 ECDSA P-256 密钥和 SHA-256 哈希的代码签名证书，才能执行 OTA 更新。如果没有代码签名证书，请执行以下步骤来创建一个。

**注意**  
要创建代码签名证书，请在计算机上安装 [OpenSSL](https://www.openssl.org/)。安装 OpenSSL 后，请确保将 `openssl` 分配给命令提示符或终端环境中的 OpenSSL 可执行文件。  
使用 AWS Command Line Interface 将您的代码签名证书、私钥和证书链导入。 AWS Certificate Manager有关安装的信息 AWS CLI，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在工作目录中，使用以下文本创建名为 `cert_config.txt` 的文件。*test\$1signer@amazon.com*用您的电子邮件地址替换：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 创建 ECDSA 代码签名私有密钥：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 创建 ECDSA 代码签名证书：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 将代码签名证书、私钥和证书链导入： AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令显示了证书的 ARN。在创建 OTA 更新作业时需要此 ARN。
**注意**  
编写此步骤时假设您将使用代码签名对固件映像 AWS IoT 进行签名。尽管建议使用代码签名， AWS IoT 但您可以手动对固件映像进行签名。

# 为自定义硬件创建代码签名证书
<a name="ota-code-sign-cert-other"></a>

借助适当的工具集，可以为您的硬件创建自签名的证书和私有密钥。

使用 AWS Command Line Interface 将您的代码签名证书、私钥和证书链导入。 AWS Certificate Manager有关安装的信息 AWS CLI，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

创建代码签名证书后，您可以使用将其导 AWS CLI 入 ACM：

```
aws acm import-certificate --certificate fileb://code-sign.crt --private-key fileb://code-sign.key
```

此命令的输出显示了证书的 ARN。在创建 OTA 更新作业时需要此 ARN。

ACM 要求证书使用特定的算法和密钥大小。有关更多信息，请参阅[导入证书的先决条件](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-prerequisites.html)。有关 ACM 的更多信息，请参阅[将证书导入 AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

必须将代码签名证书的内容复制并粘贴到 `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` 文件中并进行格式化，该文件属于您稍后下载的 FreeRTOS 代码的一部分。