

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bawa Otoritas Sertifikat Sendiri (BYOCA)
<a name="keyexchange-byoca"></a>

Secara default, ketika sertifikat kunci publik diperlukan untuk kunci asimetris (RSA, ECC) yang dibuat dalam layanan, sertifikat ini dikeluarkan oleh Kriptografi AWS Pembayaran dan otoritas sertifikat unik akun (CA). Ini dimaksudkan untuk membuatnya mudah digunakan X.509 tanpa beban mengidentifikasi atau menyiapkan CA atau mengelola Permintaan Penandatanganan Sertifikat (CSR).

AWS Kriptografi Pembayaran juga menyediakan kemampuan untuk menggunakan CA Anda sendiri ketika diperlukan karena alasan kebijakan atau kepatuhan.

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

Fitur BYOCA memungkinkan Anda untuk menggunakan Otoritas Sertifikat Anda sendiri di mana pun sertifikat digunakan, termasuk, RSA Unwrap TR-34 import/export, dan transfer kunci. ECDH-based Ini berguna ketika Anda perlu mempertahankan rantai sertifikat yang konsisten di seluruh organisasi Anda atau ketika bekerja dengan mitra yang memerlukan sertifikat CA tertentu. Contoh berikut menunjukkan alur kerja BYOCA menggunakan ekspor kunci. TR-34 

Tiga perbedaan utama dibandingkan dengan aliran TR-34 ekspor standar adalah:

1. Kunci RSA penandatanganan secara eksplisit dibuat menggunakan. [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html) Sebelumnya, itu secara implisit dibuat melalui. [GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForExport.html)

1. API baru [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)membuat Certificate Signing Request (CSR) yang dapat ditandatangani oleh CA eksternal Anda.

1. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)API diperluas untuk memungkinkan sertifikat disediakan saat runtime. Sebelumnya, ini secara implisit disediakan oleh`import-token`, yang menjadi bidang opsional.

**Pertimbangan Penting**  
Contoh-contoh ini menggunakan RSA-2048 kunci dan membungkus TDES-2KEY kunci. Saat mengekspor AES-128, pastikan bahwa semua kunci adalah RSA-3072 atau RSA-4096.
Kesalahan yang paling umum adalah bahwa kunci diwakili oleh `SigningKeyIdentifier` dan `SigningKeyCertificate` tidak cocok.

## Alur Kerja BYOCA
<a name="keyexchange-byoca.workflow"></a>

Langkah-langkah berikut menunjukkan alur kerja BYOCA lengkap untuk ekspor. TR-34 

