本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
corePKCS11 库
Overview
公有密钥加密标准 #11 (PKCS#11) 是一个加密 API,用于提取密钥存储、加密对象的 get/set 属性以及会话语义。请参阅 pkcs11.h
源代码存储库中的 (获取自 OASIS,FreeRTOS 标准正文)。在 FreeRTOS 参考实施中, corePKCS11 API 调用由 TLS 帮助程序接口发出,以便在 SOCKETS_Connect
期间执行 TLS 客户端身份验证。 PKCS#11 API 调用也由一次性开发人员预配置工作流发出,以将 TLS 客户端证书和私有密钥导入到 AWS IoT MQTT
代理以进行身份验证。以上两个使用案例(预置和 TLS 客户端身份验证)都只需要实施 PKCS#11 接口标准的一小部分。
Features
下面列出了使用的部分 PKCS#11。以下列表按照为实现预置、TLS 客户端身份验证和清除而调用的例程大致排序。有关各个函数的详细说明,请参阅标准委员会提供的 PKCS#11 文档。
常规设置和卸载 API
-
C_Initialize
-
C_Finalize
-
C_GetFunctionList
-
C_GetSlotList
-
C_GetTokenInfo
-
C_OpenSession
-
C_CloseSession
-
C_Login
预置 API
-
C_CreateObject CKO_PRIVATE_KEY
(对于设备私有密钥) -
C_CreateObject CKO_CERTIFICATE
(对于设备证书和代码验证证书) -
C_GenerateKeyPair
-
C_DestroyObject
客户端身份验证
-
C_GetAttributeValue
-
C_FindObjectsInit
-
C_FindObjects
-
C_FindObjectsFinal
-
C_GenerateRandom
-
C_SignInit
-
C_Sign
-
C_VerifyInit
-
C_Verify
-
C_DigestInit
-
C_DigestUpdate
-
C_DigestFinal
非对称加密支持
FreeRTOS PKCS#11 参考实施支持 2048 位 RSA(仅限签名)以及具有 NIST P-256 曲线的 ECDSA。下文将介绍如何创建基于 P-256 客户端证书的 AWS IoT 事物。
确保您使用以下(或更新)版本的 AWS CLI 和 OpenSSL:
aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016
以下过程假定您使用 aws configure 命令配置 AWS CLI。有关更多信息,请参阅 https://docs.amazonaws.cn/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config 中的使用 aws configure 快速配置AWS Command Line Interface 用户指南。
创建基于 P-256 客户端证书的 AWS IoT 事物
-
创建 AWS IoT 事物。
aws iot create-thing --thing-name
thing-name
-
使用 OpenSSL 创建 P-256 密钥。
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out
thing-name
.key -
创建证书注册请求,采用第 2 步中创建的密钥进行签名。
openssl req -new -nodes -days 365 -key
thing-name
.key -outthing-name
.req -
向 提交证书注册请求。AWS IoT.
aws iot create-certificate-from-csr \ --certificate-signing-request file://
thing-name
.req --set-as-active \ --certificate-pem-outfilething-name
.crt -
将证书(由 ARN 输出通过上一个命令引用)附加到事物。
aws iot attach-thing-principal --thing-name
thing-name
\ --principal "arn:aws-cn:iot:us-east-1
:123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
" -
创建策略。(此策略过于宽松。 只应当用于开发目的。)
aws iot create-policy --policy-name FullControl --policy-document file://policy.json
以下是在
create-policy
命令中指定的 policy.json 文件的列表。如果不希望运行greengrass:*
演示以进行 Greengrass 连接和发现,可以忽略 FreeRTOS 操作。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
-
将委托人(证书)和策略附加到事物。
aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws-cn:iot:us-east-1:
123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
"
现在,请按照本指南的入门AWS IoT部分中的步骤进行操作。请记得将创建的证书和私有密钥复制到 aws_clientcredential_keys.h
文件中。将事物名称复制到 中。aws_clientcredential.h
.
仅出于演示目的对证书和私有密钥进行了硬编码。生产级应用程序应将这些文件存储在安全位置。
Porting
有关将 corePKCS11 库移植到您的平台的信息,请参阅 移植指南中的corePKCS11移植 库FreeRTOS。