

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

# 自攜憑證授權機構 (BYOCA)
<a name="keyexchange-byoca"></a>

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

AWS 付款密碼編譯也可在政策或合規原因需要時使用您自己的 CA。

**Topics**
+ [概觀](#keyexchange-byoca.overview)
+ [BYOCA 匯出工作流程](#keyexchange-byoca.export-workflow)
+ [BYOCA 匯入工作流程](#keyexchange-byoca.import-workflow)
+ [其他備註](#keyexchange-byoca.notes)

## 概觀
<a name="keyexchange-byoca.overview"></a>

透過 BYOCA，您可以使用自己的 CA 進行 TR-34 匯入/匯出、RSA Unwrap 和 ECDH 金鑰傳輸。當您需要整個組織的一致憑證鏈，或合作夥伴需要特定的 CA 憑證時，請使用 BYOCA。下列範例顯示 TR-34 金鑰匯出和 TR-34 金鑰匯入的 BYOCA 工作流程。

標準 TR-34 流程有三個主要差異：

1. 您可以使用 [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html) 建立 RSA 金鑰。在 之前，`GetParametersForExport`或 為您`GetParametersForImport`建立它。

1. [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetCertificateSigningRequest.html) API 會建立 CSR。然後，您的外部 CA 可以簽署它。

1. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html) 和 [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) APIs呼叫時接受憑證。字符現在是選用的。

**重要考量**  
這些範例使用 RSA-2048 金鑰並包裝 TDES-2KEY 金鑰。匯出 AES-128 時，請確定所有金鑰都是 RSA-3072 或 RSA-4096。
最常見的錯誤是 表示的金鑰`SigningKeyIdentifier`與 `SigningKeyCertificate` 不相符。

## BYOCA 匯出工作流程
<a name="keyexchange-byoca.export-workflow"></a>

下列步驟示範 TR-34 匯出的完整 BYOCA 工作流程。

**Topics**
+ [步驟 1：建立 RSA 金鑰](#keyexchange-byoca.create-rsa)
+ [步驟 2：產生憑證簽署請求](#keyexchange-byoca.generate-csr)
+ [步驟 3：檢閱 CSR （選用）](#keyexchange-byoca.review-csr)
+ [步驟 4：使用憑證授權單位簽署 CSR](#keyexchange-byoca.sign-csr)
+ [步驟 5：匯入 CA 憑證](#keyexchange-byoca.import-ca)
+ [步驟 6：取得 KRD 加密憑證](#keyexchange-byoca.get-krd)
+ [步驟 7：使用 BYOCA 匯出金鑰](#keyexchange-byoca.export-key)

### 步驟 1：建立 RSA 金鑰
<a name="keyexchange-byoca.create-rsa"></a>

首先，建立最終將成為 KDH 簽署憑證的 RSA 金鑰對。您可以新增標籤來識別金鑰的用途。

**Example 建立用於簽署的 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：產生憑證簽署請求
<a name="keyexchange-byoca.generate-csr"></a>

使用 [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetCertificateSigningRequest.html) API 產生由外部 CA 簽署的憑證簽署請求 (CSR)。輸出是 base64 編碼的 PEM 檔案。如果您 base64 解碼內容並儲存，您將擁有 PEM 格式的有效 CSR。

**Example 產生 CSR**  

```
$ aws payment-cryptography 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 （選用）
<a name="keyexchange-byoca.review-csr"></a>

您可以選擇性地使用 OpenSSL 來檢閱 CSR 內容，並確保其有效且如預期。

**Example 使用 OpenSSL 檢閱 CSR**  

```
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text
```

### 步驟 4：使用憑證授權單位簽署 CSR
<a name="keyexchange-byoca.sign-csr"></a>

產生 CSR 後，您需要由憑證授權機構 (CA) 簽署。在生產環境中，您通常會使用 AWS 私有 CA 或組織已建立的 CA 基礎設施。基於測試目的，您可以使用 OpenSSL 建立自我簽署憑證。

#### 使用 AWS 私有 CA
<a name="keyexchange-byoca.sign-csr-pca"></a>

若要使用 簽署 CSR AWS 私有 CA，請先解碼 base64 編碼的 CSR 並將其儲存至檔案，然後使用 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) API。

**Example 使用 簽署 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"
}
```

然後擷取已簽章的憑證：

**Example 擷取已簽署憑證**  

```
$ 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 進行測試
<a name="keyexchange-byoca.sign-csr-openssl"></a>

基於測試目的，您可以使用 OpenSSL 建立自我簽署 CA 並簽署 CSR。首先，建立 CA 私有金鑰和自我簽署憑證：

**Example 使用 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 簽署：

**Example 使用 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 編碼：

**Example Base64 編碼已簽署的憑證**  

```
$ cat signed-cert.pem | base64 -w 0
```

### 步驟 5：匯入 CA 憑證
<a name="keyexchange-byoca.import-ca"></a>

必須先信任使用中的任何 CA，以防止使用任意憑證。使用 [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) API 匯入外部 CA 的根憑證。如果使用中繼 CA，請`import-key`再次呼叫 ，但請指定 `TrustedPublicKey`而非 `RootCertificatePublicKey`，並指定根 CA ARN。

**Example 匯入根 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 加密憑證
<a name="keyexchange-byoca.get-krd"></a>

在此範例中，我們將匯入回 AWS 付款密碼編譯，因此我們呼叫 服務，使用 [GetParametersForImport](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html) API 接收 KRD 公有金鑰憑證。在實際情況下，這將由其他系統提供，例如 HSM、ATM、付款終端機或付款終端機管理系統。

**Example 取得用於匯入的參數**  

```
$ aws payment-cryptography 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 匯出金鑰
<a name="keyexchange-byoca.export-key"></a>

最後，使用 ExportKey API 搭配您自己的 CA 簽署憑證使用 TR-34 匯出金鑰。 [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html) 提供外部 CA 簽署的簽署憑證。

**Example 使用 BYOCA 匯出 TR-34**  

```
$ aws payment-cryptography 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 匯入工作流程
<a name="keyexchange-byoca.import-workflow"></a>

下列步驟會逐步引導您完成 TR-34 金鑰匯入的 BYOCA 工作流程。使用此工作流程，透過您自己的 CA 簽署 KRD （金鑰接收裝置） 加密憑證，接收 AWS 付款密碼編譯中的金鑰。透過 BYOCA 匯入，您可以使用您已管理的 CA 來控制信任鏈。

**Topics**
+ [步驟 1：建立 RSA 金鑰](#keyexchange-byoca.import-create-rsa)
+ [步驟 2：產生憑證簽署請求](#keyexchange-byoca.import-generate-csr)
+ [步驟 3：檢閱 CSR （選用）](#keyexchange-byoca.import-review-csr)
+ [步驟 4：使用憑證授權單位簽署 CSR](#keyexchange-byoca.import-sign-csr)
+ [步驟 5：匯入 CA 憑證](#keyexchange-byoca.import-ca)
+ [步驟 6：從傳送系統取得 KDH 簽署憑證](#keyexchange-byoca.import-get-kdh)
+ [步驟 7：使用 BYOCA 匯入金鑰](#keyexchange-byoca.import-key)

### 步驟 1：建立 RSA 金鑰
<a name="keyexchange-byoca.import-create-rsa"></a>

建立 RSA 金鑰對以用作 KRD 加密金鑰。此金鑰會在 TR-34 匯入期間取消包裝並解密傳入的金鑰。金鑰不可匯出，因為它會保留在服務內做為接收金鑰。

**Example 建立 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：產生憑證簽署請求
<a name="keyexchange-byoca.import-generate-csr"></a>

使用 [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetCertificateSigningRequest.html) API 產生 KRD 加密金鑰的憑證簽署請求 (CSR)。輸出是 base64 編碼的 PEM 檔案。如果您 base64 解碼內容並儲存，您將擁有 PEM 格式的有效 CSR。

**Example 產生 KRD 金鑰的 CSR**  

```
$ aws payment-cryptography 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 （選用）
<a name="keyexchange-byoca.import-review-csr"></a>

您可以選擇性地使用 OpenSSL 來檢閱 CSR 內容，並確保其有效且如預期。

**Example 使用 OpenSSL 檢閱 CSR**  

```
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text
```

### 步驟 4：使用憑證授權單位簽署 CSR
<a name="keyexchange-byoca.import-sign-csr"></a>

產生 CSR 後，請由憑證授權機構 (CA) 簽署。在生產環境中，您通常會使用 AWS 私有 CA 或組織已建立的 CA 基礎設施。基於測試目的，您可以使用 OpenSSL 建立自我簽署憑證。

#### 使用 AWS 私有 CA
<a name="keyexchange-byoca.import-sign-csr-pca"></a>

若要使用 簽署 CSR AWS 私有 CA，請先解碼 base64 編碼的 CSR，並將其儲存至檔案，然後使用 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) API。

**Example 使用 簽署 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"
}
```

然後擷取已簽章的憑證：

**Example 擷取已簽署憑證**  

```
$ 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 進行測試
<a name="keyexchange-byoca.import-sign-csr-openssl"></a>

基於測試目的，您可以使用 OpenSSL 建立自我簽署 CA 並簽署 CSR。首先，建立 CA 私有金鑰和自我簽署憑證：

**Example 使用 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 簽署：

**Example 使用 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 之前，先對 BaseBase64-encode：

**Example Base64 編碼已簽署的憑證**  

```
$ cat krd-signed-cert.pem | base64 -w 0
```

### 步驟 5：匯入 CA 憑證
<a name="keyexchange-byoca.import-ca"></a>

在使用 CA 之前，您必須先信任它。使用 [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) API 匯入外部 CA 的根憑證。如果使用中繼 CA，請`import-key`再次呼叫 ，但請指定 `TrustedPublicKey`而非 `RootCertificatePublicKey`，並指定根 CA ARN。

**Example 匯入根 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 簽署憑證
<a name="keyexchange-byoca.import-get-kdh"></a>

在 TR-34 金鑰交換中，傳送端 （金鑰分佈主機或 KDH) 提供其公有金鑰憑證以供簽署。此憑證用於在匯入期間驗證包裝金鑰區塊上的簽章，以確保金鑰材料來自信任的寄件者。在生產環境中，此憑證通常來自傳送系統，例如 HSM、付款終端機或金鑰管理系統，透過自己的憑證分佈程序。

在此範例中，您會使用 AWS 付款密碼編譯做為寄件者和接收者，讓步驟保持簡短。呼叫 [GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html) 以取得傳送系統通常提供的 KDH 簽署憑證。

**Example 取得匯出的參數**  

```
$ aws payment-cryptography 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 匯入金鑰
<a name="keyexchange-byoca.import-key"></a>

最後，使用 TR-34 匯入金鑰，並使用 `ImportKey` API 搭配您自己的 CA 簽署憑證。提供外部 CA 簽署的 KRD 加密憑證。

使用 2-pass TR-34 時需要 `RandomNonce` 參數。服務不會為您產生 nonce - 這是您產生的隨機十六進位值，而且在傳送端和接收端上必須相同。使用 1-pass TR-34 （依賴時間戳記而非 nonce) 時，時間戳記不得為未來的時間。服務不會驗證任何特定新鮮度 （例如，在特定時數內），但您可以視需要對您強制執行新鮮度檢查。

**Example 使用 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`指出金鑰來自服務外部。

## 其他備註
<a name="keyexchange-byoca.notes"></a>
+ 這些範例使用 AWS CLI 顯示。相同的功能適用於所有 AWS SDKs，包括 Java、Python、Go 和 Rust。
+ 如果您使用自我簽署 CA 進行測試，您可以使用 OpenSSL 來建立測試 CA 並簽署 CSR。在生產環境中，使用您組織已建立的 CA 基礎設施。