Bring Your Own Certificate Authority (BY") - AWS Payment Cryptography

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

Bring Your Own Certificate Authority (BY")

デフォルトでは、サービス内で作成された非対称 (RSA,ECC) キーにパブリックキー証明書が必要な場合、これらの証明書は AWS Payment Cryptography とアカウント固有の認証機関 (CA) によって発行されます。これは、CA を特定または設定したり、証明書署名リクエスト (CSR) を管理したりすることなく、X.509 を簡単に使用できるようにすることを目的としています。

AWS Payment Cryptography では、ポリシーまたはコンプライアンスの理由で必要なときに、独自の CA を使用することもできます。

概要:

BY" 機能を使用すると、TR-34 インポート/エクスポート、RSA Unwrap、ECDH ベースのキー転送など、証明書が使用されている任意の場所で独自の認証機関を使用できます。これは、組織全体で一貫した証明書チェーンを維持する必要がある場合や、特定の CA 証明書を必要とするパートナーと連携する場合に便利です。次の例は、TR-34 キーエクスポートを使用した BY" ワークフローを示しています。

標準の TR-34 エクスポートフローとの主な違いは次のとおりです。

  1. 署名 RSA キーは CreateKey を使用して明示的に作成されます。以前は、GetParametersForExport を介して暗黙的に作成されていました。

  2. 新しい API GetCertificateSigningRequest は、外部 CA によって署名できる Certificate Signing Request (CSR) を作成します。

  3. ExportKey API は、実行時に証明書を提供できるように拡張されています。以前は、これは暗黙的に によって提供されimport-tokenていました。これはオプションフィールドになります。

重要な考慮事項
  • これらの例では、RSA-2048 キーを使用して TDES-2KEY キーをラップします。AES-128 をエクスポートするときは、すべてのキーが RSA-3072 または RSA-4096 であることを確認します。

  • 最も一般的なエラーは、 SigningKeyIdentifierと で表されるキーSigningKeyCertificateが一致しないことです。

BY" ワークフロー

次の手順は、TR-34 エクスポートの完全な BY" ワークフローを示しています。

ステップ 1: RSA キーを作成する

まず、最終的に KDH 署名証明書となる RSA キーペアを作成します。タグを追加して、キーの目的を特定できます。

例署名用の RSA キーを作成する
$ aws payment-cryptography create-key --exportable \ --key-attributes KeyAlgorithm=RSA_2048,KeyUsage=TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{Sign=True}'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc", "KeyAttributes": { "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE", "KeyClass": "ASYMMETRIC_KEY_PAIR", "KeyAlgorithm": "RSA_2048", "KeyModesOfUse": { "Sign": true } }, "KeyCheckValue": "41E3723C", "KeyCheckValueAlgorithm": "SHA_1", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY" } }

次のステップで必要になるKeyArnため、 に注意してください。

ステップ 2: 証明書署名リクエストを生成する

GetCertificateSigningRequest API を使用して、外部 CA によって署名される証明書署名リクエスト (CSR) を生成します。出力は base64 でエンコードされた PEM ファイルです。base64 でコンテンツをデコードして保存すると、PEM 形式で有効な CSR が作成されます。

例 CSR の生成
$ aws payment-cryptography-data get-certificate-signing-request \ --key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc \ --signing-algorithm SHA512 \ --certificate-subject '{ "CommonName": "MyCertificateAWSUSEAST", "Organization": "Amazon", "OrganizationUnit": "PaymentCryptography", "Country": "US", "StateOrProvince": "Virginia", "City": "Arlington" }'
{ "CertificateSigningRequest": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." }

CertificateSigningRequest フィールドには、署名のために CA に送信する base64 エンコードされた CSR が含まれています。

ステップ 3: CSR を確認する (オプション)

オプションで OpenSSL を使用して CSR の内容を確認し、有効で期待どおりに動作することを確認できます。

例 OpenSSL で CSR を確認する
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text

ステップ 4: 認証機関で CSR に署名する

CSR を生成したら、認証機関 (CA) による署名が必要です。本番環境では、通常、 AWS Private CA または組織が確立した CA インフラストラクチャを使用します。テスト目的で、OpenSSL を使用して自己署名証明書を作成できます。

の使用 AWS Private CA

を使用して CSR に署名するには AWS Private CA、まず base64 でエンコードされた CSR をデコードし、ファイルに保存します。次に IssueCertificate API を使用します。

例で CSR に署名する AWS Private CA
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem $ aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --csr fileb://csr.pem \ --signing-algorithm SHA256WITHRSA \ --validity Value=365,Type=DAYS
{ "CertificateArn": "arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890" }

次に、署名付き証明書を取得します。

例署名付き証明書の取得
$ aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890
{ "Certificate": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----", "CertificateChain": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" }

エクスポートステップで使用する証明書コンテンツを保存します。ExportKey API に提供するときは、base64 エンコードする必要があります。

OpenSSL を使用したテスト

テストの目的で、OpenSSL を使用して自己署名 CA を作成し、CSR に署名できます。まず、CA プライベートキーと自己署名証明書を作成します。

例 OpenSSL を使用してテスト CA を作成する
$ # Generate CA private key openssl genrsa -out ca-key.pem 4096 $ # Create self-signed CA certificate openssl req -new -x509 -days 3650 -key ca-key.pem -out ca-cert.pem \ -subj "/C=US/ST=Virginia/L=Arlington/O=TestOrg/CN=Test CA"

次に、前のステップから CSR をデコードし、テスト CA で署名します。

例 OpenSSL で CSR に署名する
$ # Decode the base64-encoded CSR echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem $ # Sign the CSR with the CA openssl x509 -req -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem \ -CAcreateserial -out signed-cert.pem -days 365 -sha512
Certificate request self-signature ok subject=C=US, ST=Virginia, L=Arlington, O=Amazon, OU=PaymentCryptography, CN=MyCertificateAWSUSEAST

署名付き証明書が になりましたsigned-cert.pemExportKey API に提供するときは、この証明書を base64 でエンコードする必要があります。

例 Base64 署名付き証明書をエンコードする
$ cat signed-cert.pem | base64 -w 0

ステップ 5: CA 証明書をインポートする

使用する CA は、任意の証明書が使用されないように最初に信頼する必要があります。ImportKey API を使用して外部 CA のルート証明書をインポートします。中間 CA を使用する場合は、 import-key を再度呼び出しますが、 TrustedPublicKeyの代わりに を指定RootCertificatePublicKeyし、ルート CA ARN を指定します。

例ルート CA 証明書をインポートする
$ aws payment-cryptography import-key --key-material='{ "RootCertificatePublicKey": { "KeyAttributes": { "KeyAlgorithm": "RSA_4096", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Verify": true }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." } }'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xivpaqy7qbbm7cdw", "KeyAttributes": { "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE", "KeyClass": "PUBLIC_KEY", "KeyAlgorithm": "RSA_4096", "KeyModesOfUse": { "Verify": true } }, "Enabled": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "EXTERNAL" } }

エクスポートステップKeyArnで使用する CA を書き留めます。

ステップ 6: KRD 暗号化証明書を取得する

この例では、 AWS Payment Cryptography にインポートし直すため、 サービスを呼び出して、GetParametersForImport API を使用して KRD パブリックキー証明書を受け取ります。実際のシナリオでは、これは HSM、ATM、支払い端末、支払い端末管理システムなどの他のシステムによって提供されます。

例インポートのパラメーターを取得する
$ aws payment-cryptography-data get-parameters-for-import \ --key-material-type "TR34_KEY_BLOCK" \ --wrapping-key-algorithm RSA_2048
{ "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyAlgorithm": "RSA_2048", "ImportToken": "import-token-v2rxpl6drxeptn7w", "ParametersValidUntilTimestamp": "2025-11-01T18:45:31.271000-07:00" }

ステップ 7: BY" を使用してキーをエクスポートする

最後に、ExportKey API を使用して独自の CA 署名証明書で TR-34 を使用してキーをエクスポートします。外部 CA によって署名された署名証明書を指定します。

例 BY" を使用した TR-34 エクスポート
$ aws payment-cryptography-data export-key \ --export-key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/iox73p5f4c4yjiod \ --key-material '{ "Tr34KeyBlock": { "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/j625deyfqlwctu57", "SigningKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc", "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "KeyBlockFormat": "X9_TR34_2012", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." } }'
{ "WrappedKey": { "WrappedKeyMaterialFormat": "TR34_KEY_BLOCK", "KeyMaterial": "3082055A06092A864886F70D010702A082054B30820547...", "KeyCheckValue": "3DCA31", "KeyCheckValueAlgorithm": "ANSI_X9_24" } }

エクスポートされたキーブロックは、標準の TR-34 インポートプロセスを使用して受信システムによってインポートできるようになりました。

追加のメモ

  • これらの例は、AWS CLI を使用して示されています。Java、Python、Go、Rust を含むすべての AWS SDKs で同じ機能を使用できます。

  • 自己署名 CA でテストする場合は、OpenSSL を使用してテスト CA を作成し、CSR に署名できます。本番環境では、組織で確立された CA インフラストラクチャを使用します。