corePKCS11 ライブラリ - FreeRTOS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

corePKCS11 ライブラリ

Overview

公開鍵暗号標準 #11 (PKCS#11) は、キーストレージ、暗号化オブジェクトプロパティの取得/設定、およびセッションセマンティクスを抽象化する暗号化 API です。FreeRTOS のソースコードリポジトリの pkcs11.h (標準的な本体である OASIS から入手) を参照してください。リファレンス実装では、FreeRTOSPKCS#11 API コールは、 中に TLS クライアント認証を実行するために TLS ヘルパーインターフェイスによって実行されます。SOCKETS_Connect PKCS#11 API コールは、1 回限りの開発者プロビジョニングワークフローによっても行われ、AWS IoT MQTT ブローカーへの認証用に TLS クライアント証明書とプライベートキーをインポートします。プロビジョニングと TLS クライアント認証の 2 つのユースケースでは、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 リファレンス実装では、NIST P-256 曲線で 2048 ビットの RSA (署名のみ) と 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.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config の「aws 設定を使用したクイック設定AWS Command Line Interface ユーザーガイド」を参照してください。

P-256 クライアント証明書に基づいて AWS IoT モノを作成するには

  1. AWS IoT モノの作成

    aws iot create-thing --thing-name thing-name
  2. を使用して P-256 キーを作成します。OpenSSL

    openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out thing-name.key
  3. ステップ 2 で作成したキーで署名された証明書の登録リクエストを作成します。

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. 証明書の登録リクエストを AWS IoT に送信します。

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. (前のコマンドで ARN 出力によって参照される) 証明書をモノにアタッチします。

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. ポリシーを作成します。(このポリシーは許容範囲が広すぎます。 開発目的でのみ使用してください。)

    aws iot create-policy --policy-name FullControl --policy-document file://policy.json

    create-policy コマンドで指定された policy.json ファイルのリストを次に示します。Greengrass 接続と検出のための FreeRTOS のデモを実行しない場合は、greengrass:* アクションを省略できます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. プリンシパル (証明書) とポリシーをモノにアタッチします。

    aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"

次に、このガイドの「AWS IoT の使用開始」セクションの手順に従います。作成した証明書とプライベートキーを aws_clientcredential_keys.h ファイルにコピーすることを忘れないでください。モノの名前は aws_clientcredential.h にコピーします。

注記

証明書とプライベートキーは、デモ専用にハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

Porting

ライブラリをプラットフォームに移植する方法については、corePKCS11 移植ガイドの「 ライブラリの移植corePKCS11」を参照してください。FreeRTOS