

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

Per impostazione predefinita, quando è necessario un certificato a chiave pubblica per le chiavi asimmetriche (RSA, ECC) create all'interno del servizio, questi certificati vengono emessi da una AWS Payment Cryptography e da un'autorità di certificazione (CA) univoca per l'account. Questo ha lo scopo di semplificarne l'utilizzo X.509 senza l'onere di identificare o configurare una CA o gestire le richieste di firma dei certificati (CSR).

AWS Payment Cryptography offre anche la possibilità di utilizzare la propria CA quando necessario per motivi di policy o conformità.

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

La funzionalità BYOCA consente di utilizzare la propria Autorità di certificazione ovunque vengano utilizzati i certificati TR-34 import/export, inclusi RSA Unwrap e i trasferimenti di chiavi. ECDH-based Ciò è utile quando è necessario mantenere una catena di certificati coerente all'interno dell'organizzazione o quando si lavora con partner che richiedono certificati CA specifici. L'esempio seguente illustra il flusso di lavoro BYOCA che utilizza TR-34 l'esportazione delle chiavi.

Le tre differenze principali rispetto al flusso di TR-34 esportazione standard sono:

1. La chiave RSA di firma viene creata esplicitamente utilizzando. [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html) In precedenza, veniva creata implicitamente tramite. [GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForExport.html)

1. Una nuova API [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)crea una richiesta di firma del certificato (CSR) che può essere firmata dalla CA esterna.

1. L'[ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)API è estesa per consentire la fornitura di un certificato in fase di esecuzione. In precedenza, questo era fornito implicitamente da`import-token`, che diventa un campo opzionale.

**Considerazioni importanti**  
Questi esempi utilizzano RSA-2048 chiavi e avvolgono una TDES-2KEY chiave. Durante l'esportazione AES-128, assicuratevi che tutte le chiavi siano RSA-3072 o RSA-4096.
L'errore più comune è che la chiave rappresentata da `SigningKeyIdentifier` e `SigningKeyCertificate` non corrisponde.

## Flusso di lavoro BYOCA
<a name="keyexchange-byoca.workflow"></a>

I passaggi seguenti illustrano il flusso di lavoro BYOCA completo per l'esportazione. TR-34 

