自攜憑證授權機構 (BYOCA) - AWS 付款密碼編譯

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自攜憑證授權機構 (BYOCA)

根據預設,當服務內建立的非對稱 (RSA,ECC) 金鑰需要公有金鑰憑證時,這些憑證是由 AWS 付款密碼編譯和帳戶唯一憑證授權機構 (CA) 發行。這是為了讓您更輕鬆地使用 X.509,而無須負擔識別或設定 CA 或管理憑證簽署請求 (CSR) 的負擔。

AWS 當基於政策或合規原因而需要時,付款密碼編譯也可讓您使用自己的 CA。

概觀

BYOCA 功能可讓您在使用憑證的任何位置使用自己的憑證授權機構,包括 TR-34 匯入/匯出、RSA Unwrap 和 ECDH 型金鑰傳輸。當您需要在整個組織中維持一致的憑證鏈,或與需要特定 CA 憑證的合作夥伴合作時,這非常有用。下列範例示範使用 TR-34 金鑰匯出的 BYOCA 工作流程。

相較於標準 TR-34 匯出流程的三個主要差異如下:

  1. 使用 CreateKey 明確建立簽署 RSA 金鑰。先前透過 GetParametersForExport 隱含建立。

  2. 新的 API GetCertificateSigningRequest 會建立可由外部 CA 簽署的憑證簽署請求 (CSR)。

  3. ExportKey API 會擴展為允許在執行時間提供憑證。先前,這是由 隱含提供的import-token,這會成為選用欄位。

重要考量
  • 這些範例使用 RSA-2048 金鑰並包裝 TDES-2KEY 金鑰。匯出 AES-128 時,請確定所有金鑰都是 RSA-3072 或 RSA-4096。

  • 最常見的錯誤是 表示的金鑰SigningKeyIdentifierSigningKeyCertificate 不相符。

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:產生憑證簽署請求

使用 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 私有 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 匯入程序來匯入。

其他備註

  • 這些範例使用 AWS CLI 顯示。相同的功能適用於所有 AWS SDKs,包括 Java、Python、Go 和 Rust。

  • 如果您使用自我簽署 CA 進行測試,您可以使用 OpenSSL 來建立測試 CA 並簽署 CSR。在生產環境中,使用您組織已建立的 CA 基礎設施。