为 TLS 测试设置证书和密钥 - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 TLS 测试设置证书和密钥

TLS_ConnectRSA()

本节提供了有关为测试 TLS 移植设置证书和密钥的说明。

对于 RSA 设备身份验证,您可以使用在注册设备时从 AWS IoT 控制台下载的私有密钥和证书。

注意

在将设备注册为 AWS IoT 事物之后,可从 AWS IoT 控制台检索设备证书,但无法检索私有密钥。

FreeRTOS 是一个 C 语言项目。您必须设置证书和密钥格式,然后再将其添加到 /tests/include/aws_clientcredential_keys.h 标头文件中。

/tests/include/aws_clientcredential_keys.h 设置证书和密钥格式

  1. 在浏览器窗口中,打开 /tools/certificate_configuration/CertificateConfigurator.html

  2. Certificate PEM file (证书 PEM 文件) 下,选择您从 AWS IoT 控制台下载的 ID-certificate.pem.crt 文件。

  3. Private Key PEM file (私有密钥 PEM 文件) 下,选择您从 AWS IoT 控制台下载的 ID-private.pem.key 文件。

  4. 选择 Generate and save aws_clientcredential_keys.h (生成并保存 aws_clientcredential_keys.h),然后将文件保存到 /tests/include 中。这将覆盖目录中的现有文件。

    注意

    仅出于演示目的对证书和私有密钥进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

TLS_ConnectEC()

对于椭圆曲线数字签名算法 (ECDSA) 身份验证,您需要生成私有密钥、证书签名请求 (CSR) 和证书。您可以使用 OpenSSL 生成私有密钥和 CSR,并且您可以在 AWS IoT 控制台中使用 CSR 生成证书。

生成私有密钥和 CSR

  1. 使用以下命令在当前工作目录中创建名为 p256_privatekey.pem 的私有密钥:

    openssl ecparam -name prime256v1 -genkey -noout -out p256_privatekey.pem
  2. 使用以下命令在当前工作目录中创建名为 csr.csr 的 CSR 文件。

    openssl req –new –key p256_privatekey.pem –out csr.csr

在 AWS IoT 控制台中使用 CSR 创建证书

  1. 打开 AWS IoT 控制台

  2. 在导航窗格中依次选择安全证书创建

  3. 选择利用 CSR 创建,然后查找并上传使用 OpenSSL 创建的 csr.csr 文件。

  4. 选择激活来激活证书,然后选择下载以下载 .cert.pem 文件格式的证书。

  5. 选择附加策略,查找并选择您在将设备连接到 AWS IoT 说明中创建并附加到 RAS 证书的 AWS IoT 策略,然后选择完成

  6. 将证书附加到您在注册设备时创建的 AWS IoT 事物。

  7. 证书页面上,找到并选择您刚刚创建的证书。在页面右上角,选择操作,然后选择附加事物

  8. 查找并选择您创建的事物作为设备,然后选择附加

您必须为设备设置证书和私有密钥格式,然后再将其添加到 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h 标头文件中。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 设置证书和密钥格式

  1. 在浏览器窗口中,打开 /tools/certificate_configuration/PEMfileToCString.html

  2. PEM Certificate or Key (PEM 证书或密钥) 下,选择您从 AWS IoT 控制台下载的 ID-certificate.pem.crt

  3. 选择 Display formatted PEM string to be copied into aws_clientcredential_keys.h (显示要复制到 aws_clientcredential_keys.h 中设置了格式的 PEM 字符串),然后复制证书字符串。

  4. 打开 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h,然后将设置了格式的证书字符串粘贴到 tlstestCLIENT_CERTIFICATE_PEM_EC 的定义中。

    注意

    仅出于演示目的对证书和私有密钥进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

  5. 按照相同的步骤获取您使用 OpenSSL 创建的私有密钥文件的已设置格式的字符串 (p256_privatekey.pem)。将设置了格式的私有密钥字符串复制并粘贴到 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h 中的 tlstestCLIENT_PRIVATE_KEY_PEM_EC 的定义中。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 中,使用您在 将设备连接到 AWS IoT 中使用的相同 AWS IoT MQTT 代理终端节点地址定义 tlstestMQTT_BROKER_ENDPOINT_EC

TLS_ConnectMalformedCert()

此测试验证您可以使用格式错误的证书与服务器进行身份验证。随机修改证书有可能在发送连接请求之前被 X.509 证书验证拒绝。要设置格式错误的证书,我们建议您修改证书的发布者。

