

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à.

# Utilizzo dell'autenticazione del certificato SSL per Amazon MQ for RabbitMQ
<a name="rabbitmq-ssl-tutorial"></a>

Questo tutorial descrive come configurare l'autenticazione del certificato SSL per i broker Amazon MQ for RabbitMQ utilizzando un'autorità di certificazione privata.

**Nota**  
Il plug-in di autenticazione del certificato SSL è disponibile solo per Amazon MQ for RabbitMQ versione 4 e successive.

**Topics**
+ [Prerequisiti per configurare l'autenticazione del certificato SSL](#rabbitmq-ssl-tutorial-prerequisites)
+ [Configurazione dell'autenticazione del certificato SSL in RabbitMQ tramite CLI AWS](#rabbitmq-ssl-tutorial-configure-cli)

## Prerequisiti per configurare l'autenticazione del certificato SSL
<a name="rabbitmq-ssl-tutorial-prerequisites"></a>

L'autenticazione dei certificati SSL utilizza il protocollo TLS reciproco (mTLS) per autenticare i client utilizzando i certificati X.509. Puoi configurare le AWS risorse richieste in questo tutorial distribuendo lo [stack AWS CDK per l'integrazione con Amazon MQ for RabbitMQ MTL](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-mtls-sample/).

Questo stack CDK crea automaticamente tutte le AWS risorse necessarie, tra cui l'autorità di certificazione, i certificati client e i ruoli IAM. Consulta il pacchetto README per un elenco completo delle risorse create dallo stack.

**Nota**  
Prima di distribuire lo stack CDK, imposta la variabile di ambiente. `RABBITMQ_TEST_USER_NAME` Questo valore verrà utilizzato come nome comune (CN) nel certificato client e deve corrispondere al nome utente utilizzato nei passaggi del tutorial. Ad esempio: `export RABBITMQ_TEST_USER_NAME="myuser"`

Se stai configurando le risorse manualmente anziché utilizzare lo stack CDK, assicurati di disporre dell'infrastruttura equivalente prima di configurare l'autenticazione del certificato SSL sui tuoi broker Amazon MQ for RabbitMQ.

### Prerequisito per configurare Amazon MQ
<a name="rabbitmq-ssl-tutorial-prerequisite-cli"></a>

AWS Versione CLI >= 2.28.23 per rendere opzionale l'aggiunta di un nome utente e una password durante la creazione del broker.

## Configurazione dell'autenticazione del certificato SSL in RabbitMQ tramite CLI AWS
<a name="rabbitmq-ssl-tutorial-configure-cli"></a>

Questa procedura utilizza la AWS CLI per creare e configurare le risorse necessarie. Nella procedura seguente, assicuratevi di sostituire i valori segnaposto, come ConfigurationID e Revision, con i relativi valori `<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>` effettivi`<2>`.

1. Creare una nuova configurazione utilizzando il comando `create-configuration` AWS CLI, come illustrato nell'esempio seguente.

   ```
   aws mq create-configuration \
     --name "rabbitmq-ssl-config" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2"
   ```

   Questo comando restituisce una risposta simile all'esempio seguente.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:03:01.759000+00:00",
           "Description": "Auto-generated default for rabbitmq-ssl-config on RabbitMQ 4.2",
           "Revision": 1
       },
       "Name": "rabbitmq-ssl-config"
   }
   ```

1. Crea un file di configurazione chiamato `rabbitmq.conf` per utilizzare l'autenticazione del certificato SSL, come illustrato nell'esempio seguente. Sostituisci tutti i valori segnaposto nel modello (contrassegnati con`${...}`) con i valori effettivi degli output dello stack dei AWS CDK prerequisiti implementati o dell'infrastruttura equivalente.

   ```
   auth_mechanisms.1 = EXTERNAL
   ssl_cert_login_from = common_name
   
   auth_backends.1 = internal
   
   # Reject if no client cert
   ssl_options.verify = verify_peer
   ssl_options.fail_if_no_peer_cert = true
   
   # AWS integration for secure credential retrieval
   # For more information, see https://github.com/amazon-mq/rabbitmq-aws
   
   # FIXME: Replace the ${...} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.assume_role_arn = ${AmazonMqAssumeRoleArn}
   aws.arns.ssl_options.cacertfile = ${CaCertArn}
   ```

1. Aggiornate la configurazione utilizzando il comando `update-configuration` AWS CLI come illustrato nell'esempio seguente. In questo comando, aggiungi l'ID di configurazione ricevuto nella risposta del passaggio 1 di questa procedura. Ad esempio, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca`.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Questo comando restituisce una risposta simile all'esempio seguente.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-ssl-config",
       "Warnings": []
   }
   ```

1. Crea un broker con la configurazione di autenticazione del certificato SSL creata nel passaggio 2 di questa procedura. A tale scopo, utilizzate il comando `create-broker` AWS CLI come illustrato nell'esempio seguente. In questo comando, fornite l'ID di configurazione e il numero di revisione ottenuti rispettivamente nelle risposte dei passaggi 1 e 2. Ad esempio `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca` e `2`.

   ```
   aws mq create-broker \
     --broker-name "rabbitmq-ssl-test-1" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2" \
     --host-instance-type "mq.m7g.large" \
     --deployment-mode "SINGLE_INSTANCE" \
     --logs '{"General": true}' \
     --publicly-accessible \
     --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \
     --users '[{"Username":"testuser","Password":"testpassword"}]'
   ```

   Questo comando restituisce una risposta simile all'esempio seguente.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-ssl-test-1:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. Verifica che lo stato del broker passi da `CREATION_IN_PROGRESS` a`RUNNING`, utilizzando il comando `describe-broker` AWS CLI come mostrato nell'esempio seguente. In questo comando, fornisci l'ID del broker che hai ottenuto nel risultato del passaggio precedente. Ad esempio, `b-2a1b5133-a10c-49d2-879b-8c176c34cf73`.

   ```
   aws mq describe-broker \
     --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Questo comando restituisce una risposta simile all'esempio seguente. La risposta seguente è una versione abbreviata dell'output completo restituito dal `describe-broker` comando. Questa risposta mostra lo stato del broker e la strategia di autenticazione utilizzata per proteggere il broker. In questo caso, la strategia di `config_managed` autenticazione indica che il broker utilizza il metodo di autenticazione del certificato SSL.

   ```
   {
       "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

1. Verifica l'autenticazione del certificato SSL con il seguente `ssl.sh` script.

   Usa questo script bash per testare la connettività al tuo broker Amazon MQ for RabbitMQ. Questo script utilizza il certificato del client per l'autenticazione e verifica se la connessione è stata configurata correttamente. Se è configurato correttamente, vedrai il tuo broker pubblicare e consumare messaggi.

   Se ricevi un `ACCESS_REFUSED` errore, puoi risolvere i problemi delle impostazioni di configurazione utilizzando CloudWatch i log del tuo broker. Puoi trovare il link per il gruppo di CloudWatch log del tuo broker nella console Amazon MQ.

   In questo script, dovrai fornire i seguenti valori:
   + `USERNAME`: Il nome comune (CN) del certificato client.
   + `CLIENT_KEYSTORE`: percorso del file keystore del client (PKCS12 formato). Se hai utilizzato lo stack CDK prerequisito, il percorso predefinito è. `$(pwd)/certs/client-keystore.p12`
   + `KEYSTORE_PASSWORD`: Password per il keystore del cliente. Se hai utilizzato lo stack CDK prerequisito, la password predefinita è. `changeit`
   + `BROKER_DNS`: Puoi trovare questo valore in **Connessioni** nella pagina dei dettagli del broker della console Amazon MQ.

   ```
   #! /bin/bash
   set -e
   
   # Client information
   ## FIXME: Update this value with the client ID and secret of your confidential application client
   USERNAME={{<client_cert_common_name>}}
   CLIENT_KEYSTORE={{$(pwd)/certs/client-keystore.p12}}
   KEYSTORE_PASSWORD={{changeit}}
   
   BROKER_DNS={{<broker_dns>}}
   CONNECTION_STRING=amqps://${BROKER_DNS}:5671 
   
   # Produce/consume messages using the above connection string
   QUEUES_COUNT=1
   PRODUCERS_COUNT=1
   CONSUMERS_COUNT=1
   PRODUCER_RATE=1
   
   finch run --rm --ulimit nofile=40960:40960 \
       -v ${CLIENT_KEYSTORE}:/certs/client-keystore.p12:ro \
       -e JAVA_TOOL_OPTIONS="-Djavax.net.ssl.keyStore=/certs/client-keystore.p12 -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD} -Djavax.net.ssl.keyStoreType=PKCS12" \
       pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-cert-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \
       --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \
       --id "cert-test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \
       --uri ${CONNECTION_STRING} \
       --sasl-external \
       --use-default-ssl-context \
       --flag persistent --rate $PRODUCER_RATE
   ```