本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自攜憑證授權機構 (BYOCA)
根據預設,當服務內建立的非對稱 (RSA,ECC) 金鑰需要公有金鑰憑證時,這些憑證是由 AWS 付款密碼編譯和帳戶唯一憑證授權機構 (CA) 發行。這是為了讓您更輕鬆地使用 X.509,而無須負擔識別或設定 CA 或管理憑證簽署請求 (CSR) 的負擔。
AWS 當基於政策或合規原因而需要時,付款密碼編譯也可讓您使用自己的 CA。
概觀
透過 BYOCA,您可以使用自己的 CA 進行 TR-34 匯入/匯出、RSA Unwrap 和 ECDH 金鑰傳輸。當您需要整個組織的一致憑證鏈,或合作夥伴需要特定的 CA 憑證時,請使用 BYOCA。下列範例顯示 TR-34 金鑰匯出和 TR-34 金鑰匯入的 BYOCA 工作流程。
標準 TR-34 流程有三個主要差異:
-
您可以使用 CreateKey 建立 RSA 金鑰。在 之前,
GetParametersForExport或 為您GetParametersForImport建立它。 -
GetCertificateSigningRequest API 會建立 CSR。然後,您的外部 CA 可以簽署它。
重要考量
-
這些範例使用 RSA-2048 金鑰並包裝 TDES-2KEY 金鑰。匯出 AES-128 時,請確定所有金鑰都是 RSA-3072 或 RSA-4096。
-
最常見的錯誤是 表示的索引鍵
SigningKeyIdentifier與SigningKeyCertificate不相符。
BYOCA 匯出工作流程
下列步驟示範 TR-34 匯出的完整 BYOCA 工作流程。
步驟
步驟 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:產生憑證簽署請求
產生由外部 CA 使用 GetCertificateSigningRequest API 簽署的憑證簽署請求 (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 欄位包含整個 PEM 檔案 base64 編碼。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 私有 CA 或組織已建立的 CA 基礎設施。基於測試目的,您可以使用 OpenSSL 建立自我簽署憑證。
使用 AWS 私有 CA
若要使用 簽署 CSR AWS 私有 CA,請先解碼 base64 編碼的 CSR,並將其儲存至檔案,然後使用 IssueCertificate API。
範例使用 簽署 CSR AWS 私有 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-----" }
儲存憑證內容以用於匯出步驟。將 Base64 提供給 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" } }
請記下 CA 在匯出步驟KeyArn中使用的 。
步驟 6:取得 KRD 加密憑證
在此範例中,我們將匯入回 AWS 付款密碼編譯,因此我們呼叫 服務,使用 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:使用 BYOCA 匯出金鑰
最後,使用 ExportKey API 搭配您自己的 CA 簽署憑證使用 TR-34 匯出金鑰。 ExportKey 提供外部 CA 簽署的簽署憑證。
範例使用 BYOCA 匯出 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 匯入程序來匯入。
BYOCA 匯入工作流程
下列步驟會逐步引導您完成 TR-34 金鑰匯入的 BYOCA 工作流程。使用此工作流程,透過您自己的 CA 簽署 KRD (金鑰接收裝置) 加密憑證,接收 AWS 付款密碼編譯中的金鑰。透過 BYOCA 匯入,您可以使用您已管理的 CA 來控制信任鏈。
步驟
步驟 1:建立 RSA 金鑰
建立 RSA 金鑰對以用作 KRD 加密金鑰。此金鑰會在 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 欄位包含整個 PEM 檔案 base64 編碼。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 私有 CA 或組織已建立的 CA 基礎設施。基於測試目的,您可以使用 OpenSSL 建立自我簽署憑證。
使用 AWS 私有 CA
若要使用 簽署 CSR AWS 私有 CA,請先解碼 base64 編碼的 CSR 並將其儲存至檔案,然後使用 IssueCertificate API。
範例使用 簽署 CSR AWS 私有 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。Base64-encode: ImportKey
範例 Base64 編碼已簽署的憑證
$cat krd-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/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" } }
請注意 CA KeyArn用於匯入步驟。
步驟 6:從傳送系統取得 KDH 簽署憑證
在 TR-34 金鑰交換中,傳送端 (金鑰分佈主機或 KDH) 提供其公有金鑰憑證以供簽署。此憑證用於在匯入期間驗證包裝金鑰區塊上的簽章,以確保金鑰材料來自信任的寄件者。在生產環境中,此憑證通常來自傳送系統,例如 HSM、付款終端機或金鑰管理系統,透過其自己的憑證分佈程序。
在此範例中,您會使用 AWS 付款密碼編譯做為寄件者和接收者,讓步驟保持簡短。呼叫 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" }
請注意 ExportToken和 SigningKeyCertificate,以便在匯入步驟中使用。
步驟 7:使用 BYOCA 匯入金鑰
最後,使用 TR-34 匯入金鑰,並使用 ImportKey API 搭配您自己的 CA 簽署憑證。提供外部 CA 簽署的 KRD 加密憑證。
使用 2-pass TR-34 時需要 RandomNonce 參數。服務不會為您產生 nonce - 這是您產生的隨機十六進位值,而且在傳送端和接收端上必須相同。使用 1-pass TR-34 (依賴時間戳記而非 nonce) 時,時間戳記不得為未來的時間。服務不會驗證任何特定新鮮度 (例如,在特定時數內),但您可以視需要對您強制執行新鮮度檢查。
範例使用 BYOCA 匯入 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 付款密碼編譯並可供使用。KeyOrigin 欄位會顯示 ,EXTERNAL指出金鑰來自服務外部。
其他備註
-
這些範例使用 AWS CLI 顯示。相同的功能適用於所有 AWS SDKs,包括 Java、Python、Go 和 Rust。
-
如果您使用自我簽署 CA 進行測試,您可以使用 OpenSSL 來建立測試 CA 並簽署 CSR。在生產環境中,使用組織已建立的 CA 基礎設施。