**Topics**
+ [Fase 1: Creare una chiave RSA](#keyexchange-byoca.create-rsa)
+ [Fase 2: Generazione della richiesta di firma del certificato](#keyexchange-byoca.generate-csr)
+ [Fase 3: Rivedi la CSR (opzionale)](#keyexchange-byoca.review-csr)
+ [Fase 4: Firma la CSR con un'autorità di certificazione](#keyexchange-byoca.sign-csr)
+ [Fase 5: Importazione del certificato CA](#keyexchange-byoca.import-ca)
+ [Passaggio 6: Ottieni il certificato di crittografia KRD](#keyexchange-byoca.get-krd)
+ [Passaggio 7: esporta la chiave con BYOCA](#keyexchange-byoca.export-key)

### Fase 1: Creare una chiave RSA
<a name="keyexchange-byoca.create-rsa"></a>

Innanzitutto, crea una coppia di chiavi RSA che alla fine sarà il certificato di firma KDH. Puoi aggiungere tag per identificare lo scopo della chiave.

**Example Crea una chiave RSA per la firma**  

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

Prendi nota di `KeyArn` quanto ti servirà nel passaggio successivo.

### Fase 2: Generazione della richiesta di firma del certificato
<a name="keyexchange-byoca.generate-csr"></a>

Genera una richiesta di firma del certificato (CSR) da firmare dalla tua CA esterna utilizzando l'[GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)API. L'output è un file PEM con codifica Base64. Se decodificate i contenuti in base64 e li salvate, avrete una CSR valida in formato PEM.

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

Il `CertificateSigningRequest` campo contiene il CSR con codifica base64 che invierai alla tua CA per la firma.

### Fase 3: Rivedi la CSR (opzionale)
<a name="keyexchange-byoca.review-csr"></a>

Facoltativamente, puoi usare OpenSSL per esaminare i contenuti CSR e assicurarti che siano validi e come previsto.

**Example Esamina la CSR con OpenSSL**  

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

### Fase 4: Firma la CSR con un'autorità di certificazione
<a name="keyexchange-byoca.sign-csr"></a>

Dopo aver generato la CSR, devi farla firmare da un'autorità di certificazione (CA). Negli ambienti di produzione, in genere si utilizza CA privata AWS l'infrastruttura CA consolidata dell'organizzazione. A scopo di test, puoi usare OpenSSL per creare un certificato autofirmato.

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

Per firmare la CSR utilizzando CA privata AWS, prima decodifica la CSR con codifica base64 e salvala in un file, quindi utilizza l'API. [IssueCertificate](https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html)

**Example Firma CSR con 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"
}
```

Quindi recupera il certificato firmato:

**Example Recupera il certificato firmato**  

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

Salva il contenuto del certificato per utilizzarlo nella fase di esportazione. Dovrai codificarlo in base64 quando lo fornisci all'API. `ExportKey`

#### Usare OpenSSL per i test
<a name="keyexchange-byoca.sign-csr-openssl"></a>

A scopo di test, puoi utilizzare OpenSSL per creare una CA autofirmata e firmare la CSR. Innanzitutto, crea una chiave privata CA e un certificato autofirmato:

**Example Crea Test CA con 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"
```

Quindi decodifica la CSR del passaggio precedente e firmala con la tua CA di prova:

**Example Firma CSR con 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
```

Il certificato firmato è ora disponibile. `signed-cert.pem` Dovrai codificare questo certificato in base64 quando lo fornisci all'API: `ExportKey`

**Example Base64: codifica il certificato firmato**  

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

### Fase 5: Importazione del certificato CA
<a name="keyexchange-byoca.import-ca"></a>

È necessario innanzitutto considerare attendibile qualsiasi CA utilizzata per impedire l'utilizzo di certificati arbitrari. Importa il certificato radice della tua CA esterna utilizzando l'[ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)API. Se si utilizza una CA intermedia, `import-key` richiamare ma specificare `TrustedPublicKey` invece di `RootCertificatePublicKey` e specificare l'ARN della CA principale.

**Example Importa il certificato CA principale**  

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

Prendi nota delle CA `KeyArn` da utilizzare nella fase di esportazione.

### Passaggio 6: Ottieni il certificato di crittografia KRD
<a name="keyexchange-byoca.get-krd"></a>

In questo esempio, stiamo reimportando in AWS Payment Cryptography, quindi chiamiamo il servizio per ricevere un certificato a chiave pubblica KRD utilizzando l'API. [GetParametersForImport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForImport.html) In uno scenario reale, questo verrebbe fornito da un altro sistema, come un HSM, un bancomat, un terminale di pagamento o un sistema di gestione dei terminali di pagamento.

**Example Ottieni parametri per l'importazione**  

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

### Passaggio 7: esporta la chiave con BYOCA
<a name="keyexchange-byoca.export-key"></a>

Infine, esporta la chiave utilizzando TR-34 il tuo CA-signed certificato utilizzando l'[ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)API. Fornisci il certificato di firma firmato dalla tua CA esterna.

**Example TR-34 Esporta con 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"
    }
}
```

Il blocco chiave esportato può ora essere importato dal sistema ricevente utilizzando il processo di importazione standard TR-34 .

## Note aggiuntive
<a name="keyexchange-byoca.notes"></a>
+ Questi esempi sono mostrati utilizzando la CLI di AWS. La stessa funzionalità è disponibile in tutti gli SDK AWS tra cui Java, Python, Go e Rust.
+ Se esegui il test con una CA autofirmata, puoi utilizzare OpenSSL per creare una CA di test e firmare la CSR. In produzione, utilizza l'infrastruttura CA consolidata della tua organizzazione.