翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 を使用できます。組織全体で一貫した証明書チェーンが必要な場合、またはパートナーが特定の CA 証明書を必要とする場合は、BY" を使用します。次の例は、TR-34 キーのエクスポートと TR-34 キーのインポートの BY" ワークフローを示しています。
標準の TR-34 フローとの主な違いは 3 つあります。
-
CreateKey を使用して RSA キーを作成します。以前に、
GetParametersForExportまたは自分でGetParametersForImport作成しました。 -
GetCertificateSigningRequest API は CSR を作成します。その後、外部 CA が署名できます。
重要な考慮事項
-
これらの例では、RSA-2048 キーを使用して TDES-2KEY キーをラップします。AES-128 をエクスポートするときは、すべてのキーが RSA-3072 または RSA-4096 であることを確認します。
-
最も一般的なエラーは、
SigningKeyIdentifierと で表されるキーSigningKeyCertificateが一致しないことです。
BY" エクスポートワークフロー
次の手順は、TR-34 エクスポートの完全な BY" ワークフローを示しています。
Steps
ステップ 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 フィールドには、base64 でエンコードされた PEM ファイル全体が含まれます。PEM ファイルには、 マーカー-----BEGIN CERTIFICATE REQUEST-----と -----END CERTIFICATE REQUEST-----マーカーが含まれています。この値を CA に送信して署名します。
ステップ 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.pem。ExportKey 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 インポートプロセスを使用して受信システムによってインポートできるようになりました。
BY" インポートワークフロー
次の手順では、TR-34 キーのインポートに関する BY" ワークフローについて説明します。このワークフローを使用して、独自の CA 署名 KRD (キー受信デバイス) 暗号化証明書を使用して AWS Payment Cryptography にキーを受け取ります。BY" インポートでは、既に管理している CA を使用して信頼チェーンを制御します。
Steps
ステップ 1: RSA キーを作成する
KRD 暗号化キーとして使用する RSA キーペアを作成します。このキーは、TR-34 インポート中に受信キーをラップ解除して復号します。キーは受信キーとしてサービス内に留まるため、エクスポートできません。
例 KRD 暗号化キーを作成する
$aws payment-cryptography create-key \ --key-attributes KeyAlgorithm=RSA_2048,KeyUsage=TR31_K2_TR34_ASYMMETRIC_KEY,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{Unwrap=True,Decrypt=True}'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/bm7t4qv8hzk24jce", "KeyAttributes": { "KeyUsage": "TR31_K2_TR34_ASYMMETRIC_KEY", "KeyClass": "ASYMMETRIC_KEY_PAIR", "KeyAlgorithm": "RSA_2048", "KeyModesOfUse": { "Unwrap": true, "Decrypt": true } }, "KeyCheckValue": "7FA29C1E", "KeyCheckValueAlgorithm": "SHA_1", "Enabled": true, "Exportable": false, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY" } }
[KeyArn] の値を書き留めます。それは次の手順で必要となります。
ステップ 2: 証明書署名リクエストを生成する
GetCertificateSigningRequest API を使用して、KRD 暗号化キーの証明書署名リクエスト (CSR) を生成します。出力は base64 でエンコードされた PEM ファイルです。base64 でコンテンツをデコードして保存すると、PEM 形式で有効な CSR が作成されます。
例 KRD キーの CSR を生成する
$aws payment-cryptography-data get-certificate-signing-request \ --key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/bm7t4qv8hzk24jce \ --signing-algorithm SHA512 \ --certificate-subject '{ "CommonName": "MyImportKRDCertAWSUSEAST", "Organization": "Amazon", "OrganizationUnit": "PaymentCryptography", "Country": "US", "StateOrProvince": "Virginia", "City": "Arlington" }'
{ "CertificateSigningRequest": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." }
CertificateSigningRequest フィールドには、base64 でエンコードされた PEM ファイル全体が含まれます。PEM ファイルには、 マーカー-----BEGIN CERTIFICATE REQUEST-----と -----END CERTIFICATE REQUEST-----マーカーが含まれています。この値を CA に送信して署名します。
ステップ 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 > krd-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://krd-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/fedcba0987654321" }
次に、署名付き証明書を取得します。
例署名付き証明書の取得
$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/fedcba0987654321
{ "Certificate": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----", "CertificateChain": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" }
インポートステップで使用する証明書コンテンツを保存します。証明書を ImportKey API に提供する前に Base64-encodeします。
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 > krd-csr.pem$# Sign the CSR with the CA openssl x509 -req -in krd-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \ -CAcreateserial -out krd-signed-cert.pem -days 365 -sha512
Certificate request self-signature ok subject=C=US, ST=Virginia, L=Arlington, O=Amazon, OU=PaymentCryptography, CN=MyImportKRDCertAWSUSEAST
署名付き証明書が になりましたkrd-signed-cert.pem。ImportKey API に提供する前に、この証明書を Base64-encodeします。
例 Base64 署名付き証明書をエンコードする
$cat krd-signed-cert.pem | base64 -w 0
ステップ 5: CA 証明書をインポートする
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/nqr3c5v2wp6yl8az", "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: 送信システムから KDH 署名証明書を取得する
TR-34 キー交換では、送信側 (キーディストリビューションホスト、または KDH) は署名用のパブリックキー証明書を提供します。この証明書は、インポート中にラップされたキーブロックの署名を検証し、キーマテリアルが信頼できる送信者から送信されたことを確認するために使用されます。本番環境では、この証明書は通常、HSM、支払いターミナル、キー管理システムなどの送信システムから、独自の証明書配布プロセスを通じて取得されます。
この例では、送信者と受信者の両方として AWS Payment Cryptography を使用してステップを短くします。GetParametersForExport を呼び出して、通常は送信システムによって提供される KDH 署名証明書を取得します。
例エクスポートのパラメータを取得する
$aws payment-cryptography-data get-parameters-for-export \ --key-material-type "TR34_KEY_BLOCK" \ --signing-key-algorithm RSA_2048
{ "ExportToken": "export-token-k8sfhe2w9rjy4bx6", "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "SigningKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "SigningKeyAlgorithm": "RSA_2048", "ParametersValidUntilTimestamp": "2025-11-01T18:45:31.271000-07:00" }
インポートステップで使用する SigningKeyCertificate ExportTokenと に注意してください。
ステップ 7: BY" を使用してキーをインポートする
最後に、ImportKeyAPI を使用して独自の CA 署名証明書で TR-34 を使用してキーをインポートします。外部 CA によって署名された KRD 暗号化証明書を指定します。
2 パス TR-34 を使用する場合は、 RandomNonceパラメータが必要です。サービスはノンスを生成しません。これは生成するランダムな 16 進値であり、送信側と受信側の両方で同じである必要があります。1 パス TR-34 (nonce ではなくタイムスタンプに依存する) を使用する場合、タイムスタンプは将来のものであってはなりません。サービスは特定の鮮度 (たとえば、特定の時間内) を検証しませんが、必要に応じて鮮度チェックをユーザー側に適用できます。
例 BY" を使用した TR-34 のインポート
$aws payment-cryptography import-key --key-material='{ "Tr34KeyBlock": { "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/nqr3c5v2wp6yl8az", "KeyBlockFormat": "X9_TR34_2012", "RandomNonce": "4997FBB4587D571F", "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/bm7t4qv8hzk24jce", "WrappedKeyBlock": "D0112B0AX00E0000B82679114F470F540165EDFBF407..." } }'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/gwz7u3rfxd4o52sb", "KeyAttributes": { "KeyUsage": "TR31_K0_KEY_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY", "KeyAlgorithm": "TDES_2KEY", "KeyModesOfUse": { "Encrypt": true, "Decrypt": true } }, "KeyCheckValue": "3DCA31", "KeyCheckValueAlgorithm": "ANSI_X9_24", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "EXTERNAL" } }
これで、キーは AWS Payment Cryptography にインポートされ、使用できるようになります。KeyOrigin フィールドには、キーがサービス外から送信されたEXTERNALことを示します。
追加のメモ
-
これらの例は、AWS CLI を使用して示されています。Java、Python、Go、Rust を含むすべての AWS SDKs で同じ機能を使用できます。
-
自己署名 CA でテストする場合は、OpenSSL を使用してテスト CA を作成し、CSR に署名できます。本番環境では、組織で確立された CA インフラストラクチャを使用します。