

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自带证书颁发机构 (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 import/export、RSA Unwrap 和 ECDH 密钥传输。当您需要在整个组织中建立一致的证书链或合作伙伴需要特定的 CA 证书时，请使用 BYOCA。以下示例显示了 TR-34 密钥导出和 TR-34 密钥导入的 BYOCA 工作流程。

与标准 TR-34 流程有三个主要区别：

1. 您可以使用创建 RSA 密钥。[ CreateKey ](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)之前，`GetParametersForExport`或者为你`GetParametersForImport`创建了它。

1. 该 [ GetCertificateSigningRequest ](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html) API 会创建 CSR。然后，您的外部 CA 可以对其进行签名。

1. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)和 [ ImportKey ](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) API 在通话时接受证书。该令牌现在是可选的。

**重要注意事项**  
这些示例使用 RSA-2048 密钥并封装密 TDES-2KEY 钥。导出时 AES-128，请确保所有密钥均为 RSA-3072 或 RSA-4096。
最常见的错误是`SigningKeyIdentifier`和表示的密钥`SigningKeyCertificate`不匹配。

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

以下步骤演示了完整的 BYOCA TR-34 导出工作流程。

**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>

生成证书签名请求 (CSR)，由您的外部 CA 使用 [ GetCertificateSigningRequest ](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html) API 签署。输出是一个 base64 编码的 PEM 文件。如果您使用 base64 对内容进行解码并保存它们，则将获得 PEM 格式的有效 CSR。

**Example 生成 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（可选）
<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 并将其保存到文件中，然后使用 API。[ IssueCertificate ](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)

**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-----"
}
```

保存证书内容以供导出步骤使用。在将其提供给 API 时，您需要对其进行 base64 编码。`ExportKey`

#### 使用 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`。将此证书提供给 API 时，您需要对该证书进行 base64 编码：`ExportKey`

**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"
    }
}
```

记下导出步骤中使用的 `KeyArn` CA。

### 第 6 步：获取 KRD 加密证书
<a name="keyexchange-byoca.get-krd"></a>

在此示例中，我们将导回 AWS 支付加密系统，因此我们调用该服务以使用 API 接收 KRD 公钥证书。[ GetParametersForImport ](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForImport.html)在实际场景中，这将由其他系统提供，例如HSM、ATM、支付终端或支付终端管理系统。

**Example 获取导入的参数**  

```
$ 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 导出密钥
<a name="keyexchange-byoca.export-key"></a>

最后，使用 [ ExportKey ](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html) API 将密钥 TR-34 与您自己的 CA-signed 证书一起导出。提供由您的外部 CA 签名的签名证书。

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

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

以下步骤将引导您完成 TR-34 密钥导入的 BYOCA 工作流程。使用此工作流程使用您自己的 CA-signed 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/DataAPIReference/API_GetCertificateSigningRequest.html) API 为 KRD 加密密钥生成证书签名请求 (CSR)。输出是一个 base64 编码的 PEM 文件。如果您使用 base64 对内容进行解码并保存它们，则将获得 PEM 格式的有效 CSR。

**Example 为 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（可选）
<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 并将其保存到文件中，然后使用 API。[ IssueCertificate ](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)

**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-----"
}
```

保存证书内容以供导入步骤使用。 Base64-encode 将其提供给 `ImportKey` API 之前的证书。

#### 使用 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`。 Base64-encode 在向 `ImportKey` API 提供此证书之前：

**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"
    }
}
```

记下导入步骤中使用的 `KeyArn` CA。

### 第 6 步：从发送系统获取 KDH 签名证书
<a name="keyexchange-byoca.import-get-kdh"></a>

在 TR-34 密钥交换中，发送方（密钥分发主机或 KDH）提供其公钥证书以供签名。此证书用于在导入期间验证封装密钥块上的签名，确保密钥材料来自可信发件人。在生产中，该证书通常通过其自己的证书分发流程来自发送系统，例如 HSM、支付终端或密钥管理系统。

在本示例中，您使用 AWS 支付加密作为发送方和接收方，以简化步骤。[GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForExport.html)致电获取通常由发送系统提供的 KDH 签名证书。

**Example 获取导出参数**  

```
$ 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 导入密钥
<a name="keyexchange-byoca.import-key"></a>

最后，使用 `ImportKey` API 将密钥 TR-34 与您自己的 CA-signed 证书一起导入。提供由您的外部 CA 签署的 KRD 加密证书。

使用 2-pass TR-34 时，该`RandomNonce`参数是必需的。该服务不会为您生成随机数，它是您生成的随机十六进制值，发送端和接收端必须相同。使用 1-pass TR-34 （依赖于时间戳而不是随机数）时，时间戳不得在将来。该服务不会验证任何特定的新鲜度（例如，在一定小时内），但您可以根据需要强制执行新鲜度检查。

**Example TR-34 使用 BYOCA 导入**  

```
$ 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 开发工具包都提供相同的功能，包括 Java、Python、Go 和 Rust。
+ 如果您使用自签名的 CA 进行测试，则可以使用 OpenSSL 创建测试 CA 并签署 CSR。在生产中，使用贵组织已建立的 CA 基础架构。