**Topics**
+ [Langkah 1: Buat Kunci RSA](#keyexchange-byoca.create-rsa)
+ [Langkah 2: Hasilkan Permintaan Penandatanganan Sertifikat](#keyexchange-byoca.generate-csr)
+ [Langkah 3: Tinjau CSR (Opsional)](#keyexchange-byoca.review-csr)
+ [Langkah 4: Tanda tangani CSR dengan Otoritas Sertifikat](#keyexchange-byoca.sign-csr)
+ [Langkah 5: Impor Sertifikat CA](#keyexchange-byoca.import-ca)
+ [Langkah 6: Dapatkan Sertifikat Enkripsi KRD](#keyexchange-byoca.get-krd)
+ [Langkah 7: Kunci Ekspor dengan BYOCA](#keyexchange-byoca.export-key)

### Langkah 1: Buat Kunci RSA
<a name="keyexchange-byoca.create-rsa"></a>

Pertama, buat Pasangan Kunci RSA yang pada akhirnya akan menjadi Sertifikat Penandatanganan KDH. Anda dapat menambahkan tag untuk mengidentifikasi tujuan kunci.

**Example Buat Kunci RSA untuk Penandatanganan**  

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

Catat `KeyArn` karena Anda akan membutuhkannya di langkah berikutnya.

### Langkah 2: Hasilkan Permintaan Penandatanganan Sertifikat
<a name="keyexchange-byoca.generate-csr"></a>

Buat Permintaan Penandatanganan Sertifikat (CSR) untuk ditandatangani oleh CA eksternal Anda menggunakan [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)API. Outputnya adalah file PEM yang dikodekan base64. Jika Anda base64 memecahkan kode konten dan menyimpannya, Anda akan memiliki CSR yang valid dalam format PEM.

**Example Hasilkan 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`Kolom berisi CSR berenkode base64 yang akan Anda kirim ke CA untuk ditandatangani.

### Langkah 3: Tinjau CSR (Opsional)
<a name="keyexchange-byoca.review-csr"></a>

Anda dapat secara opsional menggunakan OpenSSL untuk meninjau konten CSR dan memastikannya valid dan seperti yang diharapkan.

**Example Tinjau CSR dengan OpenSSL**  

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

### Langkah 4: Tanda tangani CSR dengan Otoritas Sertifikat
<a name="keyexchange-byoca.sign-csr"></a>

Setelah membuat CSR, Anda harus menandatanganinya oleh Certificate Authority (CA). Dalam lingkungan produksi, Anda biasanya akan menggunakan AWS Private CA atau infrastruktur CA yang didirikan organisasi Anda. Untuk tujuan pengujian, Anda dapat menggunakan OpenSSL untuk membuat sertifikat yang ditandatangani sendiri.

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

Untuk menandatangani CSR menggunakan AWS Private CA, pertama-tama dekode CSR yang dikodekan base64 dan simpan ke file, lalu gunakan API. [IssueCertificate](https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html)

**Example Menandatangani CSR dengan 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"
}
```

Kemudian ambil sertifikat yang ditandatangani:

**Example Ambil Sertifikat yang Ditandatangani**  

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

Simpan konten sertifikat untuk digunakan dalam langkah ekspor. Anda harus mengkodekannya dengan base64 saat menyediakannya ke API. `ExportKey`

#### Menggunakan OpenSSL untuk Pengujian
<a name="keyexchange-byoca.sign-csr-openssl"></a>

Untuk tujuan pengujian, Anda dapat menggunakan OpenSSL untuk membuat CA yang ditandatangani sendiri dan menandatangani CSR. Pertama, buat kunci pribadi CA dan sertifikat yang ditandatangani sendiri:

**Example Buat Test CA dengan OpenSSL**  

```
$ # 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"
```

Kemudian dekode CSR dari langkah sebelumnya dan tandatangani dengan CA pengujian Anda:

**Example Menandatangani CSR dengan OpenSSL**  

```
$ # 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
```

Sertifikat yang ditandatangani sekarang masuk`signed-cert.pem`. Anda harus meng-base64-encode sertifikat ini saat memberikannya ke API: `ExportKey`

**Example Base64 Mengkodekan Sertifikat yang Ditandatangani**  

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

### Langkah 5: Impor Sertifikat CA
<a name="keyexchange-byoca.import-ca"></a>

Setiap CA yang digunakan harus dipercaya terlebih dahulu untuk mencegah sertifikat arbitrer digunakan. Impor sertifikat root CA eksternal Anda menggunakan [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)API. Jika menggunakan CA perantara, panggil `import-key` lagi tetapi tentukan `TrustedPublicKey` alih-alih `RootCertificatePublicKey` dan tentukan root CA ARN.

**Example Impor Sertifikat Root 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"
    }
}
```

Catat CA `KeyArn` untuk digunakan dalam langkah ekspor.

### Langkah 6: Dapatkan Sertifikat Enkripsi KRD
<a name="keyexchange-byoca.get-krd"></a>

Dalam contoh ini, kami mengimpor kembali ke Kriptografi AWS Pembayaran, jadi kami memanggil layanan untuk menerima sertifikat kunci publik KRD menggunakan API. [GetParametersForImport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForImport.html) Dalam skenario nyata, ini akan disediakan oleh sistem lain, seperti HSM, ATM, terminal pembayaran atau sistem manajemen terminal pembayaran.

**Example Dapatkan Parameter untuk Impor**  

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

### Langkah 7: Kunci Ekspor dengan BYOCA
<a name="keyexchange-byoca.export-key"></a>

Terakhir, ekspor kunci menggunakan TR-34 CA-signed sertifikat Anda sendiri menggunakan [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)API. Berikan sertifikat penandatanganan yang ditandatangani oleh CA eksternal Anda.

**Example TR-34 Ekspor dengan 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"
    }
}
```

Blok kunci yang diekspor sekarang dapat diimpor oleh sistem penerima menggunakan proses TR-34 impor standar.

## Catatan Tambahan
<a name="keyexchange-byoca.notes"></a>
+ Contoh-contoh ini ditampilkan menggunakan AWS CLI. Fungsionalitas yang sama tersedia di semua AWS SDK termasuk Java, Python, Go, dan Rust.
+ Jika Anda menguji dengan CA yang ditandatangani sendiri, Anda dapat menggunakan OpenSSL untuk membuat CA pengujian dan menandatangani CSR. Dalam produksi, gunakan infrastruktur CA yang sudah mapan organisasi Anda.