

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# BYOCA(Bring Your Own Certificate Authority)
<a name="keyexchange-byoca"></a>

기본적으로 서비스 내에서 생성된 비대칭(RSA,ECC) 키에 퍼블릭 키 인증서가 필요한 경우 이러한 인증서는 AWS Payment Cryptography 및 계정 고유 인증 기관(CA)에서 발급합니다. 이렇게 하면 CA를 식별 또는 설정하거나 인증서 서명 요청(CSR)을 관리할 필요 없이 X.509를 간단하게 사용할 수 있습니다.

AWS Payment Cryptography는 정책 또는 규정 준수 이유로 필요한 경우 자체 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를 사용하면 TR-34 가져오기/내보내기, RSA 언래핑 및 ECDH 키 전송에 자체 CA를 사용할 수 있습니다. 조직 전체에서 일관된 인증서 체인이 필요하거나 파트너에게 특정 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/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) 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/DataAPIReference/API_GetCertificateSigningRequest.html) API를 사용하여 외부 CA가 서명할 인증서 서명 요청(CSR)을 생성합니다. 출력은 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` 필드에는 base64로 인코딩된 전체 PEM 파일이 포함되어 있습니다. 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 Private CA 또는 조직의 설정된 CA 인프라를 사용합니다. 테스트 목적으로 OpenSSL을 사용하여 자체 서명된 인증서를 생성할 수 있습니다.

#### 사용 AWS Private CA
<a name="keyexchange-byoca.sign-csr-pca"></a>

를 사용하여 CSR에 서명하려면 AWS Private CA먼저 base64로 인코딩된 CSR을 디코딩하고 파일에 저장한 다음 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) API를 사용합니다.

**Example 를 사용하여 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"
}
```

그런 다음 서명된 인증서를 검색합니다.

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

내보내기 단계에서 사용할 인증서 콘텐츠를 저장합니다. `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"
    }
}
```

내보내기 단계에서 `KeyArn` 사용할 CA를 기록해 둡니다.

### 6단계: KRD 암호화 인증서 가져오기
<a name="keyexchange-byoca.get-krd"></a>

이 예제에서는 AWS Payment Cryptography로 다시 가져오므로 [GetParametersForImport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForImport.html) API를 사용하여 KRD 퍼블릭 키 인증서를 수신하도록 서비스를 호출합니다. 실제 시나리오에서는 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 API를 사용하여 자체 CA 서명 인증서와 함께 TR-34를 사용하여 키를 내보냅니다. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html) 외부 CA에서 서명한 서명 인증서를 제공합니다.

**Example 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 가져오기 워크플로
<a name="keyexchange-byoca.import-workflow"></a>

다음 단계에서는 TR-34 키 가져오기를 위한 BYOCA 워크플로를 안내합니다. 이 워크플로를 사용하여 자체 CA 서명 KRD(키 수신 디바이스) 암호화 인증서로 AWS Payment Cryptography에 키를 수신합니다. 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>

KRD 암호화 키로 사용할 RSA 키 페어를 생성합니다. 이 키는 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` 필드에는 base64로 인코딩된 전체 PEM 파일이 포함되어 있습니다. 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 Private CA 또는 조직의 설정된 CA 인프라를 사용합니다. 테스트 목적으로 OpenSSL을 사용하여 자체 서명된 인증서를 생성할 수 있습니다.

#### 사용 AWS Private CA
<a name="keyexchange-byoca.import-sign-csr-pca"></a>

를 사용하여 CSR에 서명하려면 AWS Private CA먼저 base64로 인코딩된 CSR을 디코딩하고 파일에 저장한 다음 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) API를 사용합니다.

**Example 를 사용하여 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"
}
```

그런 다음 서명된 인증서를 검색합니다.

**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에 제공하기 전에이 인증서를 Base64-encode합니다.

**Example Base64 서명된 인증서 인코딩**  

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

### 5단계: CA 인증서 가져오기
<a name="keyexchange-byoca.import-ca"></a>

CA를 사용하기 전에 먼저 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 Payment Cryptography를 발신자와 수신자 모두로 사용하여 단계를 짧게 유지합니다. [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"
}
```

가져오기 단계에서 사용할 수 `SigningKeyCertificate` 있도록 `ExportToken` 및를 기록해 둡니다.

### 7단계: BYOCA로 키 가져오기
<a name="keyexchange-byoca.import-key"></a>

마지막으로 `ImportKey` API를 사용하여 자체 CA 서명 인증서와 함께 TR-34를 사용하여 키를 가져옵니다. 외부 CA에서 서명한 KRD 암호화 인증서를 제공합니다.

`RandomNonce` 파라미터는 2-pass TR-34를 사용할 때 필요합니다. 서비스는 넌스를 생성하지 않습니다. 이는 사용자가 생성하는 임의의 16진수 값이며 전송 및 수신 측 모두에서 동일해야 합니다. 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 Payment Cryptography로 가져와 사용할 준비가 되었습니다. `KeyOrigin` 필드는 서비스 외부에서 키가 왔`EXTERNAL`음을 나타냅니다.

## 추가 참고 사항:
<a name="keyexchange-byoca.notes"></a>
+ 이 예제는 AWS CLI를 사용하여 표시됩니다. Java, Python, Go, Rust를 포함한 모든 AWS SDKs에서 동일한 기능을 사용할 수 있습니다.
+ 자체 서명된 CA로 테스트하는 경우 OpenSSL을 사용하여 테스트 CA를 생성하고 CSR에 서명할 수 있습니다. 프로덕션 환경에서는 조직의 설정된 CA 인프라를 사용합니다.