

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

# Autenticazione
<a name="authentication"></a>

L'autenticazione è un meccanismo in cui si verifica l'identità di un client o di un server. L'autenticazione del server è il processo in cui i dispositivi o altri client assicurano che stiano comunicando con un endpoint effettivo AWS IoT . L'autenticazione del client è il processo con cui i dispositivi o altri client si autenticano. AWS IoT

## Panoramica sui certificati X.509
<a name="x509-certificate-overview"></a>

I certificati X.509 sono certificati digitali che usano lo [standard di infrastruttura a chiave pubblica X.509](https://en.wikipedia.org/wiki/X.509) per associare una chiave pubblica a un'identità contenuta in un certificato. I certificati X.509 vengono rilasciati da un'entità attendibile denominata autorità di certificazione (CA). L'autorità di certificazione mantiene uno o più certificati speciali chiamati certificati CA, che usa per rilasciare certificati X.509. Solo l'autorità di certificazione ha accesso a certificati CA. Le catene di certificati X.509 vengono utilizzate sia per l'autenticazione server da parte dei client sia per l'autenticazione client da parte del server.

# Autenticazione del server
<a name="server-authentication"></a>

Quando il dispositivo o un altro client tenta di connettersi AWS IoT Core, il AWS IoT Core server invierà un certificato X.509 utilizzato dal dispositivo per autenticare il server. L'autenticazione avviene a livello TLS tramite la convalida della [Catena di certificati X.509](x509-client-certs.md). Si tratta dello stesso metodo utilizzato dal browser quando si visita un URL HTTPS. Per utilizzare certificati della tua certification authority, consulta [Gestire i certificati CA personali](manage-your-CA-certs.md).

Quando i tuoi dispositivi o altri client stabiliscono una connessione TLS a un AWS IoT Core endpoint, AWS IoT Core presenta una catena di certificati che i dispositivi utilizzano per verificare che stiano comunicando e non che un altro server si spacci per impersonare. AWS IoT Core AWS IoT Core La catena presentata dipende da una combinazione del tipo di endpoint a cui il dispositivo si connette e dalla [suite di crittografia negoziata dal client durante l'handshake](transport-security.md) TLS. AWS IoT Core 

## Tipi di endpoint
<a name="endpoint-types"></a>

AWS IoT Core supporti. `iot:Data-ATS` `iot:Data-ATS`gli endpoint presentano un certificato server firmato da una CA di [Amazon Trust Services](https://www.amazontrust.com/repository/).

I certificati presentati dagli endpoint ATS hanno la firma incrociata di Starfield. Alcune implementazioni client TLS richiedono la convalida root trust e richiedono che i certificati CA Starfield siano installati negli archivi attendibili del client.

**avvertimento**  
Non è consigliabile utilizzare un metodo di aggiunta dei certificati che esegue l'hash dell'intero certificato (incluso il nome dell'emittente e così via) perché ciò causerà un errore di verifica del certificato e i certificati ATS forniti hanno la firma incrociata di Starfield e un nome di emittente diverso.

**Importante**  
Usa gli `iot:Data-ATS` endpoint. I certificati Symantec e Verisign sono obsoleti e non sono più supportati da. AWS IoT Core

Puoi utilizzare il comando `describe-endpoint` per creare l'endpoint ATS.

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

Il comando `describe-endpoint` restituisce un endpoint nel formato seguente.

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**Nota**  
La prima volta che viene chiamato `describe-endpoint`, viene creato un endpoint. Tutte le chiamate successive a `describe-endpoint` restituiscono lo stesso endpoint.

**Nota**  
**Per visualizzare il tuo `iot:Data-ATS` endpoint nella console, scegli Impostazioni. AWS IoT Core ** La console visualizza solo l'endpoint `iot:Data-ATS`.

### Creazione di un file `IotDataPlaneClient` con l' AWS SDK for Java
<a name="java-client"></a>

Per creare un dispositivo `IotDataPlaneClient` che utilizza un `iot:Data-ATS` endpoint, devi fare quanto segue. 
+ Crea un `iot:Data-ATS` endpoint utilizzando l'[DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API.
+ Specifica l'endpoint quando crei il `IotDataPlaneClient`.

Nell'esempio seguente vengono eseguite entrambe queste operazioni.

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## Certificati CA per l'autenticazione del server
<a name="server-authentication-certs"></a>

A seconda del tipo di endpoint di dati in uso e della suite di crittografia negoziata, i certificati di autenticazione AWS IoT Core del server sono firmati da uno dei seguenti certificati CA root:

**Amazon Trust Services Endpoint (preferito)**

**Nota**  
Potrebbe essere necessario fare clic con il pulsante destro del mouse su questi collegamenti e selezionare **Salva collegamento come...** per salvare questi certificati come file.
+ Chiave RSA a 2048 bit: [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem).
+ Chiave RSA a 4096 bit: Amazon Root CA 2. Riservato per uso futuro.
+ Chiave ECC a 256 bit: [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem).
+ Chiave ECC a 384 bit: Amazon Root CA 4. Riservato per uso futuro.

Questi certificati hanno tutti la firma incrociata di [ Starfield Root CA Certificate](https://www.amazontrust.com/repository/SFSRootCAG2.pem). Tutte le nuove AWS IoT Core regioni, a partire dal lancio del 9 maggio 2018 AWS IoT Core nella regione Asia Pacifico (Mumbai), offrono solo certificati ATS.

**VeriSign Endpoint (legacy)**
+ Chiave RSA a 2048 bit: certificato CA [principale G5 pubblico primario di VeriSign classe 3](https://www.digicert.com/kb/digicert-root-certificates.htm)

## Linee guida per l'autenticazione del server
<a name="server-authentication-guidelines"></a>

Esistono molte variabili che possono influire sulla capacità di un dispositivo di convalidare il certificato di autenticazione del server AWS IoT Core . Ad esempio, i dispositivi potrebbero avere una quantità eccessiva di memoria per contenere tutti i possibili certificati CA radice oppure i dispositivi possono implementare un metodo non standard di convalida del certificato. Per questi motivi suggeriamo di seguire queste linee guida:
+ Ti consigliamo di utilizzare il tuo endpoint ATS e di installare tutti i certificati Amazon Root CA supportati.
+ Se non riesci ad archiviare tutti questi certificati sul tuo dispositivo e se i tuoi dispositivi non utilizzano la convalida basata su ECC, puoi omettere i certificati ECC [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) e [https://www.amazontrust.com/repository/AmazonRootCA4.pem](https://www.amazontrust.com/repository/AmazonRootCA4.pem). Se i dispositivi non implementano la convalida dei certificati basata su RSA, puoi omettere i certificati RSA di [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) e di [https://www.amazontrust.com/repository/AmazonRootCA2.pem](https://www.amazontrust.com/repository/AmazonRootCA2.pem). Potrebbe essere necessario fare clic con il pulsante destro del mouse su questi collegamenti e selezionare **Salva collegamento come...** per salvare questi certificati come file.
+ Se riscontri problemi di convalida dei certificati server durante la connessione all'endpoint ATS, prova ad aggiungere il certificato Amazon Root CA pertinente con firma incrociata al tuo archivio attendibile. Potrebbe essere necessario fare clic con il pulsante destro del mouse su questi collegamenti e selezionare **Salva collegamento come...** per salvare questi certificati come file.
  + [Firma incrociata Amazon Root CA 1](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [Autorità di certificazione Amazon Root CA 2 a firma incrociata](https://www.amazontrust.com/repository/G2-RootCA2.pem) – Riservata per uso futuro.
  + [Firma incrociata Amazon Root CA 3](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [Amazon Root CA 4 a firma incrociata](https://www.amazontrust.com/repository/G2-RootCA4.pem) - Riservata per uso futuro.
+ Se si verificano problemi di convalida dei certificati server, il dispositivo potrebbe considerare esplicitamente attendibile la CA principale. Prova ad aggiungere [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) al tuo negozio di fiducia.
+ Se si verificano ancora problemi dopo aver eseguito i passaggi precedenti, contattare il [Supporto AWS Developer](https://aws.amazon.com/premiumsupport/plans/developers/). 

**Nota**  
I certificati CA hanno una data di scadenza dopo la quale non possono più essere usati per convalidare un certificato del server. Potrebbe essere necessario sostituire i certificati CA prima della data di scadenza. Assicurati di poter aggiornare i certificati CA root in tutti i dispositivi o client per garantire la connessione continua e per mantenere il sistema aggiornato con le best practice di sicurezza.

**Nota**  
Quando ti connetti AWS IoT Core al codice del tuo dispositivo, trasferisci il certificato all'API che stai utilizzando per la connessione. L'API utilizzata varierà in base all'SDK. Per ulteriori informazioni, consulta il [AWS IoT Core dispositivo SDKs](iot-sdks.md).

# Autenticazione client
<a name="client-authentication"></a>

AWS IoT supporta tre tipi di principi di identità per l'autenticazione del dispositivo o del client:
+ [Certificati client X.509](x509-client-certs.md)
+ [Utenti, gruppi e ruoli IAM](iam-users-groups-roles.md)
+ [Identità Amazon Cognito](cognito-identities.md)

Queste identità possono essere utilizzate con dispositivi, applicazioni mobili, Web o desktop. Possono anche essere utilizzati da un utente che digita i comandi dell'interfaccia a riga di AWS IoT comando (CLI). In genere, AWS IoT i dispositivi utilizzano certificati X.509, mentre le applicazioni mobili utilizzano identità Amazon Cognito. Le applicazioni Web e desktop usano le identità IAM o federate. I comandi AWS CLI usano IAM. Per ulteriori informazioni sulle identità IAM, consulta [Gestione delle identità e degli accessi per AWS IoT](security-iam.md).

# Certificati client X.509
<a name="x509-client-certs"></a>

I certificati X.509 offrono la possibilità di AWS IoT autenticare le connessioni di client e dispositivi. I certificati client devono essere registrati AWS IoT prima che un client possa comunicare con. AWS IoT Un certificato client può essere registrato in più Account AWS file contemporaneamente Regione AWS per facilitare lo spostamento di dispositivi tra Account AWS i server della stessa regione. Per ulteriori informazioni, consulta [Utilizzo dei certificati client X.509 in più Account AWS secondi con registrazione multiaccount](#multiple-account-cert). 

Consigliamo che a ogni dispositivo o client sia assegnato un certificato univoco per permettere operazioni di gestione granulare del client, inclusa la revoca di certificati. I dispositivi e i client devono anche supportare la rotazione e la sostituzione dei certificati per garantire un funzionamento corretto allo scadere dei certificati.

Per informazioni sull'utilizzo dei certificati X.509 per supportare più dispositivi, consulta [Provisioning dei dispositivi](iot-provision.md) per esaminare le diverse opzioni di gestione dei certificati e provisioning supportate da AWS IoT .

**AWS IoT supporta questi tipi di certificati client X.509:**
+  certificati X.509 generati da AWS IoT
+  Certificati X.509 firmati da una CA registrata con. AWS IoT
+  Certificati X.509 firmati da una CA non registrata con AWS IoT.

In questa sezione viene descritto come gestire i certificati X.509 in AWS IoT. È possibile utilizzare la AWS IoT console o AWS CLI eseguire le seguenti operazioni sui certificati:
+ [Crea certificati AWS IoT client](device-certs-create.md)
+ [Creare certificati client personali](device-certs-your-own.md)
+ [Registrare un certificato client](register-device-cert.md)
+ [Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md)
+ [Revocare un certificato client](revoke-ca-cert.md)

Per ulteriori informazioni sui AWS CLI comandi che eseguono queste operazioni, consulta [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html) Reference.

## Utilizzo dei certificati client X.509
<a name="x509-client-cert-basics"></a>

I certificati X.509 autenticano le connessioni di client e dispositivi a. AWS IoT I certificati X.509 offrono diversi vantaggi rispetto ad altri meccanismi di identificazione e autenticazione. I certificati X.509 permettono l'uso di chiavi asimmetriche con i dispositivi. Ad esempio, è possibile masterizzare le chiavi private in un dispositivo di storage sicuro in modo che il materiale crittografico sensibile resta sempre nel dispositivo. I certificati X.509 forniscono un'autenticazione client più affidabile rispetto ad altri schemi, ad esempio un nome utente e una password o un token di connessione, perché la chiave privata resta sempre nel dispositivo.

AWS IoT autentica i certificati client utilizzando la modalità di autenticazione client del protocollo TLS. Il supporto TLS è disponibile in molti linguaggi di programmazione e sistemi operativi e viene usato in genere per crittografare i dati. Nell'autenticazione client TLS, AWS IoT richiede un certificato client X.509 e convalida lo stato del certificato e confrontandolo con un registro di certificati. Account AWS Quindi richiede al client la prova della proprietà della chiave privata che corrisponde alla chiave pubblica contenuta nel certificato. AWS IoT richiede ai client di inviare l'[estensione SNI (Server Name Indication)](https://tools.ietf.org/html/rfc3546#section-3.1) al protocollo Transport Layer Security (TLS). Per ulteriori informazioni sulla configurazione dell'estensione SNI, consulta [Sicurezza dei trasporti in AWS IoT Core](transport-security.md).

Per facilitare una connessione client sicura e coerente al AWS IoT core, un certificato client X.509 deve possedere quanto segue:
+ Registrato in Core. AWS IoT Per ulteriori informazioni, consulta [Registrare un certificato client](register-device-cert.md).
+ Avere uno stato di `ACTIVE`. Per ulteriori informazioni, consulta [Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md).
+ La data di scadenza del certificato non è ancora stata raggiunta.

Puoi creare certificati client che utilizzano l'autorità di certificazione root Amazon e puoi utilizzare i tuoi certificati client firmati da un'altra CA. Per ulteriori informazioni sull'utilizzo della AWS IoT console per creare certificati che utilizzano Amazon Root CA, consulta[Crea certificati AWS IoT client](device-certs-create.md). Per ulteriori informazioni sull'utilizzo dei certificati X.509, consulta [Creare certificati client personali](device-certs-your-own.md).

La data e l'ora di scadenza per i certificati firmati da un certificato CA vengono impostate alla creazione del certificato. I certificati X.509 generati da AWS IoT scadono alla mezzanotte UTC del 31 dicembre 2049 (2049-12-31T 23:59:59 Z).

AWS IoT Device Defender può eseguire audit su te Account AWS e sui dispositivi che supportano le migliori pratiche di sicurezza IoT comuni. Ciò include la gestione delle date di scadenza dei certificati X.509 firmati dalla tua CA o da Amazon Root CA. [Per ulteriori informazioni sulla gestione della data di scadenza di un certificato, consulta Scadenza del [certificato del dispositivo e Scadenza del](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html) certificato CA.](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html)

Nel AWS IoT blog ufficiale, un approfondimento sulla gestione della rotazione dei certificati dei dispositivi e sulle migliori pratiche di sicurezza è esplorato in [Come gestire la rotazione dei certificati dei dispositivi IoT utilizzando AWS IoT](https://aws.amazon.com/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/).

## Utilizzo dei certificati client X.509 in più Account AWS secondi con registrazione multiaccount
<a name="multiple-account-cert"></a>

La registrazione a più account consente di spostare dispositivi tra i tuoi Account AWS nella stessa regione o in regioni diverse. In questo modo puoi registrare, testare e configurare un dispositivo in un account di pre-produzione, quindi registrare e utilizzare lo stesso dispositivo e certificato del dispositivo in un account di produzione. È inoltre possibile registrare il certificato client sul dispositivo o i certificati del dispositivo senza una CA registrata con. AWS IoT Per ulteriori informazioni, consulta [Registrazione di un certificato client firmato da una CA non registrata (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli).

**Nota**  
I certificati utilizzati per la registrazione con più account sono supportati in `iot:Data-ATS`, `iot:Data` (legacy), `iot:Jobs` e nei tipi di endpoint `iot:CredentialProvider`. Per ulteriori informazioni sugli endpoint dei AWS IoT dispositivi, consulta[AWS IoT dati del dispositivo e endpoint di servizio](iot-connect-devices.md#iot-connect-device-endpoints).

I dispositivi che utilizzano la registrazione multiaccount devono inviare l'[estensione SNI (Server Name Indication)](https://tools.ietf.org/html/rfc3546#section-3.1) al protocollo Transport Layer Security (TLS) e fornire l'indirizzo completo dell'endpoint sul `host_name` campo, quando si connettono. AWS IoT AWS IoT utilizza l'indirizzo dell'endpoint in `host_name` per indirizzare la connessione all'account corretto. AWS IoT I dispositivi esistenti che non inviano un indirizzo endpoint valido in `host_name` continueranno a funzionare, ma non saranno in grado di utilizzare le funzionalità che richiedono queste informazioni. Per ulteriori informazioni sull'estensione SNI e per informazioni su come identificare l'indirizzo endpoint per il campo `host_name`, vedere [Sicurezza dei trasporti in AWS IoT Core](transport-security.md). 

**Per utilizzare la registrazione con più account**

1. Puoi registrare i certificati del dispositivo con una CA. Puoi registrare la CA di firma in più account in modalità `SNI_ONLY` e utilizzare tale CA per registrare lo stesso certificato client su più account. Per ulteriori informazioni, consulta [Registrazione di un certificato CA in modalità SNI\$1ONLY (CLI) - Consigliato](manage-your-CA-certs.md#register-CA-cert-SNI-cli).

1. Puoi registrare i certificati del dispositivo senza una CA. Per informazioni, consulta [Registra un certificato client firmato da una CA (CLI) non registrata](manual-cert-registration.md#manual-cert-registration-noca-cli). La registrazione di una CA è facoltativa. Non è necessario registrare la CA con AWS IoT cui ha firmato i certificati del dispositivo.

## Algoritmi di firma dei certificati supportati da AWS IoT
<a name="x509-cert-algorithms"></a>

AWS IoT supporta i seguenti algoritmi di firma dei certificati:
+ SHA256CON RSA
+ SHA384CON RSA
+ SHA512CON RSA
+ SHA256WITHRSAANDMGF1 (RASSA-PSS)
+ SHA384WITHRSAANDMGF1 (RASSA-PSS)
+ SHA512WITHRSAANDMGF1 (RASSA-PSS)
+ DSA\$1CON\$1 SHA256
+ ECDSA-CON- SHA256
+ ECDSA-CON- SHA384
+ ECDSA-CON- SHA512

Per ulteriori informazioni sull'autenticazione e la sicurezza dei certificati, vedere [Device](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html) certificate key quality.

**Nota**  
La richiesta di firma del certificato (CSR) deve includere una chiave pubblica. La chiave può essere una chiave RSA con lunghezza di almeno 2048 bit o una chiave ECC da curva NIST P–256, NIST P–384 o NIST P-521. Per ulteriori informazioni, consulta [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCertificateFromCsr.html) nella *guida di riferimento delle API AWS IoT *.

## Algoritmi chiave supportati da AWS IoT
<a name="x509-cert-key-algorithms"></a>

La tabella seguente mostra come sono supportati gli algoritmi chiave:


****  

| Algoritmo chiave | Algoritmo di firma dei certificati | Versione TLS | Supportato? Sì o No | 
| --- | --- | --- | --- | 
| RSA con una dimensione della chiave di almeno 2048 bit | Tutti | TLS 1.2 TLS 1.3 | Sì | 
| ECC NIST P-256/P-384/P-521 | Tutti | TLS 1.2 TLS 1.3 | Sì | 
| RSA-PSS con una dimensione della chiave di almeno 2048 bit | Tutti | TLS 1.2 | No | 
| RSA-PSS con una dimensione della chiave di almeno 2048 bit | Tutti | TLS 1.3 | Sì | 

Per creare un certificato utilizzando [CreateCertificateFromCSR](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateFromCsr.html), puoi utilizzare un algoritmo a chiave supportato per generare una chiave pubblica per la tua CSR. Per registrare il proprio certificato utilizzando la [RegisterCertificate](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificate.html)nostra [RegisterCertificateWithoutCA](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificateWithoutCA.html), è possibile utilizzare un algoritmo a chiave supportato per generare una chiave pubblica per il certificato.

Per ulteriori informazioni, consulta [Politiche di sicurezza](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html#tls-policy-table).

# Crea certificati AWS IoT client
<a name="device-certs-create"></a>

AWS IoT fornisce certificati client firmati dall'autorità di certificazione Amazon Root (CA).

In questo argomento viene descritto come creare un certificato client firmato dall'autorità di certificazione root Amazon e scaricare i file del certificato. Dopo aver creato i file di certificato client, è necessario installarli nel client.

**Nota**  
Ogni certificato client X.509 fornito da AWS IoT contiene gli attributi di emittente e soggetto impostati al momento della creazione del certificato. Gli attributi del certificato sono immutabili solo dopo la creazione del certificato.

Puoi utilizzare la AWS IoT console o il AWS CLI per creare un AWS IoT certificato firmato dall'autorità di certificazione Amazon Root.

## Crea un AWS IoT certificato (console)
<a name="device-certs-create-console"></a>

**Per creare un AWS IoT certificato utilizzando la AWS IoT console**

1. Accedi a Console di gestione AWS e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione, selezionare **Sicurezza**, scegliere **Certificati**, quindi **Crea**.

1. Scegliere **One-click certificate creation (Creazione certificato con un clic)** – **Create certificate (Crea certificato)**.

1. Dalla pagina **Certificato creato** scarica i file del certificato client per l'oggetto, la chiave pubblica e la chiave privata in una posizione sicura. Questi certificati generati da AWS IoT sono disponibili solo per l'uso con AWS IoT i servizi.

   Se è necessario anche il file del certificato dell'autorità di certificazione root Amazon, questa pagina contiene anche il collegamento alla pagina da cui è possibile scaricarlo.

1. A questo punto, un certificato client è stato creato e registrato con AWS IoT. È necessario attivare il certificato prima di utilizzarlo in un client.

    Scegli **Attiva** per attivare subito il certificato client. Se non desideri attivare il certificato, in [Attivare un certificato client (console)](activate-or-deactivate-device-cert.md#activate-device-cert-console) viene descritto come attivare il certificato in un secondo momento.

   

1. Se desideri collegare una policy al certificato, scegli **Attach a policy (Collega una policy)**.

   Se non desideri collegare una policy, scegli **Done (Fatto)** per terminare. È possibile collegare una policy in un secondo momento.

Dopo aver completato la procedura, installare i file di certificato sul client.

## Creare un AWS IoT certificato (CLI)
<a name="device-certs-create-cli"></a>

 AWS CLI fornisce il **[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** comando per creare certificati client firmati dall'autorità di certificazione Amazon Root. Questo comando però non scarica il file del certificato dell'autorità di certificazione root Amazon. Puoi scaricare il file del certificato dell'autorità di certificazione root Amazon da [Certificati CA per l'autenticazione del server](server-authentication.md#server-authentication-certs). 

Questo comando crea file e registri con chiave privata, chiave pubblica e certificati X.509 e attiva il certificato con. AWS IoT

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

Se non desideri attivare il certificato durante la creazione e la registrazione, questo comando crea file di certificato di chiave privata, chiave pubblica e X.509 e registra il certificato, ma non lo attiva. In [Attivare un certificato client (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) viene descritto come attivare il certificato in un secondo momento.

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



Installa i file di certificato sul client.

# Creare certificati client personali
<a name="device-certs-your-own"></a>

AWS IoT supporta i certificati client firmati da qualsiasi autorità di certificazione (CA) principale o intermedia. AWS IoT utilizza i certificati CA per verificare la proprietà dei certificati. Per utilizzare i certificati dei dispositivi firmati da una CA che non è la CA di Amazon, è necessario registrare il certificato della CA AWS IoT in modo da poter verificare la proprietà del certificato del dispositivo.

AWS IoT supporta diversi modi per portare i propri certificati (BYOC): 
+ Innanzitutto, registrare la CA utilizzata per firmare i certificati client e quindi registrare i singoli certificati client. Se si desidera registrare il dispositivo o il client nel relativo certificato client alla prima connessione AWS IoT (noto anche come [Just-in-Time Provisioning](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html)), è necessario registrare la CA firmataria con AWS IoT e attivare la registrazione automatica.
+ Se non è possibile registrare la CA di firma, è possibile scegliere di registrare i certificati client senza CA. Per i dispositivi registrati senza CA, è necessario presentare la [Server Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) quando si connettono a AWS IoT.

**Nota**  
Per registrare i certificati client utilizzando CA, è necessario registrare la CA firmataria con cui si effettua la firma AWS IoT, non con nessun'altra CAs nella gerarchia.

**Nota**  
Un certificato CA può essere registrato in modalità `DEFAULT` da un solo account in una regione. Un certificato CA può essere registrato in modalità `SNI_ONLY` da più account in una regione. 

Per ulteriori informazioni sull'utilizzo dei certificati X.509 per supportare più dispositivi, consulta [Provisioning dei dispositivi](iot-provision.md) per esaminare le diverse opzioni di gestione dei certificati e provisioning supportate da AWS IoT .

**Topics**
+ [

# Gestire i certificati CA personali
](manage-your-CA-certs.md)
+ [

# Creare un certificato client utilizzando il certificato CA
](create-device-cert.md)

# Gestire i certificati CA personali
<a name="manage-your-CA-certs"></a>

In questa sezione vengono descritte le attività comuni per la gestione dei certificati dell'autorità di certificazione (CA).

Puoi registrare la tua autorità di certificazione (CA) con AWS IoT se utilizzi certificati client firmati da una CA che AWS IoT non riconosce.

Se desideri che i client registrino automaticamente i propri certificati client al AWS IoT momento della prima connessione, è necessario registrare la CA che ha firmato i certificati client AWS IoT. In caso contrario, non è necessario registrare il certificato CA che ha firmato i certificati client.

**Nota**  
Un certificato CA può essere registrato in modalità `DEFAULT` da un solo account in una regione. Un certificato CA può essere registrato in modalità `SNI_ONLY` da più account in una regione.

**Topics**
+ [

## Creare un certificato CA
](#create-your-CA-cert)
+ [

## Registrare il certificato CA
](#register-CA-cert)
+ [

## Disattivare un certificato CA
](#deactivate-ca-cert)

## Creare un certificato CA
<a name="create-your-CA-cert"></a>

Se non disponi di un certificato CA, puoi usare gli strumenti [OpenSSL v1.1.1i](https://www.openssl.org/) per crearne uno.

**Nota**  
Non è possibile eseguire questa procedura nella AWS IoT console.

**Per creare un certificato CA utilizzando gli strumenti [OpenSSL v1.1.1i](https://www.openssl.org/)**

1. Genera una coppia di chiavi.

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. Usa la chiave privata della coppia di chiavi per generare un certificato CA.

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## Registrare il certificato CA
<a name="register-CA-cert"></a>

Queste procedure descrivono come registrare un certificato rilasciato da un'autorità di certificazione (CA) diversa dalla CA di Amazon. AWS IoT Core utilizza i certificati CA per verificare la proprietà dei certificati. Per utilizzare i certificati dei dispositivi firmati da una CA che non è la CA di Amazon, devi registrare il certificato CA AWS IoT Core in modo che possa verificare la proprietà del certificato del dispositivo.

### Registrare un certificato CA (console)
<a name="register-CA-cert-console"></a>

**Nota**  
Per registrare un certificato emesso da una CA nella console, avvia la console all'indirizzo [Register CA certificate](https://console.aws.amazon.com//iot/home#/create/cacertificate) (Registra certificato emesso da una CA). Puoi registrare la tua CA in modalità multi-account e senza la necessità di fornire un certificato di verifica o accedere alla chiave privata. Una CA può essere registrata in modalità multi-account da più Account AWS nella stessa Regione AWS. Puoi registrare la tua CA in modalità account singolo fornendo un certificato di verifica e una verifica della proprietà della chiave privata della CA.

### Registrare un certificato CA (CLI)
<a name="register-CA-cert-cli"></a>

Puoi registrare un certificato CA in modalità `DEFAULT` o in modalità `SNI_ONLY`. Una CA può essere registrata in `DEFAULT` modalità una Account AWS alla volta Regione AWS. Una CA può essere registrata in `SNI_ONLY` modalità da più Account AWS persone contemporaneamente Regione AWS. Per ulteriori informazioni sulla modalità dei certificati CA, consulta [certificateMode](https://docs.aws.amazon.com//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode).

**Nota**  
Ti consigliamo di registrare una CA in modalità `SNI_ONLY`. Non è necessario fornire un certificato di verifica o l'accesso alla chiave privata, ed è possibile registrare la CA più volte Account AWS contemporaneamente Regione AWS.

#### Registrazione di un certificato CA in modalità SNI\$1ONLY (CLI) - Consigliato
<a name="register-CA-cert-SNI-cli"></a>

**Prerequisiti**

Verifica che i seguenti elementi siano presenti sul tuo computer prima di continuare:
+ Il file del certificato CA root (a cui si fa riferimento nel seguente esempio come `root_CA_cert_filename.pem`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) o versione successiva

**Per registrare un certificato CA in `SNI_ONLY` modalità, utilizzare il AWS CLI**

1. Registrare il certificato CA con AWS IoT. Utilizzando il comando **register-ca-certificate**, immetti il nome del file del certificato CA. Per ulteriori informazioni, consulta [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   In caso di successo, questo comando restituisce*certificateId*.

1. A questo punto, il certificato CA è stato registrato con AWS IoT ma non è attivo. Prima di poter registrare gli eventuali certificati client che ha firmato, il certificato CA deve essere attivato.

   Questo passaggio attiva il certificato CA.

   Per attivare il certificato CA, usa il comando **update-certificate** come riportato di seguito. Per ulteriori informazioni, consulta [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) in *Riferimento ai comandi AWS CLI *.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Per visualizzare lo stato del certificato CA, utilizza il comando **describe-ca-certificate**. Per ulteriori informazioni, consulta [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

#### Registrazione di un certificato CA in modalità `DEFAULT` (CLI)
<a name="register-CA-cert-default-cli"></a>

**Prerequisiti**

Verifica che i seguenti elementi siano presenti sul tuo computer prima di continuare:
+ Il file del certificato CA root (a cui si fa riferimento nel seguente esempio come `root_CA_cert_filename.pem`)
+ Il file della chiave privata del certificato CA root (a cui si fa riferimento nel seguente esempio come `root_CA_key_filename.key`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) o versione successiva

**Per registrare un certificato CA in `DEFAULT` modalità utilizzando il AWS CLI**

1. Per ottenere un codice di registrazione da AWS IoT, usa**get-registration-code**. Salvare il `registrationCode` restituito per utilizzarlo come `Common Name` del certificato di verifica della chiave privata. Per ulteriori informazioni, consulta [get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

   ```
   aws iot get-registration-code
   ```

1. Genera una coppia di chiavi per il certificato di verifica della chiave privata.

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Creare una richiesta di firma del certificato per il certificato di verifica della chiave privata. Impostare il campo `Common Name` del certificato sul `registrationCode` restituito da **get-registration-code**.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   Ti verrà richiesto di immettere alcune informazioni, tra cui il `Common Name` per il certificato.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Usa la richiesta di firma del certificato per creare un certificato di verifica della chiave privata.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Registra il certificato CA con AWS IoT. Passa il nome file del certificato CA e il nome file del certificato di verifica della chiave privata al comando **register-ca-certificate** come riportato di seguito: Per ulteriori informazioni, consulta [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   Questo comando restituisce*certificateId*, in caso di successo.

1. A questo punto, il certificato CA è stato registrato AWS IoT ma non è attivo. Prima di poter registrare gli eventuali certificati client che ha firmato, il certificato CA deve essere attivato.

   Questo passaggio attiva il certificato CA.

   Per attivare il certificato CA, usa il comando **update-certificate** come riportato di seguito. Per ulteriori informazioni, consulta [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) in *Riferimento ai comandi AWS CLI *.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

Per visualizzare lo stato del certificato CA, utilizza il comando **describe-ca-certificate**. Per ulteriori informazioni, consulta [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

### Creazione di un certificato di verifica CA per registrare il certificato emesso da una CA nella console
<a name="create-CA-verification-cert"></a>

**Nota**  
Questa procedura è utile solo se si sta registrando un certificato CA dalla AWS IoT console.  
Se non hai eseguito questa procedura dalla AWS IoT console, avvia la procedura di registrazione del certificato CA nella console all'indirizzo [Register CA certificate](https://console.aws.amazon.com//iot/home#/create/cacertificate). 

Verifica che i seguenti elementi siano presenti sullo stesso computer prima di continuare:
+ Il file del certificato CA root (a cui si fa riferimento nel seguente esempio come `root_CA_cert_filename.pem`)
+ Il file della chiave privata del certificato CA root (a cui si fa riferimento nel seguente esempio come `root_CA_key_filename.key`)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) o versione successiva

**Per utilizzare l'interfaccia a riga di comando per creare un certificato di verifica CA per registrare il certificato CA nella console**

1. Sostituisci `verification_cert_key_filename.key` con il nome del file della chiave del certificato di verifica che desideri creare (ad esempio, **verification\$1cert.key**). Quindi esegui questo comando per generare una coppia di chiavi per il certificato di verifica della chiave privata:

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. Sostituisci `verification_cert_key_filename.key` con il nome del file della chiave creato nel passaggio 1.

   Sostituisci `verification_cert_csr_filename.csr` con il nome del file CSR (Certificate Signing Request, richiesta di firma del certificato) che desideri creare. Ad esempio, **verification\$1cert.csr**.

   Esegui questo comando per creare il file CSR.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   Il comando richiede informazioni aggiuntive che vengono spiegate in seguito.

1. Nella AWS IoT console, nel contenitore del **certificato di verifica**, copia il codice di registrazione.

1. Le istruzioni del comando **openssl** sono mostrate nell'esempio seguente. Ad eccezione del campo `Common Name`, puoi inserire valori specifici o lasciare i campi vuoti.

   Nel campo `Common Name`, incolla il codice di registrazione copiato nella fase precedente.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   Al termine, il comando crea il file CSR.

1. Sostituisci `verification_cert_csr_filename.csr` con il `verification_cert_csr_filename.csr` utilizzato nella fase precedente.

   Sostituisci `root_CA_cert_filename.pem` con il nome file del certificato CA che desideri registrare.

   Sostituisci `root_CA_key_filename.key` con il nome file del file della chiave privata del certificato CA.

   Sostituisci `verification_cert_filename.pem` con il nome del file del certificato di verifica che desideri creare. Ad esempio, **verification\$1cert.pem**.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. Al termine del comando OpenSSL, questi file saranno pronti per l'utilizzo quando si torna nella console.
   + Il file del certificato emesso da una CA (`root_CA_cert_filename.pem` usato nel comando precedente)
   + Il certificato di verifica creato nel passaggio precedente (*verification\$1cert\$1filename.pem*utilizzato nel comando precedente)

## Disattivare un certificato CA
<a name="deactivate-ca-cert"></a>

Quando un certificato di autorità di certificazione (CA) è abilitato per la registrazione automatica dei certificati client, AWS IoT controlla il certificato CA per assicurarsi che lo sia`ACTIVE`. Se il certificato CA lo è`INACTIVE`, AWS IoT non consente la registrazione del certificato client.

L'impostazione del certificato CA su `INACTIVE`, impedisce la registrazione automatica di eventuali nuovi certificati client emessi dalla CA.

**Nota**  
Qualsiasi certificato client registrato che sia stato firmato dal certificato CA compromesso continuerà a funzionare finché non viene esplicitamente revocato.

### Disattivare un certificato CA (console)
<a name="deactivate-ca-cert-console"></a>

**Per disattivare un certificato CA utilizzando la console AWS IoT**

1. Accedi a Console di gestione AWS e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione a sinistra, scegli **Sicuro**, scegli **CAs**.

1. Nell'elenco delle autorità di certificazione, individua quella che desideri disattivare e scegli l'icona con i puntini di sospensione per aprire il menu delle opzioni.

1. Scegliere **Deactivate (Disattiva)**dal menu delle opzioni.

L'autorità di certificazione viene visualizzata come **Inactive (Inattiva)** nell'elenco.

**Nota**  
La AWS IoT console non fornisce un modo per elencare i certificati firmati dalla CA che hai disattivato. Per un'opzione AWS CLI che elenca questi certificati, consulta [Disattivare un certificato CA (CLI)](#deactivate-ca-cert-cli).

### Disattivare un certificato CA (CLI)
<a name="deactivate-ca-cert-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)comando per disattivare un certificato CA.

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html) per ottenere l'elenco di tutti i certificati client registrati firmati dalla CA specificata. Per ogni certificato client firmato dal certificato CA specificato, usa il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) per revocare il certificato del dispositivo in modo da impedirne l'uso.

Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) per visualizzare lo stato del certificato CA.

# Creare un certificato client utilizzando il certificato CA
<a name="create-device-cert"></a>

È possibile utilizzare la propria autorità di certificazione (CA) per creare certificati client. Il certificato client deve essere registrato AWS IoT prima dell'uso. Per informazioni sulle opzioni di registrazione per i certificati client, consulta [Registrare un certificato client](register-device-cert.md).

## Creare un certificato client (CLI)
<a name="create-device-cert-cli"></a>

**Nota**  
Non è possibile eseguire questa procedura nella AWS IoT console.

**Per creare un certificato client utilizzando il AWS CLI**

1. Genera una coppia di chiavi.

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. Creare una richiesta di firma del certificato per il certificato client.

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   Ti verrà richiesto di immettere alcune informazioni, come mostrato qui.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. Creare un certificato client dalla richiesta di firma del certificato.

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 A questo punto, il certificato client è stato creato, ma non è ancora stato registrato con AWS IoT. Per informazioni su come e quando registrare il certificato client, consulta [Registrare un certificato client](register-device-cert.md). 

# Registrare un certificato client
<a name="register-device-cert"></a>

I certificati client devono essere registrati presso AWS IoT per consentire le comunicazioni tra il client e AWS IoT. È possibile registrare ogni certificato client manualmente oppure configurare i certificati client in modo che vengano registrati automaticamente quando il client si connette AWS IoT per la prima volta.

 Se desideri che i client e i dispositivi registrino i certificati client quando si connettono per la prima volta, è necessario utilizzare [Registrare il certificato CA](manage-your-CA-certs.md#register-CA-cert) per firmare il certificato client con AWS IoT nelle regioni in cui vuoi utilizzarlo. Amazon Root CA viene registrata automaticamente con AWS IoT. 

I certificati client possono essere condivisi da Account AWS e regioni. Le procedure descritte in questi argomenti devono essere eseguite in ogni account e regione in cui vuoi utilizzare il certificato client. La registrazione di un certificato client in un account o in una regione non viene riconosciuta automaticamente.

**Nota**  
I client che utilizzano il protocollo Transport Layer Security (TLS) per connettersi ad AWS IoT devono supportare l'[estensione SNI (Server Name Indication)](https://tools.ietf.org/html/rfc3546#section-3.1) a TLS. Per ulteriori informazioni, consulta [Sicurezza dei trasporti in AWS IoT Core](transport-security.md).

**Topics**
+ [

# Registrare manualmente un certificato client
](manual-cert-registration.md)
+ [

# Registrare un certificato client quando il client si connette alla AWS IoT just-in-time registrazione (JITR)
](auto-register-device-cert.md)

# Registrare manualmente un certificato client
<a name="manual-cert-registration"></a>

È possibile registrare manualmente un certificato client utilizzando la AWS IoT console e AWS CLI.

La procedura di registrazione da utilizzare dipende dal fatto che il certificato venga condiviso da Account AWS s e Regions. La registrazione di un certificato client in un account o in una regione non viene riconosciuta automaticamente.

Le procedure descritte in questo argomento devono essere eseguite in ogni account e regione in cui vuoi utilizzare il certificato client. I certificati client possono essere condivisi da Account AWS regioni e regioni. 

## Registrare un certificato client firmato da una CA registrata (console)
<a name="manual-cert-registration-console"></a>

**Nota**  
Prima di eseguire questa procedura, assicurati di disporre del file.pem del certificato client e che il certificato client sia stato firmato da una CA presso cui ti sei [registrato](manage-your-CA-certs.md#register-CA-cert). AWS IoT

**Per registrare un certificato esistente AWS IoT utilizzando la console**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione, all'interno della sezione **Manage** (Gestione), scegliere **Security** (Sicurezza) e quindi **Certificates** (Certificati).

1. Sulla pagina **Certificates** (Certificati), nella finestra di dialogo **Certificates** (Certificati), selezionare **Add certificate** (Aggiungi certificato) e quindi **Register certificates** (Registra certificati).

1. Sulla pagina **Register certificate** (Registra certificato), nella finestra di dialogo **Certificates to upload** (Certificati da caricare) eseguire le seguenti operazioni:
   + Scegliere **CA is registered with AWS IoT** (La CA è registrata presso ).
   + In **Choose a CA certificate** (Scegliere un certificato CA), selezionare il la propria **Certification authority** (Autorità di certificazione). 
     + Scegliere **Register a new CA** (Registrare una nuova CA) per registrare una nuova **Certification authority** (Autorità di certificazione) che non è registrata su AWS IoT.
     + Lasciare il campo **Choose a CA certificate** (Scegliere un certificato CA) vuoto se la propria autorità di certificazione è **Amazon Root certificate authority** (Autorità di certificazione Amazon Root).
   + Seleziona fino a 10 certificati da caricare e con cui registrarti AWS IoT.
     + Usare i file dei certificati creati in [Crea certificati AWS IoT client](device-certs-create.md) e [Creare un certificato client utilizzando il certificato CA](create-device-cert.md).
   + Scegliere **Activate** (Attiva) o **Deactivate** (Disattiva). Se si sceglie **Deactivate** (Disattiva), [Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md) spiega come attivare il certificato dopo la sua registrazione.
   + Scegli **Registrati**.

Sulla pagina **Certificates** (Certificati), nella finestra di dialogo **Certificates** (Certificati) verranno ora visualizzati i certificati registrati.

## Registra un certificato client firmato da una CA (console) non registrata
<a name="manual-cert-registration-console-noca"></a>

**Nota**  
Prima di eseguire questa procedura, assicurati di disporre del file .pem del certificato client.

**Per registrare un certificato esistente AWS IoT utilizzando la console**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione, selezionare **Security (Sicurezza)**, scegliere **Certificates (Certificati)**, quindi **Create (Crea)**.

1. In **Create a certificate (Crea un certificato)**, individua la voce **Use my certificate (Usa certificato personale)** e scegli **Get started (Inizia)**.

1. In **Select a CA (Seleziona una CA)**, scegli **Next (Avanti)**.

1.  In **Register existing device certificates (Registra certificati dispositivo esistenti)**, seleziona **Select certificates (Scegli certificati)** e scegli fino a 10 file di certificato da registrare. 

1.  Dopo aver chiuso la finestra di dialogo del file, selezionare se si desidera attivare o revocare i certificati client al momento della registrazione.

   Se non attivi un certificato al momento della registrazione, in [Attivare un certificato client (console)](activate-or-deactivate-device-cert.md#activate-device-cert-console) viene descritto come attivarlo in un secondo momento. 

   Se un certificato viene revocato al momento della registrazione, non può essere attivato in un secondo momento.

   Dopo aver scelto i file di certificato da registrare e aver selezionato le operazioni da eseguire dopo la registrazione, seleziona **Register certificates (Registra certificati)**.

I certificati client registrati correttamente vengono visualizzati nell'elenco dei certificati.

## Registrare un certificato client firmato da una CA registrata (CLI)
<a name="manual-cert-registration-cli"></a>

**Nota**  
Prima di eseguire questa procedura, assicurati di disporre del file .pem dell'autorità di certificazione (CA) e del file .pem del certificato client. Il certificato client deve essere firmato da un'autorità di certificazione (CA) presso cui ti sei [registrato AWS IoT](manage-your-CA-certs.md#register-CA-cert).

Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html) per registrare ma non attivare un certificato client.

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

Il certificato client è registrato con AWS IoT, ma non è ancora attivo. Consulta [Attivare un certificato client (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) per informazioni su come attivarlo in un secondo momento.

È inoltre possibile attivare il certificato client quando lo si registra utilizzando questo comando.

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

Per ulteriori informazioni sull'attivazione del certificato in modo che possa essere utilizzato per la connessione AWS IoT, vedere [Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md)

## Registra un certificato client firmato da una CA (CLI) non registrata
<a name="manual-cert-registration-noca-cli"></a>

**Nota**  
Prima di eseguire questa procedura, assicurati di disporre del file .pem del certificato.

Utilizzare il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html) per registrare, ma non attivare, un certificato client.

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

Il certificato client è registrato con AWS IoT, ma non è ancora attivo. Consulta [Attivare un certificato client (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) per informazioni su come attivarlo in un secondo momento.

È inoltre possibile attivare il certificato client quando lo si registra utilizzando questo comando.

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

Per ulteriori informazioni sull'attivazione del certificato in modo che possa essere utilizzato per la connessione AWS IoT, consulta[Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md).

# Registrare un certificato client quando il client si connette alla AWS IoT just-in-time registrazione (JITR)
<a name="auto-register-device-cert"></a>

È possibile configurare un certificato CA per abilitare la registrazione AWS IoT automatica dei certificati client con cui ha firmato la registrazione la prima volta che il client si connette. AWS IoT

Per registrare i certificati client quando un client si connette AWS IoT per la prima volta, è necessario abilitare il certificato CA per la registrazione automatica e configurare la prima connessione da parte del client per fornire i certificati richiesti.

## Configurare un certificato CA per supportare la registrazione automatica (console)
<a name="enable-auto-registration-console"></a>

**Per configurare un certificato CA per supportare la registrazione automatica dei certificati client tramite la AWS IoT console**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione a sinistra, scegli **Sicuro**, scegli **CAs**.

1. Nell'elenco delle autorità di certificazione individuare quella per cui si desidera abilitare la registrazione automatica e aprire il menu delle opzioni utilizzando l'icona con i puntini di sospensione.

1. Scegliere **Enable auto-registration (Abilita registrazione automatica)**dal menu delle opzioni.

**Nota**  
Lo stato della registrazione automatica non viene visualizzato nell'elenco delle autorità di certificazione. Per visualizzare lo stato di registrazione automatica di un'autorità di certificazione, è necessario aprire la pagina **Details (Dettagli)** dell'autorità di certificazione.

## Configurare un certificato CA per supportare la registrazione automatica (CLI)
<a name="enable-auto-registration-cli"></a>

Se hai già registrato il certificato CA con AWS IoT, usa il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)comando per impostare `autoRegistrationStatus` il certificato CA su`ENABLE`.

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

Se si desidera abilitare `autoRegistrationStatus` quando si registra il certificato CA, utilizzare il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html).

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

Usare il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) per visualizzare lo stato del certificato CA.

## Configurare la prima connessione da parte di un client per la registrazione automatica
<a name="configure-auto-reg-first-connect"></a>

Quando un client tenta di connettersi AWS IoT per la prima volta, il certificato client firmato dal certificato CA deve essere presente sul client durante l'handshake Transport Layer Security (TLS).

Quando il client si connette AWS IoT, utilizza il certificato client creato in [Crea certificati AWS IoT client](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-create.html) o [Crea certificati client personalizzati.](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html) AWS IoT riconosce il certificato CA come certificato CA registrato, registra il certificato client e ne imposta lo stato su. `PENDING_ACTIVATION` Questo significa che il certificato client è stato automaticamente registrato ed è in attesa dell'attivazione. Lo stato del certificato client deve essere `ACTIVE` prima che possa essere utilizzato per connettersi ad AWS IoT. Vedi [Attivare o disattivare un certificato client](activate-or-deactivate-device-cert.md) per informazioni sull'attivazione di un certificato client.

**Nota**  
È possibile effettuare il provisioning dei dispositivi utilizzando la funzionalità di AWS IoT Core just-in-time registrazione (JITR) senza dover inviare l'intera catena di fiducia alla prima connessione dei dispositivi a. AWS IoT Core La presentazione del certificato emesso da una CA è facoltativa, ma il dispositivo è necessario per inviare l'estensione [Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) quando si collegano.

Quando registra AWS IoT automaticamente un certificato o quando un client presenta un certificato nello `PENDING_ACTIVATION` stato, AWS IoT pubblica un messaggio sul seguente argomento MQTT:

`$aws/events/certificates/registered/caCertificateId`

Dove `caCertificateId` è l'ID del certificato emesso da una CA che ha rilasciato il certificato client.

Il messaggio pubblicato in questo argomento ha la struttura seguente:

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

Puoi creare una regola che resti in ascolto in questo argomento ed esegua alcune operazioni. Ti consigliamo di creare una regola Lambda che verifichi che il certificato client non sia incluso in un elenco di revoche di certificati (CRL), che attivi il certificato e crei e colleghi una policy a quest'ultimo. La policy determina le risorse cui il client può accedere. Se la politica che state creando richiede l'ID client dai dispositivi di connessione, potete utilizzare la funzione clientid () della regola per recuperare l'ID client. Un esempio di definizione di regola può essere simile al seguente:

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

In questo esempio, la regola sottoscrive l'argomento JITR `$aws/events/certificates/registered/caCertificateID` e utilizza la funzione clientid () per recuperare l'ID del client. La regola aggiunge quindi l'ID client al payload JITR. [Per ulteriori informazioni sulla funzione clientid () della regola, vedete clientid ().](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid)

Per ulteriori informazioni su come creare una regola Lambda che ascolti l'`$aws/events/certificates/registered/caCertificateID`argomento ed esegua queste azioni, vedi [just-in-time Registrazione dei certificati client](https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/) su. AWS IoT

Se si verifica un errore o un'eccezione durante la registrazione automatica dei certificati client, AWS IoT invia eventi o messaggi ai registri in CloudWatch Logs. Per ulteriori informazioni sulla configurazione dei log per il tuo account, consulta la [ CloudWatch documentazione di Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/).

# Gestisci i certificati dei clienti
<a name="manage-device-cert"></a>

AWS IoT fornisce funzionalità per la gestione dei certificati client.

**Topics**
+ [

# Attivare o disattivare un certificato client
](activate-or-deactivate-device-cert.md)
+ [

# Collegare un oggetto o una policy a un certificato client
](attach-to-cert.md)
+ [

# Revocare un certificato client
](revoke-ca-cert.md)
+ [

# Trasferire un certificato a un altro account
](transfer-cert.md)

# Attivare o disattivare un certificato client
<a name="activate-or-deactivate-device-cert"></a>

AWS IoT verifica che un certificato client sia attivo quando autentica una connessione.

Puoi creare e registrare certificati client senza attivarli in modo che non possano essere utilizzati finché non lo desideri. È inoltre possibile disattivare i certificati client attivi per disabilitarli temporaneamente. Infine, puoi revocare i certificati client per impedirne qualsiasi utilizzo futuro. 

## Attivare un certificato client (console)
<a name="activate-device-cert-console"></a>

**Per attivare un certificato client utilizzando la console AWS IoT**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

1. Nell'elenco dei certificati individuare il certificato che si desidera attivare e aprire il menu delle opzioni utilizzando l'icona con i puntini di sospensione.

1. Scegliere **Activate (Attiva)**dal menu delle opzioni.

Il certificato viene visualizzato come **Active (Attivo)** nell'elenco dei certificati.

## Disattivare un certificato client (console)
<a name="deactivate-device-cert-console"></a>

**Per disattivare un certificato client utilizzando la console AWS IoT**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

1. Nell'elenco dei certificati individuare il certificato che si desidera disattivare e aprire il menu delle opzioni utilizzando l'icona con i puntini di sospensione.

1. Scegliere **Deactivate (Disattiva)**dal menu delle opzioni.

Il certificato viene visualizzato come **Inactive (Inattivo)** nell'elenco dei certificati.

## Attivare un certificato client (CLI)
<a name="activate-device-cert-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando per attivare un certificato.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

Se il comando ha esito positivo, lo stato del certificato è `ACTIVE`. Eseguire [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) per visualizzare lo stato del certificato.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## Disattivare un certificato client (CLI)
<a name="deactivate-device-cert-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando per disattivare un certificato.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

Se il comando ha esito positivo, lo stato del certificato è `INACTIVE`. Eseguire [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) per visualizzare lo stato del certificato.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Collegare un oggetto o una policy a un certificato client
<a name="attach-to-cert"></a>

Quando si crea e si registra un certificato separato da un AWS IoT oggetto, questo non avrà alcuna politica che autorizzi alcuna AWS IoT operazione, né sarà associato a nessun AWS IoT oggetto. In questa sezione viene descritto come aggiungere queste relazioni a un certificato registrato.

**Importante**  
Per completare queste procedure, è necessario aver già creato l'oggetto o la policy che si desidera collegare al certificato.

Il certificato autentica un dispositivo in AWS IoT modo che possa connettersi. Collegare il certificato a una risorsa dell'oggetto stabilisce la relazione tra il dispositivo (tramite il certificato) e la risorsa dell'oggetto. Per autorizzare il dispositivo a eseguire AWS IoT azioni, ad esempio consentirgli di connettersi e pubblicare messaggi, è necessario allegare una politica appropriata al certificato del dispositivo. 

## Collegare un oggetto a un certificato client (console)
<a name="attach-to-cert-thing-console"></a>

Per completare questa procedura, è necessario il nome dell'oggetto.

**Per collegare un oggetto a un certificato registrato**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

1. Nell'elenco dei certificati individuare il certificato a cui si desidera collegare una policy, aprire il menu delle opzioni del certificato scegliendo l'icona con i puntini di sospensione e scegliere **Collega oggetto**.

1. Nella finestra popup individua il nome dell'oggetto che desideri collegare al certificato, scegli la relativa casella di controllo e scegli **Attach (Collega)**.

L'oggetto dovrebbe ora essere visualizzato nell'elenco degli oggetti nella pagina dei dettagli del certificato.

## Collegare una policy a un certificato client (console)
<a name="attach-to-cert-policy-console"></a>

Per completare questa procedura, sarà necessario il nome dell'oggetto policy.

**Per collegare un oggetto policy a un certificato registrato**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

1. Nell'elenco dei certificati individuare il certificato a cui si desidera collegare una policy, aprire il menu delle opzioni del certificato scegliendo l'icona con i puntini di sospensione e scegliere **Collega policy**. 

1. Nella finestra popup individua il nome della policy che desideri collegare al certificato, scegli la relativa casella di controllo e scegli **Attach (Collega)**.

L'oggetto policy dovrebbe ora essere visualizzato nell'elenco delle policy nella pagina dei dettagli del certificato.

## Collegare un oggetto a un certificato client (CLI)
<a name="attach-to-cert-thing-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html)comando per allegare un oggetto a un certificato.

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## Collegare una policy a un certificato client (CLI)
<a name="attach-to-cert-policy-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html)comando per allegare un oggetto di policy a un certificato.

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# Revocare un certificato client
<a name="revoke-ca-cert"></a>

Se rilevi un'attività sospetta in un certificato client registrato, puoi revocarlo in modo che non possa essere utilizzato nuovamente.

**Nota**  
Dopo che un certificato è stato revocato, il suo stato non può essere modificato. Ovvero, lo stato del certificato non può essere modificato in `Active` o in qualsiasi altro stato.

## Revocare un certificato client (console)
<a name="revoke-device-cert-console"></a>

**Per revocare un certificato client utilizzando la console AWS IoT**

1. [Accedi alla console di AWS gestione e apri la AWS IoT console.](https://console.aws.amazon.com/iot/home)

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

1. Nell'elenco dei certificati individuare il certificato che si desidera revocare e aprire il menu delle opzioni utilizzando l'icona con i puntini di sospensione.

1. Nel menu delle opzioni, scegliere **Revoke (Revoca)**.

Se il certificato viene revocato correttamente, è visualizzato come **Revoked (Revocato)** nell'elenco dei certificati.

## Revocare un certificato client (CLI)
<a name="revoke-device-cert-cli"></a>

 AWS CLI Fornisce il [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)comando per revocare un certificato.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

Se il comando ha esito positivo, lo stato del certificato è `REVOKED`. Eseguire [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) per visualizzare lo stato del certificato.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# Trasferire un certificato a un altro account
<a name="transfer-cert"></a>

I certificati X.509 che appartengono a uno Account AWS possono essere trasferiti a un altro. Account AWS

**Per trasferire un certificato X.509 da uno all'altro Account AWS**

1. [Avviare un trasferimento di certificato](#transfer-cert-init)

   Il certificato deve essere disattivato e scollegato da tutti le policy e gli oggetti prima di avviare il trasferimento.

1. [Accettare o rifiutare un trasferimento di certificato](#transfer-cert-accept)

   L'account ricevente deve accettare o rifiutare esplicitamente il certificato trasferito. Dopo che l'account ricevente ha accettato il certificato, il certificato deve essere attivato prima dell'uso.

1. [Annullamento di un trasferimento di certificato](#transfer-cert-cancel)

   L'account di origine può annullare un trasferimento, se il certificato non è stato accettato.

## Avviare un trasferimento di certificato
<a name="transfer-cert-init"></a>

È possibile iniziare a trasferire un certificato a un altro Account AWS utilizzando la [AWS IoT console](https://console.aws.amazon.com/iot/home) o il. AWS CLI

### Avviare un trasferimento di certificato (console)
<a name="transfer-cert-init-console"></a>

Per completare questa procedura, è necessario l'ID del certificato che vuoi trasferire.

Esegui questa procedura dall'account con il certificato da trasferire.

**Per iniziare a trasferire un certificato a un altro Account AWS**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

   Scegli il certificato con uno stato **Active (Attivo)** o **Inactive (Inattivo)** da trasferire e aprine la pagina dettagli.

1. Nella pagina **Details** (Dettagli) del certificato, nel menu **Actions** (Operazioni), se l'opzione **Deactivate** (Disattiva) è disponibile, selezionala per disattivare il certificato.

1. Sulla pagina **Details (Dettagli)** del certificato, seleziona **Policies (Policy)** nel menu di sinistra.

1. Se sulla pagina **Policies (Policy)** del certificato sono presenti delle policy allegate al certificato, scollegali aprendo il menu delle opzioni delle policy e scegliendo **Detach (Distacca)**.

   Prima di continuare, verifica che al certificato non siano collegate policy.

1. Sul menu a sinistra della pagina **Policies (Policy)** del certificato seleziona **Things (Oggetti)**.

1. Se sulla pagina **Things (Oggetti)** del certificato ci sono oggetti allegati al certificato, scollegali aprendo il menu delle opzioni dell'oggetto e scegliendo **Detach (Distacca)**.

   Prima di continuare, il certificato non deve essere collegato a nessun oggetto.

1. Sulla pagina **Things (Oggetti)** del certificato, nel menu a sinistra seleziona **Details (Dettagli)**.

1. Nella pagina **Details** (Dettagli) del certificato, nel menu **Actions** (Operazioni), scegli **Start transfer** (Avvia trasferimento) per aprire la relativa finestra di dialogo.

1. Nella finestra di dialogo **Avvia trasferimento**, inserisci il Account AWS numero dell'account per ricevere il certificato e un breve messaggio opzionale.

1. Scegli **Start transfer (Avvio del trasferimento)** per trasferire il certificato.

La console dovrebbe visualizzare un messaggio che indica l'esito o il fallimento del trasferimento. Se il trasferimento è stato avviato, lo stato del certificato viene aggiornato a **Transferred (Trasferimento)**.

### Avviare un trasferimento di certificati (CLI)
<a name="transfer-cert-init-cli"></a>

Per completare questa procedura, avrai bisogno *certificateArn* dell'*certificateId*e del certificato che desideri trasferire.

Esegui questa procedura dall'account con il certificato da trasferire.

**Per iniziare a trasferire un certificato su un altro AWS account**

1. Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) per disattivare il certificato.

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. Scollega tutte le policy.

   1. Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html) per elencare le policy collegate al certificato.

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. Per ogni policy allegata, utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html) per scollegare la policy.

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. Scollega tutti gli oggetti.

   1. Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html) per fare una lista delle cose collegate al certificato.

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html) per scollegare ogni oggetto allegato.

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html) per avviare il trasferimento del certificato.

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## Accettare o rifiutare un trasferimento di certificato
<a name="transfer-cert-accept"></a>

È possibile accettare o rifiutare un certificato trasferito Account AWS da un altro utente Account AWS utilizzando la [AWS IoT console](https://console.aws.amazon.com/iot/home) o il AWS CLI.

### Accettare o rifiutare un trasferimento di certificato (console)
<a name="transfer-cert-accept-console"></a>

Per completare questa procedura, è necessario l'ID del certificato trasferito nel tuo account.

Eseguire questa procedura dall'account che riceve il certificato trasferito.

**Per accettare o rifiutare un certificato che è stato trasferito su Account AWS**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

   Scegli il certificato con lo stato **Pending transfer (Trasferimento in sospeso)** per accettare o rifiutare e aprirne la pagina dettagli.

1. Sulla pagina **Details (Dettagli)** del certificato, nel menu **Actions (Operazioni)**,
   + Per accettare il certificato, scegli **Accept transfer (Accetta il trasferimento)**.
   + Per non accettare il certificato, scegli **Reject transfer (Rifiuta del trasferimento)**.

### Accettare o rifiutare un trasferimento di certificato (CLI)
<a name="transfer-cert-accept-cli"></a>

Per completare questa procedura, è necessario il trasferimento *certificateId* del certificato che si desidera accettare o rifiutare.

Eseguire questa procedura dall'account che riceve il certificato trasferito.

**Per accettare o rifiutare un certificato che è stato trasferito al tuo Account AWS**

1. Per accettare il certificato, utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html).

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. Per rifiutare il certificato, utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html).

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## Annullamento di un trasferimento di certificato
<a name="transfer-cert-cancel"></a>

È possibile annullare un trasferimento di certificato prima che sia stato accettato utilizzando la [console AWS IoT](https://console.aws.amazon.com/iot/home) o l' AWS CLI.

### Annullamento di un trasferimento di certificato (console)
<a name="transfer-cert-cancel-console"></a>

Per completare questa procedura, è necessario l'ID del certificato che vuoi cancellare.

Esegui questa procedura dall'account che ha avviato il trasferimento del certificato.

**Annullamento di un trasferimento di certificato**

1. Accedi alla console di AWS gestione e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Nel riquadro di navigazione di sinistra, scegliere **Secure (Sicurezza)**, quindi **Certificates (Certificati)**.

   Scegli il certificato con lo stato **Transferred (Trasferimento)** di cui si desidera annullare il trasferimento e apri il menu delle opzioni.

1. Nel menu delle opzioni del certificato, scegli l'opzione **Revoke transfer (Revoca del trasferimento)** per annullare il trasferimento del certificato.
**Importante**  
Fai attenzione a non confondere **Revoke transfer (Revoca del trasferimento)** con l'opzione **Revoke (Revoca)**.  
La **Revoke transfer (Revoca del trasferimento)** annulla il trasferimento del certificato, mentre l'opzione **Revoke (Revoca)** rende il certificato irreversibilmente inutilizzabile da AWS IoT. 

### Annullamento di un trasferimento di certificato (CLI)
<a name="transfer-cert-cancel-cli"></a>

Per completare questa procedura, avrai bisogno *certificateId* del trasferimento del certificato che desideri annullare.

Esegui questa procedura dall'account che ha avviato il trasferimento del certificato.

Utilizza il comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html) per annullare il trasferimento del certificato.

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# Convalida personalizzata del certificato del cliente
<a name="customize-client-auth"></a>

AWS IoT Core supporta la convalida personalizzata dei certificati client per i certificati client X.509, che migliora la gestione dell'autenticazione dei client. Questo metodo di convalida dei certificati è noto anche come controllo dei certificati di preautenticazione, in cui si valutano i certificati client in base a criteri personalizzati (definiti in una funzione Lambda) e si revocano i certificati client o il certificato dell'autorità di certificazione (CA) di firma dei certificati per impedire ai client di connettersi. AWS IoT Core Ad esempio, è possibile creare controlli di revoca dei certificati personalizzati che convalidano lo stato dei certificati rispetto alle autorità di convalida che supportano gli endpoint [OCSP (Online Certificate Status Protocol)](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol) o [Certificate Revocation Lists (CRL)](https://en.wikipedia.org/wiki/Certificate_revocation_list) e impediscono le connessioni per i client con certificati revocati. I criteri utilizzati per valutare i certificati client sono definiti in una funzione Lambda (nota anche come Lambda di preautenticazione). È necessario utilizzare gli endpoint impostati nelle configurazioni di dominio e il [tipo di autenticazione](protocols.md#connection-protocol-auth-mode) deve essere un certificato X.509. Inoltre, i client devono fornire l'estensione [SNI (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) durante la connessione a. AWS IoT Core

**Nota**  
Questa funzionalità non è supportata nelle AWS GovCloud (US) regioni.

**Topics**
+ [

## Fase 1: Registrare i certificati client X.509 con AWS IoT Core
](#client-auth-cert-verification)
+ [

## Passaggio 2: creazione di una funzione Lambda
](#customize-client-auth-lambda)
+ [

## Fase 3: AWS IoT Autorizza a richiamare la funzione Lambda
](#customize-client-configuration-grant-permission)
+ [

## Fase 4: Impostare la configurazione di autenticazione per un dominio
](#customize-client-configuration)

## Fase 1: Registrare i certificati client X.509 con AWS IoT Core
<a name="client-auth-cert-verification"></a>

Se non l'hai già fatto, registra e attiva i certificati client [X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) con. AWS IoT Core Altrimenti, passare alla fase successiva.

Per registrare e attivare i certificati client con AWS IoT Core, procedi nel seguente modo:

1. Se [crei certificati client direttamente con AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Questi certificati client verranno registrati automaticamente con AWS IoT Core.

1. Se [crei i tuoi certificati client](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), segui [queste istruzioni per registrarli AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Per attivare i certificati client, segui [queste istruzioni](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Passaggio 2: creazione di una funzione Lambda
<a name="customize-client-auth-lambda"></a>

È necessario creare una funzione Lambda che esegua la verifica del certificato e venga chiamata per ogni tentativo di connessione del client per l'endpoint configurato. Quando crei questa funzione Lambda, segui le indicazioni generali di [Crea la tua prima funzione Lambda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html). Inoltre, assicurati che la funzione Lambda aderisca ai formati di richiesta e risposta previsti come segue:

**Esempio di evento della funzione Lambda**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
Metadati o informazioni aggiuntive relative alla connessione del client a. AWS IoT Core

`principalId`  
L'identificatore principale associato al client nella connessione TLS.

`serverName`  
La stringa del [nome host SNI (Server Name Indication).](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) AWS IoT Core richiede che i dispositivi inviino l'[estensione SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) al protocollo Transport Layer Security (TLS) e forniscano l'indirizzo completo dell'endpoint sul campo. `host_name`

`clientCertificateChain`  
L'array di stringhe che rappresenta la catena di certificati X.509 del client. 

**Esempio di risposta alla funzione Lambda**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
Un valore booleano che indica se la richiesta è autenticata.

**Nota**  
Nella risposta Lambda, `isAuthenticated` deve essere necessario procedere `true` all'ulteriore autenticazione e autorizzazione. In caso contrario, il certificato client IoT può essere disabilitato e l'autenticazione personalizzata con certificati client X.509 può essere bloccata per ulteriori autenticazioni e autorizzazioni.

## Fase 3: AWS IoT Autorizza a richiamare la funzione Lambda
<a name="customize-client-configuration-grant-permission"></a>

[Dopo aver creato la funzione Lambda, è necessario concedere l'autorizzazione AWS IoT per richiamarla utilizzando il comando CLI add-permission.](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) Nota che questa funzione Lambda verrà richiamata per ogni tentativo di connessione all'endpoint configurato. Per ulteriori informazioni, consulta [Autorizzazione AWS IoT a richiamare la funzione Lambda](custom-auth-authorize.md).

## Fase 4: Impostare la configurazione di autenticazione per un dominio
<a name="customize-client-configuration"></a>

La sezione seguente descrive come impostare la configurazione di autenticazione per un dominio personalizzato utilizzando AWS CLI.

### Imposta la configurazione del certificato client per un dominio (CLI)
<a name="customize-client-auth-cli"></a>

Se non disponi di una configurazione di dominio, usa il comando [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html)CLI per crearne una. Se disponi già di una configurazione di dominio, utilizza il comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html)CLI per aggiornare la configurazione del certificato client per un dominio. È necessario aggiungere l'ARN della funzione Lambda creata nel passaggio precedente.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
Il nome della configurazione di dominio.

`authentication-type`  
Il tipo di autenticazione della configurazione del dominio. Per ulteriori informazioni, vedi [Scelta del tipo di autenticazione](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
Il protocollo applicativo con cui i dispositivi comunicano AWS IoT Core. Per ulteriori informazioni, vedere [Scelta di un protocollo applicativo](protocols.md#protocol-selection).

`client-certificate-config`  
Un oggetto che specifica la configurazione di autenticazione del client per un dominio.

`clientCertificateCallbackArn`  
L'Amazon Resource Name (ARN) della funzione Lambda che AWS IoT richiama il livello TLS quando viene stabilita una nuova connessione. Per personalizzare l'autenticazione client per eseguire la convalida personalizzata del certificato client, devi aggiungere l'ARN della funzione Lambda che hai creato nel passaggio precedente.

*Per ulteriori informazioni, consulta [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e utilizza l'AWS IoT API [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)Reference.* Per ulteriori informazioni sulle configurazioni dei domini, consulta Configurazioni dei [domini](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Utenti, gruppi e ruoli IAM
<a name="iam-users-groups-roles"></a>

Gli utenti, i gruppi e i ruoli IAM; sono i meccanismi standard per la gestione di identità e autenticazione nei servizi AWS. Puoi usarli per connetterti alle interfacce AWS IoT HTTP utilizzando l' AWS SDK e. AWS CLI

I ruoli IAM consentono inoltre AWS IoT di accedere ad altre AWS risorse del tuo account per tuo conto. Ad esempio, se desideri che un dispositivo pubblichi il suo stato su una tabella DynamoDB, i ruoli IAM AWS IoT consentono di interagire con Amazon DynamoDB. Per ulteriori informazioni, consulta [IAM Roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) (Ruoli IAM).

Per le connessioni ai broker di messaggi tramite HTTP, AWS IoT autentica utenti, gruppi e ruoli utilizzando il processo di firma Signature Version 4. Per informazioni, consulta [Firmare le richieste AWS API](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).

Quando si utilizza AWS Signature Version 4 con AWS IoT, i client devono supportare quanto segue nella loro implementazione TLS:
+ TLS 1.2
+ Convalida della firma dei certificati SHA-256 RSA.
+ Uno dei pacchetti di crittografia indicati nella sezione relativa ai pacchetti di crittografia TLS supportati.

Per informazioni, consulta [Gestione delle identità e degli accessi per AWS IoT](security-iam.md).

# Identità Amazon Cognito
<a name="cognito-identities"></a>

Amazon Cognito Identity ti consente di creare AWS credenziali temporanee con privilegi limitati da utilizzare in applicazioni mobili e Web. Quando usi Amazon Cognito Identity, crea pool di identità che creano identità uniche per i tuoi utenti e autenticali con provider di identità come Login with Amazon, Facebook e Google. È inoltre possibile utilizzare le identità Amazon Cognito con identità autenticate dallo sviluppatore. Per ulteriori informazioni, consulta [ Amazon Cognito Identity](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html).

Per utilizzare Amazon Cognito Identity, definisci un pool di identità Amazon Cognito associato a un ruolo IAM. Il ruolo IAM è associato a una policy IAM che concede alle identità del tuo pool di identità l'autorizzazione ad accedere a AWS risorse come i servizi di chiamata. AWS 

Amazon Cognito Identity crea identità non autenticate e autenticate. Le identità non autenticate vengono utilizzate per gli utenti guest di un'applicazione mobile o Web che desiderano utilizzare l'app senza accedere. Agli utenti non autenticati vengono concesse solo le autorizzazioni specificate nelle policy IAM associate al pool di identità.

Quando utilizzi identità autenticate, oltre alla policy IAM associata al pool di identità, devi allegare una AWS IoT policy a un'identità Amazon Cognito. Per allegare una AWS IoT policy, usa l'[ AttachPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html)API e concedi le autorizzazioni a un singolo utente della tua applicazione. AWS IoT Puoi utilizzare la AWS IoT policy per assegnare autorizzazioni dettagliate a clienti specifici e ai relativi dispositivi.

Gli utenti autenticati e non autenticati sono diversi tipi di identità. Se non alleghi una AWS IoT policy all'identità di Amazon Cognito, un utente autenticato non ottiene l'autorizzazione AWS IoT e non ha accesso a AWS IoT risorse e azioni. Per ulteriori informazioni sulla creazione di policy per le identità Amazon Cognito, consulta [Esempi di policy di pubblicazione/sottoscrizione](pub-sub-policy.md) e [Autorizzazione con identità Amazon Cognito](cog-iot-policies.md).

![\[Applicazione che accede a un dispositivo con Amazon Cognito Identity.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/device-cognito.png)


# Autenticazione e autorizzazione personalizzata
<a name="custom-authentication"></a>

 AWS IoT Core consente di definire autorizzatori personalizzati in modo da poter gestire l'autenticazione e l'autorizzazione dei client. Ciò è utile quando è necessario utilizzare meccanismi di autenticazione diversi da quelli supportati AWS IoT Core nativamente. (Per ulteriori informazioni sui meccanismi supportati in modo nativo, consulta [Autenticazione client](client-authentication.md)).  

 Ad esempio, se state migrando dispositivi esistenti sul campo verso AWS IoT Core e questi dispositivi utilizzano un token bearer personalizzato o un nome utente e una password MQTT per l'autenticazione, potete migrarli AWS IoT Core senza dover fornire loro nuove identità. È possibile utilizzare l'autenticazione personalizzata con tutti i protocolli di comunicazione supportati. AWS IoT Core Per ulteriori informazioni sui protocolli supportati da AWS IoT Core , consulta [Protocolli di dispositivo di comunicazione](protocols.md). 

**Topics**
+ [

# Informazioni sul flusso di lavoro di autenticazione personalizzato
](custom-authorizer.md)
+ [

# Creazione e gestione di autorizzazioni personalizzate (CLI)
](config-custom-auth.md)
+ [

# Autenticazione personalizzata con certificati client X.509
](custom-auth-509cert.md)
+ [

# Connessione a AWS IoT Core tramite autenticazione personalizzata
](custom-auth.md)
+ [

# Risoluzione dei problemi relativi agli autorizzatori
](custom-auth-troubleshooting.md)

# Informazioni sul flusso di lavoro di autenticazione personalizzato
<a name="custom-authorizer"></a>

L'autenticazione personalizzata consente di definire come autenticare e autorizzare i client utilizzando le [risorse dell'autorizzatore](https://docs.aws.amazon.com/iot/latest/apireference/API_AuthorizerDescription.html).  Ogni autorizzatore contiene un riferimento a una funzione Lambda gestita dal cliente, una chiave pubblica opzionale per la convalida delle credenziali del dispositivo e informazioni di configurazione aggiuntive. Il diagramma seguente illustra il flusso di lavoro di autorizzazione per l'autenticazione personalizzata in. AWS IoT Core

![\[Flusso di lavoro di autorizzazione personalizzato per l'autenticazione personalizzata in. AWS IoT Core\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/custom-authentication.png)


## AWS IoT Core flusso di lavoro di autenticazione e autorizzazione personalizzato
<a name="custom-authentication-workflow"></a>

Nell'elenco seguente viene illustrato ogni passaggio del flusso di lavoro di autenticazione e autorizzazione personalizzata.

1. Un dispositivo si connette all'endpoint di AWS IoT Core dati di un cliente utilizzando uno dei dispositivi supportati[Protocolli di dispositivo di comunicazione](protocols.md). Il dispositivo passa le credenziali nei campi di intestazione o nei parametri di query della richiesta (per i WebSockets protocolli HTTP Publish o MQTT over) o nel campo nome utente e password del messaggio MQTT CONNECT (per i protocolli MQTT e MQTT over). WebSockets 

1. AWS IoT Core verifica una delle due condizioni:
   + La richiesta in arrivo specifica un autorizzatore.
   + Per l'endpoint di AWS IoT Core dati che riceve la richiesta è configurato un autorizzatore predefinito.

   Se AWS IoT Core trova un autorizzatore in uno di questi modi, AWS IoT Core attiva la funzione Lambda associata all'autorizzatore.

1.  (Facoltativo) Se hai abilitato la firma con token, AWS IoT Core convalida la firma della richiesta utilizzando la chiave pubblica memorizzata nell'autorizzatore prima di attivare la funzione Lambda. Se la convalida non riesce, AWS IoT Core interrompe la richiesta senza invocare la funzione Lambda.  

1. La funzione Lambda riceve le credenziali e i metadati di connessione nella richiesta e prende una decisione di autenticazione.

1. La funzione Lambda restituisce i risultati della decisione di autenticazione e un documento di AWS IoT Core policy che specifica quali azioni sono consentite nella connessione. La funzione Lambda restituisce anche informazioni che specificano la frequenza di AWS IoT Core riconvalida delle credenziali nella richiesta richiamando la funzione Lambda.

1. AWS IoT Core valuta l'attività sulla connessione rispetto alla policy ricevuta dalla funzione Lambda.

1. Dopo aver stabilito la connessione e richiamato inizialmente l'autorizzatore personalizzato Lambda, la chiamata successiva può essere ritardata fino a 5 minuti su connessioni inattive senza alcuna operazione MQTT. Dopodiché, le chiamate successive seguiranno l'intervallo di aggiornamento nell'autorizzatore personalizzato Lambda. Questo approccio può prevenire invocazioni eccessive che potrebbero superare il limite di concorrenza Lambda del tuo. Account AWS

## Considerazioni sul dimensionamento
<a name="custom-authentication-scaling"></a>

 Poiché una funzione Lambda gestisce l'autenticazione e l'autorizzazione per l'autorizzatore, la funzione è soggetta ai prezzi e ai limiti del servizio Lambda, ad esempio la frequenza di esecuzione simultanea. Per ulteriori informazioni sui prezzi Lambda, consulta [Prezzi Lambda](https://aws.amazon.com/lambda/pricing/). È possibile gestire il carico sulla funzione Lambda regolando `refreshAfterInSeconds` e `disconnectAfterInSeconds` nella risposta della funzione Lambda. Per ulteriori informazioni sui contenuti della risposta della funzione Lambda, consulta [Scrittura della funzione Lambda](custom-auth-lambda.md).

**Nota**  
Se si lascia abilitata la firma, è possibile impedire l'attivazione eccessiva di Lambda da parte di client non riconosciuti. Consideralo prima di disabilitare l'accesso all'autorizzatore.

**Nota**  
Il limite di timeout della funzione Lambda per l'autorizzatore personalizzato è di 5 secondi.

# Creazione e gestione di autorizzazioni personalizzate (CLI)
<a name="config-custom-auth"></a>

AWS IoT Core implementa schemi di autenticazione e autorizzazione personalizzati utilizzando autorizzatori personalizzati. Un autorizzatore personalizzato è una AWS IoT Core risorsa che offre la flessibilità necessaria per definire e implementare le regole e le politiche in base ai requisiti specifici. Per creare un autorizzatore personalizzato con step-by-step istruzioni, vedi [Tutorial: Creazione di un autorizzatore personalizzato](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html) per. AWS IoT Core

Ogni autorizzatore è costituito dai seguenti componenti: 
+  *Nome*: stringa univoca definita dall'utente che identifica l'autorizzatore.
+  *ARN della funzione Lambda*: L'Amazon Resource Name (ARN) della funzione Lambda che implementa la logica di autorizzazione e di autenticazione.  
+  *Nome della chiave dei token*: Il nome della chiave utilizzato per estrarre il token dalle intestazioni HTTP, dai parametri di query o dal nome utente MQTT CONNECT per eseguire la convalida della firma. Questo valore è obbligatorio se la firma è abilitata nell'autorizzazione. 
+  *Contrassegno di firma disabilitato (facoltativo)*: valore booleano che specifica se disattivare il requisito di firma sulle credenziali. Ciò è utile per gli scenari in cui la firma delle credenziali non ha senso, ad esempio gli schemi di autenticazione che utilizzano il nome utente e la password MQTT. Il valore predefinito è `false`, pertanto la firma è abilitata per impostazione predefinita. 
+  *Chiave pubblica per la firma di token*: chiave pubblica utilizzata da AWS IoT Core per convalidare la firma del token. La sua lunghezza minima è di 2.048 bit. Questo valore è obbligatorio se la firma è abilitata nell'autorizzatore.  

Lambda addebita per il numero di volte in cui la tua funzione Lambda viene eseguita e per il tempo necessario per l'esecuzione del codice nella funzione. Per maggiori informazioni sui prezzi di Lambda consulta [Prezzi Lambda](https://aws.amazon.com/lambda/pricing/). Per ulteriori informazioni sulla creazione di funzioni Lambda, consulta [Guida per gli sviluppatori di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

**Nota**  
Se si lascia abilitata la firma, è possibile impedire l'attivazione eccessiva di Lambda da parte di client non riconosciuti. Consideralo prima di disabilitare l'accesso nel tuo autorizzatore.

**Nota**  
Il limite di timeout della funzione Lambda per l'autorizzatore personalizzato è di 5 secondi.

**Topics**
+ [

# Scrittura della funzione Lambda
](custom-auth-lambda.md)
+ [

# Creazione di un autorizzatore
](custom-auth-create-authorizer.md)
+ [

# Autorizzazione AWS IoT a richiamare la funzione Lambda
](custom-auth-authorize.md)
+ [

# Verificare le autorizzazioni
](custom-auth-testing.md)
+ [

# Gestione degli autorizzatori personalizzati
](custom-auth-manage.md)

# Scrittura della funzione Lambda
<a name="custom-auth-lambda"></a>

 Quando AWS IoT Core richiama l'autorizzatore, attiva la Lambda associata all'autorizzatore con un evento che contiene il seguente oggetto JSON. L'oggetto JSON di esempio contiene tutti i campi possibili. I campi non rilevanti per la richiesta di connessione non sono inclusi.

```
{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}
```

 La funzione Lambda deve utilizzare queste informazioni per autenticare la connessione in ingresso e decidere quali azioni sono consentite nella connessione. La funzione deve inviare una risposta che contiene i seguenti valori. 
+  `isAuthenticated`: valore booleano che indica se la richiesta è stata autenticata.
+  `principalId`: Una stringa alfanumerica che funge da identificatore per il token inviato dalla richiesta di autorizzazione personalizzata. Il valore deve essere una stringa alfanumerica con almeno uno e non più di 128 caratteri e corrisponde a questo pattern di espressione regolare (regex):`([a-zA-Z0-9]){1,128}`. I caratteri speciali che non sono alfanumerici non possono essere utilizzati con l'in. `principalId` AWS IoT Core Consultate la documentazione relativa agli altri AWS servizi se sono consentiti caratteri speciali non alfanumerici per. `principalId`
+  `policyDocuments`: Un elenco di documenti relativi alle policy in formato JSON Per ulteriori informazioni sulla creazione di AWS IoT Core policy, vedere. AWS IoT Core [AWS IoT Core politiche](iot-policies.md) Il numero massimo di documenti di policy è di 10. Ogni documento di policy può contenere un massimo di 2.048 caratteri.
+  `disconnectAfterInSeconds`: numero intero che specifica la durata massima (in secondi) della connessione al gateway di AWS IoT Core . Il valore minimo è 300 secondi e il valore massimo è 86400 secondi. Il valore predefinito è 86.400.
**Nota**  
Il valore di `disconnectAfterInSeconds` (restituito dalla funzione Lambda) viene impostato quando viene stabilita la connessione. Questo valore non può essere modificato durante le successive chiamate Lambda di aggiornamento delle policy.
+  `refreshAfterInSeconds`: numero intero che specifica l'intervallo tra gli aggiornamenti delle policy. Passato questo intervallo, AWS IoT Core richiama la funzione Lambda per consentire gli aggiornamenti delle policy. Il valore minimo è 300 secondi e il valore massimo è 86400 secondi. 

  Il seguente oggetto JSON contiene un esempio di risposta che la funzione Lambda può inviare. 

 **\$1 "isAuthenticated":true, //A Boolean that determines whether client can connect. "principalId": "xxxxxxxx",  //A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400,  "refreshAfterInSeconds": 300,   "policyDocuments": [       \$1         "Version": "2012-10-17",         "Statement": [            \$1               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your\$1aws\$1account\$1id>:topic/customauthtesting"             \$1          ]        \$1     ] \$1**

 Il `policyDocument` valore deve contenere un documento di policy valido. AWS IoT Core Per ulteriori informazioni sulle AWS IoT Core politiche, vedere[AWS IoT Core politiche](iot-policies.md). In MQTT su TLS e MQTT su WebSockets connessioni, AWS IoT Core memorizza nella cache questa politica per l'intervallo specificato nel valore del campo. `refreshAfterInSeconds` Nel caso di connessioni HTTP, la funzione Lambda viene richiamata per ogni richiesta di autorizzazione a meno che il dispositivo non utilizzi connessioni persistenti HTTP (chiamate anche HTTP keep-alive o riutilizzo della connessione HTTP), è possibile scegliere di abilitare la memorizzazione nella cache durante la configurazione dell'autorizzatore. Durante questo intervallo, AWS IoT Core autorizza le azioni in una connessione stabilita contro questa policy memorizzata nella cache senza attivare nuovamente la funzione Lambda. Se si verificano errori durante l'autenticazione personalizzata, interrompe la connessione. AWS IoT Core AWS IoT Core interrompe inoltre la connessione se è rimasta aperta per un periodo superiore al valore specificato nel parametro. `disconnectAfterInSeconds` 

 Di seguito JavaScript è riportato un esempio di funzione Lambda di Node.js che cerca una password nel messaggio MQTT Connect con un valore `test` di e restituisce un criterio che concede il permesso di connettersi AWS IoT Core a un client `myClientName` denominato e pubblicare su un argomento che contiene lo stesso nome client. Se non trova la password prevista, restituisce una policy che nega queste due operazioni. 

```
// A simple Lambda function for an authorizer. It demonstrates 
// how to parse an MQTT password and generate a response.

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = new Buffer(pwd, 'base64');
    var passwd = buff.toString('ascii');
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
            break;
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17';		 	 	 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}
```

 La suddetta funzione Lambda restituisce il seguente JSON quando riceve la password prevista di `test` nel messaggio MQTT Connect. I valori delle proprietà `password` e `principalId` saranno i valori del messaggio MQTT Connect.

```
{
  "password": "password",
  "isAuthenticated": true,
  "principalId": "principalId",
  "policyDocuments": [
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "iot:Connect",
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Action": "iot:Publish",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Subscribe",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Receive",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        }
      ]
    }
  ],
  "disconnectAfterInSeconds": 3600,
  "refreshAfterInSeconds": 300
}
```

# Creazione di un autorizzatore
<a name="custom-auth-create-authorizer"></a>

 [È possibile creare un autorizzatore utilizzando l'API. CreateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuthorizer.html) L'esempio seguente descrive il comando. 

```
aws iot create-authorizer
--authorizer-name MyAuthorizer
--authorizer-function-arn arn:aws:lambda:us-west-2:<account_id>:function:MyAuthorizerFunction  //The ARN of the Lambda function.
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
 "-----BEGIN PUBLIC KEY-----
  [...insert your public key here...] 
  -----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
```

Puoi utilizzare il parametro `signing-disabled` per disattivare la convalida della firma per ogni chiamata dell'autorizzatore. Si consiglia vivamente di non disattivare la firma a meno che non sia necessario. La convalida della firma ti protegge da invocazioni eccessive della funzione Lambda da dispositivi sconosciuti. Non è possibile aggiornare lo status `signing-disabled` di un autorizzatore dopo averlo creata. Per modificare questo comportamento, è necessario creare un altro autorizzatore personalizzato con un valore diverso per il parametro `signing-disabled`. 

I valori per i parametri `tokenKeyName` e `tokenSigningPublicKeys` sono facoltativi se la firma è stata disabilitata. Sono valori obbligatori se la firma è abilitata. 

Dopo aver creato la funzione Lambda e l'autorizzatore personalizzato, devi concedere esplicitamente al AWS IoT Core servizio l'autorizzazione a richiamare la funzione per tuo conto. Puoi farlo con il seguente comando. 

**Nota**  
L'endpoint IoT predefinito potrebbe non supportare l'utilizzo di autorizzazioni personalizzate con funzioni Lambda. Puoi invece utilizzare le configurazioni di dominio per definire un nuovo endpoint e quindi specificare quell'endpoint per l'autorizzatore personalizzato.

```
aws lambda add-permission --function-name <lambda_function_name>
--principal iot.amazonaws.com --source-arn <authorizer_arn>
--statement-id Id-123 --action "lambda:InvokeFunction"
```

# Autorizzazione AWS IoT a richiamare la funzione Lambda
<a name="custom-auth-authorize"></a>

In questa sezione, concederai l'autorizzazione della risorsa di autorizzazione personalizzata che hai appena creato per eseguire la funzione Lambda. Per concedere l'autorizzazione, è possibile utilizzare il comando dell'interfaccia a riga di comando [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Concedi l'autorizzazione alla tua funzione Lambda utilizzando il AWS CLI**

1. Una volta inseriti i valori, inserisci il comando seguente. Attenzione: il valore `statement-id` deve essere univoco. Sostituisci `Id-1234` con il valore esatto che hai, altrimenti potresti ricevere un `ResourceConflictException` errore.

   ```
   aws lambda add-permission  \
   --function-name "custom-auth-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn authorizerArn
   ```

1. Se il comando viene completato correttamente, restituisce un'istruzione di autorizzazione come questa. È possibile passare alla sezione successiva per testare l'autorizzazione ad hoc.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}"
   }
   ```

   Se il comando non ha esito positivo, restituisce un errore come questo. Dovrai esaminare e correggere l'errore prima di continuare.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function
   ```

# Verificare le autorizzazioni
<a name="custom-auth-testing"></a>

 Puoi utilizzare l'[TestInvokeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_TestInvokeAuthorizer.html)API per testare l'invocazione e restituire i valori del tuo autorizzatore. Questa API consente di specificare i metadati del protocollo e di testare la convalida della firma nell'autorizzatore.

Le seguenti schede mostrano come utilizzare per testare l'autorizzatore AWS CLI .

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER \
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER ^
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER `
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------

Il valore del parametro `token-signature` è il token firmato. Per ulteriori informazioni su come modificare questo valore, consulta [Firma del token](custom-auth.md#custom-auth-token-signature).

Se l'autorizzatore accetta un nome utente e una password, puoi trasferire queste informazioni utilizzando il parametro `--mqtt-context`. Nelle seguenti schede viene illustrato come utilizzare l'API `TestInvokeAuthorizer` per inviare un oggetto JSON che contiene un nome utente, una password e un nome client all'autorizzatore personalizzato.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  \
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  ^
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  `
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------

La password deve essere con codifica base64. Nell'esempio seguente viene illustrato come codificare una password in un ambiente simile a UNIX.

```
echo -n PASSWORD | base64
```

# Gestione degli autorizzatori personalizzati
<a name="custom-auth-manage"></a>

 Puoi gestire i tuoi autorizzatori utilizzando quanto segue. APIs 
+ [ListAuthorizers](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuthorizers.html): Mostra tutti gli autorizzatori presenti nel tuo account.
+  [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html): visualizza le proprietà dell'autorizzatore specificato. Questi valori includono data di creazione, data ultima modifica e altri attributi.
+ [SetDefaultAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_SetDefaultAuthorizer.html): specifica l'autorizzatore predefinito per gli endpoint di dati AWS IoT Core . AWS IoT Core utilizza questo autorizzatore se un dispositivo non trasmette AWS IoT Core le credenziali e non specifica un autorizzatore. Per ulteriori informazioni sull'utilizzo delle AWS IoT Core credenziali, vedere. [Autenticazione client](client-authentication.md)
+ [UpdateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuthorizer.html): modifica lo stato, il nome della chiave del token o le chiavi pubbliche per l'autorizzatore specificato.
+  [DeleteAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuthorizer.html): elimina l'autorizzatore specificato. 

**Nota**  
 Non è possibile aggiornare i requisiti di firma di un autorizzatore. Ciò significa che non è possibile disabilitare la firma in un autorizzatore esistente che la richiede. Inoltre, non è possibile richiedere la firma a un autorizzatore esistente che non la richiede. 

# Autenticazione personalizzata con certificati client X.509
<a name="custom-auth-509cert"></a>

Quando si collegano dispositivi a AWS IoT Core, sono disponibili più [tipi di autenticazione](protocols.md#connection-protocol-auth-mode). È possibile utilizzare [certificati client X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) che possono essere utilizzati per autenticare le connessioni di client e dispositivi o definire [autorizzatori personalizzati](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html) per gestire la propria logica di autenticazione e autorizzazione dei client. Questo argomento spiega come utilizzare l'autenticazione personalizzata con i certificati client X.509.

L'utilizzo dell'autenticazione personalizzata con i certificati X.509 può essere utile se hai già autenticato i tuoi dispositivi utilizzando certificati X.509 e desideri eseguire ulteriori convalide e autorizzazioni personalizzate. Ad esempio, se si archiviano i dati dei dispositivi, come i numeri di serie, nel certificato client X.509, dopo aver AWS IoT Core autenticato il certificato client X.509, è possibile utilizzare un autorizzatore personalizzato per identificare dispositivi specifici in base alle informazioni memorizzate nel campo del certificato. CommonName L'utilizzo dell'autenticazione personalizzata con certificati X.509 può migliorare la gestione della sicurezza dei dispositivi durante la connessione dei dispositivi AWS IoT Core e offre maggiore flessibilità nella gestione della logica di autenticazione e autorizzazione. AWS IoT Core [https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) [Per ulteriori informazioni sui tipi di autenticazione e sui protocolli applicativi supportati dagli endpoint dei dispositivi, vedere Protocolli di comunicazione dei AWS IoT Core dispositivi.](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html)

**Nota**  
L'autenticazione personalizzata con certificati client X.509 non è supportata nelle regioni. AWS GovCloud (US) 

**Importante**  
[È necessario utilizzare un endpoint creato utilizzando configurazioni di dominio.](iot-custom-endpoints-configurable.md) Inoltre, i client devono fornire l'estensione [SNI (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) durante la connessione a. AWS IoT Core

**Topics**
+ [

## Fase 1: Registrare i certificati client X.509 con AWS IoT Core
](#custom-auth-509cert-client)
+ [

## Passaggio 2: creazione di una funzione Lambda
](#custom-auth-509cert-lambda)
+ [

## Fase 3: Creare un autorizzatore personalizzato
](#custom-auth-509cert-authorizer)
+ [

## Fase 4: Impostare il tipo di autenticazione e il protocollo applicativo in una configurazione di dominio
](#custom-auth-509cert-domainconfig)

## Fase 1: Registrare i certificati client X.509 con AWS IoT Core
<a name="custom-auth-509cert-client"></a>

Se non l'hai già fatto, registra e attiva i certificati client [X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) con. AWS IoT Core Altrimenti, passare alla fase successiva.

Per registrare e attivare i certificati client con AWS IoT Core, procedi nel seguente modo:

1. Se [crei certificati client direttamente con AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html). Questi certificati client verranno registrati automaticamente con AWS IoT Core.

1. Se [crei i tuoi certificati client](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html), segui [queste istruzioni per registrarli AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. Per attivare i certificati client, segui [queste istruzioni](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html).

## Passaggio 2: creazione di una funzione Lambda
<a name="custom-auth-509cert-lambda"></a>

AWS IoT Core utilizza autorizzatori personalizzati per implementare schemi di autenticazione e autorizzazione personalizzati. Un autorizzatore personalizzato è associato a una funzione Lambda che determina se un dispositivo è autenticato e quali operazioni il dispositivo è autorizzato a eseguire. Quando un dispositivo si connette a AWS IoT Core, AWS IoT Core recupera i dettagli dell'autorizzatore, incluso il nome dell'autorizzatore e la funzione Lambda associata, e richiama la funzione Lambda. La funzione Lambda riceve un evento che contiene un oggetto JSON con i dati del certificato client X.509 del dispositivo. La tua funzione Lambda utilizza questo oggetto JSON di eventi per valutare la richiesta di autenticazione, decidere le azioni da intraprendere e inviare una risposta.

### Esempio di evento della funzione Lambda
<a name="custom-auth-509cert-event"></a>

L'oggetto JSON di esempio seguente contiene tutti i campi possibili che possono essere inclusi. L'oggetto JSON effettivo conterrà solo i campi relativi alla richiesta di connessione specifica.

```
{
	"token": "aToken",
	"signatureVerified": true,
	"protocols": [
		"tls",
		"mqtt"
	],
	"protocolData": {
		"tls": {
			"serverName": "serverName",
			"x509CertificatePem": "x509CertificatePem",
			"principalId": "principalId"
		},
		"mqtt": {
			"clientId": "myClientId",
                     "username": "myUserName",
                     "password": "myPassword"
		}
	},
	"connectionMetadata": {
		"id": "UUID"
	}
}
```

`signatureVerified`  
Un valore booleano che indica se la firma del token configurata nell'autorizzatore è verificata o meno prima di richiamare la funzione Lambda dell'autorizzatore. Se l'autorizzatore è configurato per disabilitare la firma tramite token, questo campo sarà falso. 

`protocols`  
Un array che contiene i protocolli previsti per la richiesta.

`protocolData`  
Un oggetto che contiene informazioni sui protocolli utilizzati nella connessione. Fornisce dettagli specifici del protocollo che possono essere utili per l'autenticazione, l'autorizzazione e altro ancora.  
`tls`- Questo oggetto contiene informazioni relative al protocollo TLS (Transport Layer Security).   
+ `serverName`- La stringa del [nome host SNI (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1). AWS IoT Core richiede che i dispositivi inviino l'[estensione SNI](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) al protocollo Transport Layer Security (TLS) e forniscano l'indirizzo completo dell'endpoint sul campo. `host_name`
+ `x509CertificatePem`- Il certificato X.509 in formato PEM, utilizzato per l'autenticazione del client nella connessione TLS.
+ `principalId`- L'identificatore principale associato al client nella connessione TLS.
`mqtt`- Questo oggetto contiene informazioni relative al protocollo MQTT.  
+ `clientId`- È necessario includere una stringa solo nel caso in cui il dispositivo invii questo valore.
+ `username`- Il nome utente fornito nel pacchetto MQTT Connect.
+ `password`- La password fornita nel pacchetto MQTT Connect.

`connectionMetadata`  
Metadati della connessione.  
`id`- L'ID di connessione, che è possibile utilizzare per la registrazione e la risoluzione dei problemi.

**Nota**  
In questo caso, oggetto JSON, `x509CertificatePem` e `principalId` ci sono due nuovi campi nella richiesta. Il valore di `principalId` è uguale al valore di`certificateId`. Per ulteriori informazioni, consulta [Certificato](https://docs.aws.amazon.com//iot/latest/apireference/API_Certificate.html).

### Esempio di risposta alla funzione Lambda
<a name="custom-auth-509cert-response"></a>

La funzione Lambda deve utilizzare le informazioni dell'oggetto JSON dell'evento per autenticare la connessione in ingresso e decidere quali azioni sono consentite nella connessione.

Il seguente oggetto JSON contiene un esempio di risposta che la funzione Lambda può inviare.

```
{
	"isAuthenticated": true,
	"principalId": "xxxxxxxx",
	"disconnectAfterInSeconds": 86400,
	"refreshAfterInSeconds": 300,
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Effect": "Allow",
					"Action": "iot:Publish",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting"
				}
			]
		}
	]
}
```

In questo esempio, questa funzione dovrebbe inviare una risposta che contenga i seguenti valori.

`isAuthenticated`  
Un valore booleano che indica se la richiesta è autenticata.

`principalId`  
Una stringa alfanumerica che funge da identificatore per il token inviato dalla richiesta di autorizzazione personalizzata. Il valore deve essere una stringa alfanumerica con almeno uno e non più di 128 caratteri. Identifica la connessione nei registri. Il valore di `principalId` deve essere uguale al valore dell'oggetto JSON dell'`principalId`evento (ad esempio CertificateID del certificato X.509).

`policyDocuments`  
Un elenco di documenti di policy in formato JSON. AWS IoT Core [Il valore è facoltativo e supporta le variabili [thing policy e le variabili certificate policy](https://docs.aws.amazon.com//iot/latest/developerguide/thing-policy-variables.html).](https://docs.aws.amazon.com//iot/latest/developerguide/cert-policy-variables.html) Il numero massimo di documenti relativi alle politiche è 10. Ogni documento di policy può contenere un massimo di 2.048 caratteri. Se hai più politiche collegate al certificato client e alla funzione Lambda, l'autorizzazione è una raccolta di tutte le politiche. Per ulteriori informazioni sulla creazione di AWS IoT Core politiche, consulta [Politiche](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policies.html).

`disconnectAfterInSeconds`  
Un numero intero che specifica la durata massima (in secondi) della connessione al AWS IoT Core gateway. Il valore minimo è 300 secondi e il valore massimo è 86.400 secondi. `disconnectAfterInSeconds`è valido per tutta la durata di una connessione e non viene aggiornato in caso di aggiornamenti consecutivi delle policy.

`refreshAfterInSeconds`  
Un numero intero che specifica l'intervallo tra gli aggiornamenti delle policy. Al termine di questo intervallo, AWS IoT Core richiama la funzione Lambda per consentire gli aggiornamenti delle policy. Il valore minimo è 300 secondi e il valore massimo è 86400 secondi.

### Funzione Lambda di esempio
<a name="custom-auth-509cert-js-example"></a>

Di seguito è riportato un esempio di funzione Lambda di Node.js. La funzione esamina il certificato X.509 del client ed estrae le informazioni pertinenti come il numero di serie, l'impronta digitale e il nome del soggetto. Se le informazioni estratte corrispondono ai valori previsti, al client viene concesso l'accesso per la connessione. Questo meccanismo garantisce che solo i client autorizzati con certificati validi possano stabilire una connessione.

```
const crypto = require('crypto');

exports.handler = async (event) => {
    
    // Extract the certificate PEM from the event
    const certPem = event.protocolData.tls.x509CertificatePem;
    
    // Parse the certificate using Node's crypto module
    const cert = new crypto.X509Certificate(certPem);
    
    var effect = "Deny";
    // Allow permissions only for a particular certificate serial, fingerprint, and subject
    if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial
       && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint
       && cert.subject === "allow.example.com") {
      effect = "Allow";
    }
    
    return generateAuthResponse(event.protocolData.tls.principalId, effect);
};


// Helper function to generate the authorization response.
function generateAuthResponse(principalId, effect) {
    const authResponse = {
        isAuthenticated: true,
        principalId,
        disconnectAfterInSeconds: 3600,
        refreshAfterInSeconds: 300,
        policyDocuments: [
          {
            Version: "2012-10-17",		 	 	 
            Statement: [
              {
                Action: ["iot:Connect"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:client/myClientName"
                ]
              },
              {
                Action: ["iot:Publish"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Subscribe"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Receive"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              }
            ]
          }
        ]
      };

  return authResponse;
}
```

La precedente funzione Lambda restituisce il seguente codice JSON quando riceve un certificato con il numero di serie, l'impronta digitale e l'oggetto previsti. Il valore di `x509CertificatePem` sarà il certificato client fornito nell'handshake TLS. Per ulteriori informazioni, consulta [Definizione della funzione Lambda](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html#custom-auth-lambda).

```
{
	"isAuthenticated": true,
	"principalId": "principalId in the event JSON object",
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Action": "iot:Connect",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName"
				},
				{
					"Action": "iot:Publish",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				},
				{
					"Action": "iot:Subscribe",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
				},
				{
					"Action": "iot:Receive",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				}
			]
		}
	],
	"disconnectAfterInSeconds": 3600,
	"refreshAfterInSeconds": 300
}
```

## Fase 3: Creare un autorizzatore personalizzato
<a name="custom-auth-509cert-authorizer"></a>

Dopo [aver definito la funzione Lambda](#custom-auth-509cert-lambda), crea un autorizzatore personalizzato per gestire la logica di autenticazione e autorizzazione del client. Puoi seguire le istruzioni dettagliate nella [Fase 3: Creare una risorsa di autorizzazione del cliente e la relativa autorizzazione](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html#custom-auth-tutorial-authorizer). Per ulteriori informazioni, consulta [Creazione di un autorizzatore](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html). 

Nel processo di creazione dell'autorizzatore personalizzato, è necessario concedere l' AWS IoT autorizzazione a richiamare la funzione Lambda dopo la sua creazione. Per istruzioni dettagliate, consulta [Autorizzazione AWS IoT a richiamare la funzione Lambda](custom-auth-authorize.md).

## Fase 4: Impostare il tipo di autenticazione e il protocollo applicativo in una configurazione di dominio
<a name="custom-auth-509cert-domainconfig"></a>

Per autenticare i dispositivi utilizzando l'autenticazione personalizzata con certificati client X.509, è necessario impostare il tipo di autenticazione e il protocollo applicativo in una configurazione di dominio e inviare l'estensione SNI. Il valore di `authenticationType` deve essere e `CUSTOM_AUTH_X509` il valore di `applicationProtocol` può essere o. `SECURE_MQTT` `HTTPS`

### Imposta il tipo di autenticazione e il protocollo dell'applicazione nella configurazione del dominio (CLI)
<a name="custom-auth-509cert-cli"></a>

Se non disponi di una configurazione di dominio, usa il [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html)comando per crearne una. Il valore di `authenticationType` deve essere `CUSTOM_AUTH_X509` e il valore di `applicationProtocol` può essere `SECURE_MQTT` o`HTTPS`.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \ 
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

Se hai già una configurazione di dominio, usa il [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html)comando update `authenticationType` e `applicationProtocol` se necessario. Tieni presente che non puoi modificare il tipo o il protocollo di autenticazione sull'endpoint predefinito (`iot:Data-ATS`).

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

`domain-configuration-name`  
Il nome della configurazione di dominio.

`authentication-type`  
Il tipo di autenticazione della configurazione del dominio. Per ulteriori informazioni, vedi [Scelta del tipo di autenticazione](protocols.md#connection-protocol-auth-mode).

`application-protocol`  
Il protocollo applicativo con cui i dispositivi comunicano AWS IoT Core. Per ulteriori informazioni, vedere [Scelta di un protocollo applicativo](protocols.md#protocol-selection).

`--authorizer-config`  
Un oggetto che specifica la configurazione dell'autorizzatore in una configurazione di dominio.

`defaultAuthorizerName`  
Il nome dell'autorizzatore per una configurazione di dominio.

Per ulteriori informazioni, consulta [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)consulta l'*AWS IoT API Reference.* Per ulteriori informazioni sulla configurazione del dominio, consulta [Configurazioni del dominio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Connessione a AWS IoT Core tramite autenticazione personalizzata
<a name="custom-auth"></a>

 I dispositivi possono connettersi AWS IoT Core utilizzando l'autenticazione personalizzata con qualsiasi protocollo che AWS IoT Core supporti la messaggistica dei dispositivi. Per ulteriori informazioni sui protocolli di comunicazione supportati, consulta [Protocolli di dispositivo di comunicazione](protocols.md).  I dati di connessione che passi all'autorizzatore della funzione Lambda dipendono dal protocollo utilizzato. Per ulteriori informazioni sulla creazione dell'autorizzatore della funzione Lambda, consulta [Scrittura della funzione Lambda](custom-auth-lambda.md). Nelle sezioni seguenti viene illustrato come connettersi per l'autenticazione utilizzando ogni protocollo supportato.

## HTTPS
<a name="custom-auth-http"></a>

I dispositivi che inviano dati AWS IoT Core tramite l'[API HTTP Publish](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) possono passare le credenziali tramite le intestazioni di richiesta o i parametri di query nelle richieste HTTP POST. I dispositivi possono specificare un'autorizzatore da richiamare utilizzando l'intestazione `x-amz-customauthorizer-name` o i parametri di query. Se nella tua autorizzazione è abilitata la firma dei token, devi passare `token-key-name` e `x-amz-customauthorizer-signature` nelle intestazioni di richiesta o nei parametri di query. Tieni presente che il `token-signature` valore deve essere codificato come URL quando viene utilizzato JavaScript dall'interno del browser.

**Nota**  
La funzione delle autorizzazioni del cliente per il protocollo HTTPS supporta solo le operazioni di pubblicazione. Per ulteriori informazioni sul protocollo HTTP, consultare [Protocolli di dispositivo di comunicazione](protocols.md).

Le seguenti richieste di esempio mostrano come passare questi parametri sia nelle intestazioni di richiesta che nei parametri di query. 

```
//Passing credentials via headers
POST /topics/topic?qos=qos HTTP/1.1
Host: your-endpoint 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
x-amz-customauthorizer-name: authorizer-name

//Passing credentials via query parameters
POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1
```

## MQTT
<a name="custom-auth-mqtt"></a>

 I dispositivi a cui si connettono AWS IoT Core tramite una connessione MQTT possono trasmettere le credenziali attraverso i campi `username` e `password` dei messaggi MQTT. Il valore `username` può facoltativamente contenere una stringa di query che invia valori aggiuntivi (tra cui un token, una firma e il nome di un autorizzatore) al tuo autorizzatore. Puoi utilizzare questa stringa di query se desideri utilizzare uno schema di autenticazione basato su token anziché i valori `username` e `password`.  

**Nota**  
 I dati nel campo della password sono codificati in base64 da. AWS IoT Core Devono essere decodificati dalla funzione Lambda. 

 L'esempio seguente contiene una stringa `username` che contiene parametri aggiuntivi che specificano un token e una firma.  

```
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value
```

Per richiamare un autorizzatore, i dispositivi che si connettono tramite MQTT e l' AWS IoT Core autenticazione personalizzata devono connettersi alla porta 443. Devono inoltre passare l'estensione TLS Application Layer Protocol Negotiation (ALPN) con un valore di `mqtt` e l'estensione Server Name Indication (SNI) con il nome host del loro endpoint di dati. AWS IoT Core Per evitare potenziali errori, il valore per `x-amz-customauthorizer-signature` deve essere codificato in formato URL. Inoltre, è raccomandabile che anche i valori di `x-amz-customauthorizer-name` e `token-key-name` siano codificati nello stesso formato. Per ulteriori informazioni su questi valori, consulta [Protocolli di dispositivo di comunicazione](protocols.md). [AWS IoT Client per dispositivi SDKs SDKs, dispositivi mobili e AWS IoT dispositivi mobili](iot-sdks.md) V2 può configurare entrambe queste estensioni. 

## MQTT over WebSockets
<a name="custom-auth-websockets"></a>

 I dispositivi che si connettono AWS IoT Core tramite MQTT over WebSockets possono passare le credenziali in uno dei due modi seguenti. 
+ Tramite le intestazioni di richiesta o i parametri di query nella richiesta HTTP UPGRADE per stabilire la connessione. WebSockets 
+ Attraverso i campi `username` e `password` nel messaggio MQTT CONNECT.

 Se si passano le credenziali tramite il messaggio di connessione MQTT, sono necessarie le estensioni ALPN e SNI TLS. Per ulteriori informazioni su queste estensioni, consulta [MQTT](#custom-auth-mqtt). Nell'esempio seguente viene illustrato come trasferire le credenziali tramite la richiesta di aggiornamento HTTP. 

```
GET /mqtt HTTP/1.1
Host: your-endpoint 
Upgrade: WebSocket 
Connection: Upgrade 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
sec-WebSocket-Key: any random base64 value 
sec-websocket-protocol: mqtt 
sec-WebSocket-Version: websocket version
```

## Firma del token
<a name="custom-auth-token-signature"></a>

Devi firmare il token con la chiave privata della coppia di chiavi pubblica-privata che hai utilizzato nella chiamata `create-authorizer`. Gli esempi seguenti mostrano come creare la firma del token utilizzando un comando simile a Unix e. JavaScript Utilizzano l'algoritmo hash SHA-256 per codificare la firma.

------
#### [ Command line ]

```
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
```

------
#### [ JavaScript ]

```
const crypto = require('crypto')

const key = "PEM encoded RSA private key"

const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
```

------

# Risoluzione dei problemi relativi agli autorizzatori
<a name="custom-auth-troubleshooting"></a>

 In questo argomento vengono illustrati i problemi comuni che possono causare problemi nei flussi di lavoro di autenticazione personalizzata e i passaggi per risolverli. **Per risolvere i problemi nel modo più efficace, abilita CloudWatch i log per AWS IoT Core e imposta il livello di registro su DEBUG.** È possibile abilitare CloudWatch i log nella console (). AWS IoT Core [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/) Per ulteriori informazioni sull'attivazione e l'utilizzo dei registri per AWS IoT Core, consulta [Configurare la registrazione AWS IoT](configure-logging.md). 

**Nota**  
Se si lascia il livello di registro su **DEBUG** per lunghi periodi di tempo, CloudWatch potrebbe memorizzare grandi quantità di dati di registrazione. Ciò può aumentare i costi. CloudWatch Prendi in considerazione l'utilizzo della registrazione basata sulle risorse per aumentare la verbosità solo per i dispositivi di un particolare gruppo di oggetti. Per ulteriori informazioni sulle registrazioni basate sulle risorse, consulta [Configurare la registrazione AWS IoT](configure-logging.md). Inoltre, al termine della risoluzione dei problemi, ridurre il livello di registro a un livello meno verboso.

Prima di iniziare la risoluzione dei problemi, consulta [Informazioni sul flusso di lavoro di autenticazione personalizzato](custom-authorizer.md) per una visualizzazione generale del processo di autenticazione personalizzata. Questo ti aiuta a capire dove cercare la fonte di un problema.

In questo argomento vengono illustrate le due seguenti aree da esaminare.
+ Problemi relativi alla funzione Lambda dell’autorizzatore.
+ Problemi relativi al tuo dispositivo.

## Controllo della presenza di problemi nella funzione Lambda dell'autorizzatore
<a name="custom-auth-troubleshooting-lambda"></a>

Esegui la procedura seguente per assicurarti che i tentativi di connessione dei dispositivi richiamino la funzione Lambda.

1. Verifica quale funzione Lambda è associata al tuo autorizzatore.

   Puoi farlo chiamando l'[DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html)API o facendo clic sull'autorizzatore desiderato nella sezione **Secure** della AWS IoT Core console.

1. Controlla i parametri di chiamata per la funzione Lambda. Esegui i seguenti passaggi.

   1. Apri la AWS Lambda console ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) e seleziona la funzione associata al tuo autorizzatore.

   1. Scegli la scheda **Monitor (Monitorare)** e visualizza i parametri relativi al periodo di tempo rilevante per il problema.

1. Se non vedi alcuna chiamata, verifica di AWS IoT Core avere il permesso di richiamare la tua funzione Lambda. Se visualizzi i richiami, vai al passaggio successivo. Esegui la procedura seguente per verificare che la funzione Lambda disponga delle autorizzazioni richieste.

   1. Scegli la scheda **Autorizzazioni** per la tua funzione nella console. AWS Lambda 

   1. Trova la sezione **Resource-based Policy (Policy basata su risorse)** nella parte inferiore della pagina. Se la funzione Lambda dispone delle autorizzazioni richieste, la policy sarà simile all'esempio seguente.  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Id": "default",
        "Statement": [
          {
            "Sid": "Id123",
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName"
              },
              "StringEquals": {
                "AWS:SourceAccount": "111111111111"
              }
            }
          }
        ]
      }
      ```

   1. Questa politica concede l'`InvokeFunction`autorizzazione sulla tua funzione al AWS IoT Core preside. Se non la vedi, dovrai aggiungerla utilizzando l'[AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API. Nell'esempio seguente viene illustrato come eseguire questa operazione utilizzando l' AWS CLI.

      ```
      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
      ```

1. Se visualizzi i richiami, verifica che non vi siano errori. Un errore potrebbe indicare che la funzione Lambda non gestisce correttamente l'evento di connessione che la AWS IoT Core invia.

   Per informazioni sulla gestione dell'evento nella funzione Lambda, consulta [Scrittura della funzione Lambda](custom-auth-lambda.md). È possibile utilizzare la funzionalità test nella AWS Lambda console ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) per codificare i valori di test della funzione per assicurarsi che la funzione gestisca gli eventi correttamente.

1. Se visualizzi i richiami senza errori, ma i tuoi dispositivi non sono in grado di connettersi (o pubblicare, sottoscrivere e ricevere messaggi), il problema potrebbe essere che la policy restituita dalla funzione Lambda non fornisce autorizzazioni per le operazioni che i tuoi dispositivi stanno tentando di eseguire. Eseguire la procedura seguente per determinare se qualcosa non è corretto nella policy restituita dalla funzione.

   1. Utilizza una query Amazon CloudWatch Logs Insights per scansionare i log in un breve periodo di tempo per verificare eventuali errori. La seguente query di esempio ordina gli eventi in base al timestamp e cerca errori.

      ```
      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"    
      ```

   1. Aggiorna la tua funzione Lambda per registrare i dati a cui ritorna AWS IoT Core e l'evento che attiva la funzione. È possibile utilizzare questi registri per esaminare le policy create dalla funzione.

1. Se visualizzi invocazioni senza errori ma i tuoi dispositivi non sono in grado di connettersi (o pubblicare, sottoscrivere e ricevere messaggi), un altro motivo potrebbe essere che la funzione Lambda supera il limite di timeout. Il limite di timeout della funzione Lambda per l'autorizzatore personalizzato è di 5 secondi. Puoi controllare la durata della funzione nei CloudWatch log o nelle metriche. 

## Analisi dei problemi relativi ai dispositivi
<a name="custom-auth-troubleshooting-investigate"></a>

Se non riscontri problemi con il richiamo della funzione Lambda o con la policy restituita dalla funzione, cerca i problemi con la connessione dei tuoi dispositivi. Le richieste di connessione AWS IoT Core non corrette possono impedire l'attivazione dell'autorizzatore. I problemi di connessione possono verificarsi sia a livello TLS che a livello di applicazione.

**Possibili problemi di livello TLS:**
+ I clienti devono inserire un'intestazione del nome host (HTTP, MQTT over WebSockets) o l'estensione TLS Server Name Indication (HTTP, MQTT over WebSockets, MQTT) in tutte le richieste di autenticazione personalizzate. In entrambi i casi, il valore passato deve corrispondere a uno degli endpoint di dati del tuo account. AWS IoT Core Questi sono gli endpoint restituiti quando si eseguono i seguenti comandi CLI.
  + `aws iot describe-endpoint --endpoint-type iot:Data-ATS`
  + `aws iot describe-endpoint --endpoint-type iot:Data`(per gli VeriSign endpoint precedenti)
+ I dispositivi che utilizzano l'autenticazione personalizzata nelle connessioni MQTT devono anche inviare l'estensione TLS Application Layer Protocol Negotiation (ALPN) con un valore pari a `mqtt`.
+ L'autenticazione personalizzata è attualmente disponibile solo sulla porta 443.

**Possibili problemi relativi al livello dell'applicazione:**
+ Se la firma è abilitata (il campo `signingDisabled` è false nel tuo autorizzatore), cerca i seguenti problemi di firma.
  + Assicurati di passare la firma del token nell'intestazione`x-amz-customauthorizer-signature` o in un parametro di stringa di query.
  + Assicurati che il servizio non firmi un valore diverso dal token.
  + Assicurati di passare il token nel parametro di intestazione o query specificato nel campo `token-key-name` dell'autorizzatore.
+ Assicurati che il nome dell'autorizzatore che si passa nell'intestazione `x-amz-customauthorizer-name` o nel parametro della stringa di query sia valido o che disponga di un autorizzatore predefinito definito per il proprio account.