

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

デフォルトでは、サービス内で作成された非対称 (RSA,ECC) キーにパブリックキー証明書が必要な場合、これらの証明書は AWS Payment Cryptography とアカウント固有の認証機関 (CA) によって発行されます。これは、CA を特定または設定したり、証明書署名リクエスト (CSR) を管理したりすることなく、X.509 を簡単に使用できるようにすることを目的としています。

AWS Payment Cryptography では、ポリシーまたはコンプライアンスの理由で必要なときに、独自の CA を使用することもできます。

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

BY" 機能を使用すると、TR-34 インポート/エクスポート、RSA Unwrap、ECDH ベースのキー転送など、証明書が使用されている任意の場所で独自の認証機関を使用できます。これは、組織全体で一貫した証明書チェーンを維持する必要がある場合や、特定の CA 証明書を必要とするパートナーと連携する場合に便利です。次の例は、TR-34 キーエクスポートを使用した BY" ワークフローを示しています。

標準の TR-34 エクスポートフローとの主な違いは次のとおりです。

1. 署名 RSA キーは [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html) を使用して明示的に作成されます。以前は、[GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForExport.html) を介して暗黙的に作成されていました。

1. 新しい API [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html) は、外部 CA によって署名できる Certificate Signing Request (CSR) を作成します。

1. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html) API は、実行時に証明書を提供できるように拡張されています。以前は、これは暗黙的に によって提供され`import-token`ていました。これはオプションフィールドになります。

**重要な考慮事項**  
これらの例では、RSA-2048 キーを使用して TDES-2KEY キーをラップします。AES-128 をエクスポートするときは、すべてのキーが RSA-3072 または RSA-4096 であることを確認します。
最も一般的なエラーは、 `SigningKeyIdentifier`と で表されるキー`SigningKeyCertificate`が一致しないことです。

## BY" ワークフロー
<a name="keyexchange-byoca.workflow"></a>

次の手順は、TR-34 エクスポートの完全な BY" ワークフローを示しています。

**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: BY" を使用してキーをエクスポートする](#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` フィールドには、署名のために CA に送信する base64 エンコードされた CSR が含まれています。

### ステップ 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/acm-pca/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: BY" を使用してキーをエクスポートする
<a name="keyexchange-byoca.export-key"></a>

最後に、TR-34 を使用してキーをエクスポートし、[ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html) API を使用して独自の CA 署名証明書をエクスポートします。外部 CA によって署名された署名証明書を指定します。

**Example BY" を使用した 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 インポートプロセスを使用して受信システムによってインポートできるようになりました。

## 追加のメモ
<a name="keyexchange-byoca.notes"></a>
+ これらの例は、AWS CLI を使用して示されています。Java、Python、Go、Rust を含むすべての AWS SDKs で同じ機能を使用できます。
+ 自己署名 CA でテストする場合は、OpenSSL を使用してテスト CA を作成し、CSR に署名できます。本番環境では、組織で確立された CA インフラストラクチャを使用します。