修改证书的发布者

  1. 获取您已使用的有效的客户端证书 ID-certificate.pem.crt

    在 Windows 证书管理器中,证书属性如下所示:

  2. 使用以下命令,将证书从 PEM 转换为 DER:

    openssl x509 -outform der -in ID-certificate.pem.crt -out ID-certificate.der.crt
  3. 打开 DER 证书,然后搜索以下十六进制序列:

    41 6d 61 7a 6f 6e 20 57 65 62 20 53 65 72 76 69 63 65 73

    此序列转换为纯文本“Amazon Web Services”。

  4. 53 更改为 43,这样序列的纯文本变为“Amazon Web Cervices”,然后保存该文件。

    在 Windows 证书管理器中,证书属性现在如下所示:

  5. 使用以下命令可将证书转换回 PEM:

    openssl x509 -inform der -in ID-certificate.der.crt -out ID-cert-modified.pem.crt

您必须纠正设备的错误证书格式,然后再将其添加到 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h 标头文件中。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 设置证书格式

  1. 在浏览器窗口中,打开 /tools/certificate_configuration/PEMfileToCString.html

  2. PEM Certificate or Key (PEM 证书或密钥) 下,选择您创建的 ID-certificate.pem.crt 并修改。

  3. 选择 Display formatted PEM string to be copied into aws_clientcredential_keys.h (显示要复制到 aws_clientcredential_keys.h 中设置了格式的 PEM 字符串),然后复制证书字符串。

  4. 打开 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h,然后将设置了格式的证书字符串粘贴到 tlstestCLIENT_CERTIFICATE_PEM_MALFORMED 的定义中。

    注意

    仅出于演示目的对证书进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

TLS_ConnectBYOCCredentials()

您可以使用自己的证书进行身份验证。要创建并注册一个具有有效 rootCA/CA 链的证书,请按照创建 BYOC (ECDSA) 中的说明进行操作。创建证书后,您需要将一些策略附加到设备证书,然后您需要将设备的事物附加到证书。

将策略附加到设备证书

  1. 打开 AWS IoT 控制台

  2. 在导航窗格中,依次选择安全证书和您在创建 BYOC (ECDSA) 中创建和注册的设备证书。

  3. 选择操作,然后选择附加策略

  4. 查找并选择您在将设备连接到 AWS IoT 说明中创建并附加到 RSA 证书的 AWS IoT 策略,然后选择附加

将事物附加到设备证书

  1. 证书页面上,找到并选择相同的设备证书,选择操作,然后选择附加事物

  2. 查找并选择您创建的事物作为设备,然后选择附加

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 设置证书格式

  1. 在浏览器窗口中,打开 /tools/certificate_configuration/PEMfileToCString.html

  2. PEM Certificate or Key (PEM 证书或密钥) 下,选择您创建的 ID-certificate.pem.crt 并修改。

  3. 选择 Display formatted PEM string to be copied into aws_clientcredential_keys.h (显示要复制到 aws_clientcredential_keys.h 中设置了格式的 PEM 字符串),然后复制证书字符串。

  4. 打开 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h,然后将设置了格式的证书字符串粘贴到 tlstestCLIENT_BYOC_CERTIFICATE_PEM 的定义中。

    注意

    仅出于演示目的对证书进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

  5. 按照相同的步骤获取您创建的私有密钥文件的设置了格式的字符串。将设置了格式的私有密钥字符串复制并粘贴到 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h 中的 tlstestCLIENT_BYOC_PRIVATE_KEY_PEM 的定义中。

TLS_ConnectUntrustedCert()

您可以使用自己的证书进行身份验证,而无需将证书注册到 AWS IoT。要创建具有有效 rootCA/CA 链的证书,请按照创建 BYOC (ECDSA) 中的说明操作,但跳过将设备注册到 AWS IoT 的说明。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 设置证书格式

  1. 在浏览器窗口中,打开 /tools/certificate_configuration/PEMfileToCString.html

  2. PEM Certificate or Key (PEM 证书或密钥) 下,选择您创建的 ID-certificate.pem.crt 并修改。

  3. 选择 Display formatted PEM string to be copied into aws_clientcredential_keys.h (显示要复制到 aws_clientcredential_keys.h 中设置了格式的 PEM 字符串),然后复制证书字符串。

  4. 打开 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h,然后将设置了格式的证书字符串粘贴到 tlstestCLIENT_UNTRUSTED_CERTIFICATE_PEM 的定义中。

    注意

    仅出于演示目的对证书进行了硬编码。生产级应用程序应将这些文件存储在安全位置。

  5. 按照相同的步骤获取您创建的私有密钥文件的设置了格式的字符串。将设置了格式的私有密钥字符串复制并粘贴到 /libraries/freertos_plus/standard/tls/test/iot_test_tls.h 中的 tlstestCLIENT_UNTRUSTED_PRIVATE_KEY_PEM 的定义中。