

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

# AWS IoT tunneling sicuro
<a name="secure-tunneling"></a>

Quando i dispositivi vengono implementati dietro firewall con restrizioni in siti remoti, è necessario disporre di un modo per accedere a tali dispositivi per la risoluzione dei problemi, gli aggiornamenti della configurazione e altre attività operative. Utilizza il tunneling sicuro per stabilire una comunicazione bidirezionale con i dispositivi remoti tramite una connessione sicura gestita da. AWS IoT Il tunneling sicuro non richiede aggiornamenti alle regole del firewall in ingresso esistente, pertanto è possibile mantenere lo stesso livello di sicurezza fornito dalle regole firewall in un sito remoto.

Ad esempio, un dispositivo sensore situato in una fabbrica che si trova a poche centinaia di miglia di distanza sta avendo problemi a misurare la temperatura di fabbrica. È possibile utilizzare il tunneling sicuro per aprire e avviare rapidamente una sessione su quel dispositivo sensore. Dopo aver identificato il problema (ad esempio, un file di configurazione non valido), è possibile reimpostare il file e riavviare il dispositivo sensore attraverso la stessa sessione. Rispetto a una risoluzione dei problemi più tradizionale (ad esempio, l'invio di un tecnico in fabbrica per indagare sul dispositivo sensore), il tunneling sicuro riduce la risposta agli incidenti, i tempi di recupero e i costi operativi.

# Che cos'è il tunneling sicuro?
<a name="secure-tunneling-what-is"></a>

Utilizza il tunneling sicuro per accedere ai dispositivi implementati dietro firewall con restrizioni di porte nei siti remoti. Puoi connetterti al dispositivo di destinazione dal computer portatile o desktop come dispositivo di origine utilizzando il Cloud AWS. L'origine e la destinazione comunicano tra loro utilizzando un proxy locale open source che viene eseguito su ciascun dispositivo. Il proxy locale comunica con il utilizzando una porta aperta consentita Cloud AWS dal firewall, in genere 443. I dati trasmessi attraverso il tunnel vengono crittografati tramite Transport Layer Security (TLS).

**Topics**
+ [Concetti di tunneling sicuri](secure-tunneling-concepts.md)
+ [Come funziona il tunneling sicuro](how-secure-tunneling-works.md)
+ [Ciclo di vita sicuro del tunnel](tunnel-lifecycle.md)

# Concetti di tunneling sicuri
<a name="secure-tunneling-concepts"></a>

Quando stabilisce la comunicazione con i dispositivi remoti, il tunneling sicuro utilizza i seguenti termini. Per ulteriori informazioni sul funzionamento del tunneling sicuro, consulta la sezione [Come funziona il tunneling sicuro](how-secure-tunneling-works.md).

**Token di accesso client (CAT)**  
Una coppia di token generati dal tunneling sicuro quando viene creato un nuovo tunnel. Il CAT viene utilizzato dai dispositivi di origine e di destinazione per connettersi al servizio di tunneling sicuro. Il CAT può essere utilizzato una sola volta per la connessione al tunnel. Per riconnetterti al tunnel, ruota i token di accesso del client utilizzando l'operazione [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API o il comando [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html)CLI.

**Token client**  
Un valore unico generato dal client che il tunneling AWS IoT sicuro può utilizzare per tutti i tentativi di connessione successivi allo stesso tunnel. Questo campo è facoltativo. Se il token client non viene fornito, il token di accesso client (CAT) può essere utilizzato una sola volta per lo stesso tunnel. I tentativi di connessione successivi che utilizzano lo stesso CAT vengono rifiutati. Per ulteriori informazioni sull'utilizzo dei token client, consulta l'implementazione di riferimento del [proxy locale](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/master/V2WebSocketProtocolGuide.md) in. GitHub

**Applicazione di destinazione**  
L'applicazione che viene eseguita sul dispositivo di destinazione. Ad esempio, l'applicazione di destinazione può essere un daemon SSH per stabilire una sessione SSH utilizzando il tunneling sicuro.

**Dispositivo di destinazione**  
Il dispositivo remoto a cui si desidera accedere.

**Agente del dispositivo**  
Un'applicazione IoT che si connette al gateway del AWS IoT dispositivo e ascolta le nuove notifiche del tunnel tramite MQTT. Per ulteriori informazioni, consulta [Snippet dell'agente IoT](configure-remote-device.md#agent-snippet).

**Proxy locale**  
Un proxy software che viene eseguito sui dispositivi di origine e di destinazione e inoltra un flusso dei dati tra il tunneling sicuro e l'applicazione del dispositivo. Il proxy locale può essere eseguito in modalità sorgente o in modalità di destinazione. Per ulteriori informazioni, consulta [Proxy locale](local-proxy.md).

**Dispositivo di origine**  
Il dispositivo utilizzato da un operatore per avviare una sessione sul dispositivo di destinazione, in genere un computer portatile o desktop.

**Tunnel**  
 Un percorso logico AWS IoT che consente la comunicazione bidirezionale tra un dispositivo di origine e un dispositivo di destinazione.

# Come funziona il tunneling sicuro
<a name="how-secure-tunneling-works"></a>

Di seguito viene illustrato il modo in cui il tunneling sicuro stabilisce una connessione tra il dispositivo di origine e quello di destinazione. Per informazioni sui diversi termini, come ad esempio il token di accesso client (CAT), consulta la sezione [Concetti di tunneling sicuri](secure-tunneling-concepts.md).

1. 

**Apertura di un tunnel**  
[Per aprire un tunnel per l'avvio di una sessione con il dispositivo di destinazione remoto, è possibile utilizzare il Console di gestione AWS comando [AWS CLI open-tunnel](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/open-tunnel.html) o l'API. OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel)

1. 

**Eseguire il download della coppia di token di accesso client**  
Dopo avere aperto un tunnel, puoi effettuare il download del token di accesso client (CAT) per l'origine e la destinazione e salvarlo sul dispositivo di origine. Il CAT deve essere recuperato e salvato in questa fase prima di avviare il proxy locale.

1. 

**Avvio del proxy locale nella modalità di destinazione**  
L'agente IoT che è stato installato ed è in esecuzione sul dispositivo di destinazione verrà sottoscritto all'argomento MQTT riservato `$aws/things/thing-name/tunnels/notify` e riceverà il CAT. *thing-name*Ecco il nome dell' AWS IoT oggetto che crei per la tua destinazione. Per ulteriori informazioni, consulta [Argomenti di tunneling sicuro](reserved-topics.md#reserved-topics-secure).

   L'agente IoT utilizza quindi il CAT per avviare il proxy locale in modalità di destinazione e impostare una connessione sul lato di destinazione del tunnel. Per ulteriori informazioni, consulta [Snippet dell'agente IoT](configure-remote-device.md#agent-snippet).

1. 

**Avvio del proxy locale in modalità di origine**  
Dopo l'apertura del tunnel, AWS IoT Device Management fornisce il CAT del codice sorgente che è possibile scaricare sul dispositivo sorgente. Puoi utilizzare il CAT per avviare il proxy locale nella modalità di origine, che quindi collega il lato di origine del tunnel. Per ulteriori informazioni sul proxy locale, consulta la sezione [Proxy locale](local-proxy.md).

1. 

**Apertura di una sessione SSH**  
Poiché entrambi i lati del tunnel sono collegati, puoi avviare una sessione SSH utilizzando il proxy locale sul lato di origine.

Per ulteriori informazioni su come utilizzare per Console di gestione AWS aprire un tunnel e avviare una sessione SSH, vedere[Apertura di un tunnel e avvio di una sessione SSH su un dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md).

 Il seguente video descrive come funziona il tunneling sicuro e ti guiderà attraverso il processo di configurazione di una sessione SSH su un dispositivo Raspberry Pi.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Vq67jKZTR-c/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Vq67jKZTR-c)


# Ciclo di vita sicuro del tunnel
<a name="tunnel-lifecycle"></a>

I tunnel possono avere lo stato `OPEN` o `CLOSED`. Le connessioni al tunnel possono avere lo stato `CONNECTED` o `DISCONNECTED`. Di seguito viene illustrato il funzionamento dei diversi stati del tunnel e della connessione.

1. Quando si apre un tunnel, ha uno stato di `OPEN`. Lo stato della connessione di origine e destinazione del tunnel è impostato su `DISCONNECTED`.

1. Quando un dispositivo (di origine o destinazione) si connette al tunnel, lo stato della connessione corrispondente cambia in `CONNECTED`.

1. Quando un dispositivo si disconnette dal tunnel mentre lo stato della connessione rimane `OPEN`, lo stato della connessione corrispondente torna a `DISCONNECTED`. Un dispositivo può collegarsi e scollegarsi da un tunnel ripetutamente finché il tunnel rimane `OPEN`.
**Nota**  
I token di accesso client (CAT) possono essere utilizzati una sola volta per connettersi a un tunnel. Per riconnetterti al tunnel, ruota i token di accesso del client utilizzando l'operazione [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API o il comando [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html)CLI. Per alcuni esempi, consulta [Risoluzione dei problemi di connettività del tunneling AWS IoT sicuro mediante la rotazione dei token di accesso del client](iot-secure-tunneling-troubleshooting.md).

1. Quando chiami `CloseTunnel` o il tunnel rimane `OPEN` per più tempo del valore `MaxLifetimeTimeout`, lo stato del tunnel diventa `CLOSED`. È possibile configurare `MaxLifetimeTimeout` quando si chiama `OpenTunnel`. `MaxLifetimeTimeout` viene impostato su 12 ore se non si specifica un valore.
**Nota**  
Un tunnel non può essere riaperto quando lo stato è `CLOSED`.

1. Mentre il tunnel è visibile, puoi chiamare `DescribeTunnel` e `ListTunnels` per visualizzare i metadati del tunnel. Il tunnel può essere visibile nella AWS IoT console per almeno tre ore prima di essere eliminato. 

# AWS IoT tutorial di tunneling sicuro
<a name="secure-tunneling-tutorial"></a>

AWS IoT il tunneling sicuro aiuta i clienti a stabilire una comunicazione bidirezionale con i dispositivi remoti protetti da un firewall tramite una connessione sicura gestita da. AWS IoT

[Per una dimostrazione del tunneling AWS IoT sicuro, usa la nostra demo di tunneling sicuro su.AWS IoT GitHub](https://github.com/aws-samples/iot-secure-tunneling-demo)

I tutorial seguenti ti aiutano a imparare a utilizzare il tunneling sicuro. Imparerai a:

1. Creare un tunnel sicuro utilizzando i metodi di configurazione rapida e manuale per accedere al dispositivo remoto.

1. Configurare il proxy locale quando si utilizza il metodo di configurazione manuale e connettersi al tunnel per accedere al dispositivo di destinazione.

1. Accedere tramite SSH al dispositivo remoto da un browser senza dover configurare il proxy locale.

1. Converti un tunnel creato utilizzando AWS CLI o utilizzando il metodo di configurazione manuale per utilizzare il metodo di configurazione rapida.

## Tutorial in questa sezione
<a name="tunneling-tutorial-overview"></a>

I tutorial in questa sezione si concentrano sulla creazione di un tunnel utilizzando Console di gestione AWS e l' AWS IoT API Reference. Nella AWS IoT console, puoi creare un tunnel dalla pagina dell'[hub Tunnels](https://console.aws.amazon.com/iot/home#/tunnels) o dalla pagina dei dettagli di un oggetto che hai creato. Per ulteriori informazioni, consulta [Metodi di creazione di tunnel nella AWS IoT console](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

Di seguito sono illustrati i tutorial in questa sezione:
+ 

**[Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto](tunneling-tutorial-quick-setup.md)**  
In questo tutorial viene illustrato come aprire un tunnel dalla pagina [Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels) mediante il metodo di configurazione rapida. Imparerai anche come utilizzare SSH basato su browser per accedere al dispositivo remoto utilizzando un'interfaccia a riga di comando contestuale all'interno della console. AWS IoT 

  
+ 

**[Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto](tunneling-tutorial-manual-setup.md)**  
In questo tutorial viene illustrato come aprire un tunnel dalla pagina [Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels) mediante il metodo di configurazione manuale. Verrà inoltre descritto come configurare e avviare il proxy locale da un terminale nel dispositivo di origine e connettersi al tunnel.
+ 

**[Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser](tunneling-tutorial-existing-tunnel.md)**  
In questo tutorial viene illustrato come aprire un tunnel dalla pagina dei dettagli di un oggetto creato in precedenza. Verrà descritto come creare un nuovo tunnel e utilizzare un tunnel esistente. Il tunnel esistente corrisponde al tunnel aperto più recente che è stato creato per il dispositivo. È anche possibile utilizzare l'SSH basato su browser per accedere al dispositivo remoto.

**Topics**
+ [Tutorial in questa sezione](#tunneling-tutorial-overview)
+ [Apertura di un tunnel e avvio di una sessione SSH su un dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md)
+ [Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser](tunneling-tutorial-existing-tunnel.md)

# Apertura di un tunnel e avvio di una sessione SSH su un dispositivo remoto
<a name="secure-tunneling-tutorial-open-tunnel"></a>

In questi tutorial, verrà descritto come accedere in remoto a un dispositivo protetto da un firewall. Non è possibile avviare una sessione SSH diretta nel dispositivo perché il firewall blocca tutto il traffico in entrata. Nei tutorial viene illustrato come aprire un tunnel e utilizzarlo per avviare una sessione SSH a un dispositivo remoto.

## Prerequisiti per i tutorial
<a name="tunneling-tutorial-prerequisites"></a>

I prerequisiti per l'esecuzione del tutorial possono variare a seconda che si utilizzino i metodi di configurazione manuale o rapida per aprire un tunnel e accedere al dispositivo remoto. 

**Nota**  
Per entrambi i metodi di configurazione, è necessario consentire il traffico in uscita sulla porta 443. 
+ Per informazioni sui prerequisiti per il tutorial sul metodo di configurazione rapida, consulta [Prerequisiti per il metodo di configurazione rapida](tunneling-tutorial-quick-setup.md#tunneling-tutorial-quick-prerequisites).
+ Per informazioni sui prerequisiti per il tutorial sul metodo di configurazione manuale, consulta [Prerequisiti per il metodo di configurazione manuale](tunneling-tutorial-manual-setup.md#tunneling-tutorial-manual-prerequisites). Se si utilizza questo metodo di configurazione, è necessario configurare il proxy locale sul dispositivo di origine. Per scaricare il codice sorgente del proxy locale, consulta [Local proxy reference implementation](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) su. GitHub

## Metodi di configurazione del tunnel
<a name="tunneling-tutorial-setup-methods"></a>

In questi tutorial, verranno fornite informazioni sui metodi di configurazione manuale e rapida per aprire un tunnel e connettersi al dispositivo remoto. Nella tabella seguente viene illustrata la differenza tra i metodi di configurazione. Dopo aver creato il tunnel, è possibile utilizzare un'interfaccia a riga di comando integrata nel browser per effettuare l'accesso SSH al dispositivo remoto. Se i token vengono smarriti o il tunnel si disconnette, è possibile inviare nuovi token di accesso per riconnettersi al tunnel.


**Metodi di configurazione rapida e manuale**  

| Criteri | Configurazione rapida | Configurazione manuale | 
| --- | --- | --- | 
| Creazione del tunnel | Creare un nuovo tunnel con configurazioni predefinite, modificabili. Per accedere al dispositivo remoto, è possibile utilizzare solo SSH come servizio di destinazione. | Creare un tunnel specificando manualmente le configurazioni del tunnel. È possibile utilizzare questo metodo per connettersi al dispositivo remoto utilizzando servizi diversi da SSH. | 
| Token di accesso | Il token di accesso di destinazione verrà inviato automaticamente al dispositivo nell'[argomento MQTT riservato](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-secure), se un nome oggetto viene specificato durante la creazione del tunnel. Non è necessario scaricare o gestire il token sul dispositivo di origine. | È necessario scaricare o gestire manualmente il token sul dispositivo di origine. Il token di accesso di destinazione viene inviato automaticamente al dispositivo remoto nell'[argomento MQTT riservato](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-secure), se un nome oggetto viene specificato durante la creazione del tunnel.  | 
| Proxy locale | Un proxy locale basato sul Web viene configurato automaticamente per l'interazione con il dispositivo. Non è necessario configurare manualmente il proxy locale. | È necessario configurare manualmente e avviare il proxy locale. Per configurare il proxy locale, puoi utilizzare il AWS IoT Device Client o scaricare l'[implementazione di riferimento del proxy locale su GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy). | 

## Metodi di creazione di tunnel nella AWS IoT console
<a name="tunneling-tutorial-flows"></a>

I tutorial in questa sezione mostrano come creare un tunnel utilizzando Console di gestione AWS e l'[OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/)API. Se si configura la destinazione durante la creazione di un tunnel, il tunneling AWS IoT sicuro invia il token di accesso del client di destinazione al dispositivo remoto tramite MQTT e l'argomento MQTT riservato,). `$aws/things/RemoteDeviceA/tunnels/notify` Alla ricezione del messaggio MQTT, l'agente IoT sul dispositivo remoto avvia il proxy locale in modalità di destinazione. Per ulteriori informazioni, consulta [Argomenti riservati](reserved-topics.md).

**Nota**  
Puoi omettere la configurazione di destinazione se desideri consegnare il token di accesso client di destinazione al dispositivo remoto tramite un altro metodo. Per ulteriori informazioni, consulta [Configurazione di un dispositivo remoto e utilizzo dell'agente IoT](configure-remote-device.md).

Nella AWS IoT console, è possibile creare un tunnel utilizzando uno dei seguenti metodi. Per informazioni sui tutorial che illustrano come creare un tunnel utilizzando questi metodi, consulta [Tutorial in questa sezione](secure-tunneling-tutorial.md#tunneling-tutorial-overview).
+ 

**[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels)**  
Quando si crea il tunnel, è possibile specificare se utilizzare i metodi di configurazione rapida o manuale per crearlo e fornire i dettagli di configurazione del tunnel opzionali. Questi includono anche il nome del dispositivo di destinazione e il servizio che si desidera utilizzare per la connessione al dispositivo. Dopo aver creato un tunnel, è possibile utilizzare SSH all'interno del browser o aprire un terminale all'esterno della AWS IoT console per accedere al dispositivo remoto.
+ 

**Pagina dei dettagli dell'oggetto**  
Quando si crea il tunnel, sarà anche possibile specificare se utilizzare il tunnel aperto più recente o creare un nuovo tunnel per il dispositivo, oltre a selezionare i metodi di configurazione e fornire i dettagli di configurazione del tunnel opzionali. Non è possibile modificare i dettagli di configurazione di un tunnel esistente. È possibile utilizzare il metodo di configurazione rapida per ruotare i token di accesso ed effettuare l'accesso SSH al dispositivo remoto all'interno del browser. Per aprire un tunnel utilizzando questo metodo, è necessario aver creato un oggetto IoT (ad esempio`RemoteDeviceA`) nel AWS IoT registro. Per ulteriori informazioni, consulta [Registrare un dispositivo nel AWS IoT registro](https://docs.aws.amazon.com/iot/latest/developerguide/register-device.html). 

**Topics**
+ [Prerequisiti per i tutorial](#tunneling-tutorial-prerequisites)
+ [Metodi di configurazione del tunnel](#tunneling-tutorial-setup-methods)
+ [Metodi di creazione di tunnel nella AWS IoT console](#tunneling-tutorial-flows)
+ [Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto](tunneling-tutorial-quick-setup.md)
+ [Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto](tunneling-tutorial-manual-setup.md)

# Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto
<a name="tunneling-tutorial-quick-setup"></a>

È possibile utilizzare il metodo di configurazione rapida o manuale per creare un tunnel. In questo tutorial viene illustrato come aprire un tunnel utilizzando il metodo di configurazione rapida e utilizzare l'SSH basato su browser per connettersi al dispositivo remoto. Per un esempio che mostra come aprire un tunnel utilizzando il metodo di configurazione manuale, consulta [Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto](tunneling-tutorial-manual-setup.md).

Utilizzando il metodo di configurazione rapida, è possibile creare un nuovo tunnel con configurazioni predefinite che è possibile modificare. Un proxy locale basato sul Web viene configurato automaticamente e il token di accesso viene distribuito automaticamente al dispositivo di destinazione remoto mediante MQTT. Dopo aver creato un tunnel, è possibile iniziare a interagire con il dispositivo remoto utilizzando un'interfaccia a riga di comando all'interno della console.

Con il metodo di configurazione rapida, è necessario utilizzare SSH come il servizio di destinazione per accedere al dispositivo remoto. Per ulteriori informazioni sui diversi metodi di configurazione, consulta [Metodi di configurazione del tunnel](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods).

## Prerequisiti per il metodo di configurazione rapida
<a name="tunneling-tutorial-quick-prerequisites"></a>
+ I firewall dietro cui si trova il dispositivo remoto devono consentire il traffico in uscita sulla porta 443. Il tunnel creato utilizzerà questa porta per connettersi al dispositivo remoto.
+ Sul dispositivo remoto è in esecuzione un agente per dispositivi IoT (vedi[Snippet dell'agente IoT](configure-remote-device.md#agent-snippet)) che si connette al gateway del AWS IoT dispositivo ed è configurato con un abbonamento tematico MQTT. Per ulteriori informazioni, consulta [Connettere un dispositivo al gateway del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ È necessario disporre di un daemon SSH in esecuzione sul dispositivo remoto.

## Apertura di un tunnel
<a name="open-tunnel-quick"></a>

È possibile aprire un tunnel sicuro utilizzando il Console di gestione AWS, l' AWS IoT API Reference o il AWS CLI. Facoltativamente, è possibile configurare un nome di destinazione, ma non è richiesto per questo tutorial. Se si configura la destinazione, il tunneling sicuro distribuirà automaticamente il token di accesso al dispositivo remoto tramite MQTT. Per ulteriori informazioni, consulta [Metodi di creazione di tunnel nella AWS IoT console](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Per aprire un tunnel mediante la console**

1. Vai a [Hub dei tunnel della console AWS IoT](https://console.aws.amazon.com/iot/home#/tunnels) e scegli **Create tunnel** (Crea tunnel).  
![\[AWS IoT console che mostra un elenco vuoto di tunnel con opzioni per creare, chiudere o eliminare tunnel.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnels-page.png)

1. Per questo tutorial, scegli **Quick setup** (Configurazione rapida) come metodo di creazione del tunnel, quindi seleziona **Next** (Avanti).
**Nota**  
Se si crea un tunnel sicuro dalla pagina dei dettagli di un oggetto creato in precedenza, è possibile scegliere se creare un nuovo tunnel o utilizzarne uno esistente. Per ulteriori informazioni, consulta [Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser](tunneling-tutorial-existing-tunnel.md).  
![\[sezione relativa al metodo di configurazione con opzioni per la configurazione rapida tramite SSH o la configurazione manuale, in cui viene illustrata la configurazione rapida che configura automaticamente il proxy e il token di accesso.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnels-choose-quick.PNG)

1. Rivedi e conferma i dettagli di configurazione del tunnel. Per creare un tunnel, scegli **Confirm and create** (Conferma e crea). Se desideri modificare questi dettagli, scegli **Previous** (Indietro) per tornare alla pagina precedente, quindi conferma e crea il tunnel.
**Nota**  
Quando si utilizza la configurazione rapida, il nome del servizio non può essere modificato. È necessario utilizzare **SSH** come **Service** (Servizio).

1. Per creare il tunnel, scegli **Done** (Fine). 

   Per questo tutorial, non è necessario scaricare i token di accesso di origine o destinazione. Questi token possono essere utilizzati una sola volta per connettersi al tunnel. Se il tunnel si disconnette, è possibile generare e inviare nuovi token al dispositivo remoto per riconnettersi al tunnel. Per ulteriori informazioni, consulta [Nuovo invio dei token di accesso al tunnel](tunneling-tutorial-manual-setup.md#resend-access-tokens).  
![\[Una finestra di dialogo che mostra i token di accesso all'origine e alla destinazione per creare una connessione tunnel sicura, con istruzioni su come ruotare e inviare nuovamente i token, se necessario.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-success.png)

**Per aprire un tunnel mediante l'API**  
Per aprire un nuovo tunnel, puoi utilizzare l'operazione API. [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html)

**Nota**  
È possibile creare un tunnel utilizzando il metodo di configurazione rapida solo dalla console AWS IoT . Quando utilizzi l' AWS IoT API Reference API o il AWS CLI, utilizzerà il metodo di configurazione manuale. È possibile aprire il tunnel esistente creato in precedenza e quindi modificare il metodo di configurazione del tunnel per utilizzare la configurazione rapida. Per ulteriori informazioni, consulta [Apertura di un tunnel esistente e utilizzo di SSH basato su browser](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-convert-tunnel).

Di seguito viene illustrato un esempio di come eseguire questa operazione API. Facoltativamente, se si desidera specificare il nome dell'oggetto e il servizio di destinazione, utilizzare il parametro `DestinationConfig`. Per un esempio che mostra come utilizzare questo parametro, consulta [Apertura di un nuovo tunnel per il dispositivo remoto](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-open-tunnel).

```
aws iotsecuretunneling open-tunnel
```

L'esecuzione di questo comando crea un nuovo tunnel e fornisce i token di accesso di origine e destinazione. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Utilizzo di SSH basato su browser
<a name="tunneling-tutorial-quick-browser"></a>

Dopo aver creato un tunnel utilizzando il metodo di configurazione rapida e dopo che il dispositivo di destinazione si è connesso al tunnel, è possibile accedere al dispositivo remoto utilizzando un SSH basato su browser. Utilizzando l'SSH basato su browser, è possibile comunicare direttamente con il dispositivo remoto inserendo i comandi in un'interfaccia a riga di comando contestuale all'interno della console. Questa funzionalità semplifica l'interazione con il dispositivo remoto perché non è necessario aprire un terminale all'esterno della console o configurare il proxy locale. 

**Per utilizzare l'SSH basato su browser**

1. Passa a [Hub dei tunnel della console AWS IoT](https://console.aws.amazon.com/iot/home#/tunnels) e scegli il tunnel creato per visualizzare i relativi dettagli.

1. Espandi la sezione **Secure Shell (SSH)** e scegli **Connect** (Connetti).

1. Scegli se eseguire l'autenticazione alla connessione SSH fornendo nome utente e password oppure, per un'autenticazione più sicura, utilizzare la chiave privata del tuo dispositivo. Se esegui l'autenticazione utilizzando la chiave privata, tieni presente che solo le chiavi RSA in formato PEM (256 e 512) funzionano con la console SSH. AWS IoT Secure Tunneling 
   + Per connetterti utilizzando il nome utente e la password, scegli **Use password** (Usa password). Puoi quindi inserire nome utente e password e iniziare a utilizzare la CLI integrata nel browser.
   + Per connetterti utilizzando la chiave privata del dispositivo di destinazione, scegli **Use private key** (Usa chiave privata). Specifica il nome utente e carica il file della chiave privata del dispositivo, quindi scegli **Connect** (Connetti) per iniziare a utilizzare la CLI integrata nel browser.  
![\[Finestra di dialogo del modulo per connettersi tramite la CLI del browser con chiave privata, che mostra un campo nome utente e un'opzione per scegliere o utilizzare un file di chiave privata preselezionato.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-browser-private-key.png)

Dopo aver effettuato l'autenticazione alla connessione SSH, puoi iniziare rapidamente a inserire i comandi e interagire con il dispositivo utilizzando la CLI del browser, poiché il proxy locale è già stato configurato automaticamente.

![\[Frammento di codice che mostra gli hook React per la gestione dello stato e delle preferenze in un'applicazione. JavaScript\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-browser-cli.PNG)


Se la CLI del browser rimane aperta dopo la durata del tunnel, potrebbe scadere, causando la disconnessione dell'interfaccia a riga di comando. Puoi duplicare il tunnel e avviare un'altra sessione per interagire con il dispositivo remoto all'interno della console stessa.

## Risoluzione dei problemi relativi all'utilizzo di SSH basato su browser
<a name="tunneling-tutorial-browser-troubleshoot"></a>

Di seguito viene illustrato come risolvere alcuni problemi che si potrebbero verificare quando si utilizza l'SSH basato su browser.
+ 

**Al posto dell'interfaccia a riga di comando viene visualizzato un errore**  
È possibile che l'errore venga visualizzato perché il dispositivo di destinazione si è disconnesso. È possibile scegliere **Generate new access tokens** (Genera nuovi token di accesso) per generare nuovi token di accesso e inviarli al dispositivo remoto utilizzando MQTT. I nuovi token possono essere usati per riconnettersi al tunnel. La riconnessione al tunnel cancella la cronologia e aggiorna la sessione della riga di comando.
+ 

**Un errore di disconnessione del tunnel viene visualizzato durante l'autenticazione tramite chiave privata**  
Questo errore potrebbe essere visualizzato perché è possibile che la chiave privata non sia stata accettata dal dispositivo di destinazione. Per risolvere questo errore, controllare il file della chiave privata caricata per l'autenticazione. Se l'errore persiste, controllare i log del dispositivo. È anche possibile provare a riconnettersi al tunnel inviando nuovi token di accesso al dispositivo remoto.
+ 

**Il tunnel è stato chiuso durante l'utilizzo della sessione**  
Se il tunnel è stato chiuso perché è rimasto aperto per un periodo di tempo superiore alla durata specificata, è possibile che la sessione della riga di comando venga disconnessa. Un tunnel non può essere riaperto dopo che è stato chiuso. Per riconnettersi, è necessario aprire un altro tunnel al dispositivo.

  È possibile duplicare un tunnel per creare un nuovo tunnel con le stesse configurazioni del tunnel chiuso. È possibile duplicare un tunnel chiuso dalla console. AWS IoT Per duplicare il tunnel, scegliere il tunnel che è stato chiuso per visualizzare i relativi dettagli, quindi selezionare **Duplicate tunnel** (Duplica tunnel). Specificare la durata del tunnel che si desidera utilizzare, quindi creare il nuovo tunnel.

## Pulizia
<a name="tunnel-cleanup-quick"></a>
+ 

**Chiusura del tunnel**  
Al termine dell'utilizzo, si consiglia di chiudere il tunnel. Un tunnel può chiudersi anche se è rimasto aperto per un periodo di tempo superiore alla durata del tunnel specificata. Un tunnel non può essere riaperto dopo che è stato chiuso. È ancora possibile duplicare un tunnel scegliendo il tunnel chiuso e quindi selezionando **Duplicate tunnel** (Duplica tunnel). Specificare la durata del tunnel che si desidera utilizzare, quindi creare il nuovo tunnel.
  + Per chiudere un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri chiudere, quindi seleziona **Close tunnel** (Chiudi tunnel).
  + Per chiudere uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'[CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminazione del tunnel**  
Puoi eliminare definitivamente un tunnel dal tuo Account AWS. 
**avvertimento**  
Le operazioni di eliminazione sono permanenti e non possono essere annullate.
  + Per eliminare un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri eliminare, quindi seleziona **Delete tunnel** (Elimina tunnel).
  + Per eliminare uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'[CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Quando utilizzi l'API, imposta il flag `delete` su `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto
<a name="tunneling-tutorial-manual-setup"></a>

Quando si apre un tunnel, è possibile scegliere il metodo di configurazione rapida o manuale per aprire un tunnel nel dispositivo remoto. In questo tutorial viene illustrato come aprire un tunnel utilizzando il metodo di configurazione manuale e configurare e avviare il proxy locale per connettersi al dispositivo remoto.

Quando si utilizza il metodo di configurazione manuale, è necessario specificare manualmente le configurazioni del tunnel durante la creazione. Dopo aver creato il tunnel, puoi usare SSH all'interno del browser o aprire un terminale all'esterno della AWS IoT console. In questo tutorial viene illustrato come utilizzare il terminale esterno alla console per accedere al dispositivo remoto. Verrà inoltre descritto come configurare il proxy locale e connettersi ad esso per interagire con il dispositivo remoto. Per connettersi al proxy locale, è necessario scaricare il token di accesso di origine durante la creazione del tunnel.

Con questo metodo di configurazione, è possibile utilizzare servizi diversi da SSH, come FTP, per connettersi al dispositivo remoto. Per ulteriori informazioni sui diversi metodi di configurazione, consulta [Metodi di configurazione del tunnel](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods).

## Prerequisiti per il metodo di configurazione manuale
<a name="tunneling-tutorial-manual-prerequisites"></a>
+ I firewall dietro cui si trova il dispositivo remoto devono consentire il traffico in uscita sulla porta 443. Il tunnel creato utilizzerà questa porta per connettersi al dispositivo remoto.
+ Sul dispositivo remoto è in esecuzione un agente per dispositivi IoT (vedi[Snippet dell'agente IoT](configure-remote-device.md#agent-snippet)) che si connette al gateway del AWS IoT dispositivo ed è configurato con un abbonamento tematico MQTT. Per ulteriori informazioni, consulta [Connettere un dispositivo al gateway del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ È necessario disporre di un daemon SSH in esecuzione sul dispositivo remoto.
+ Hai scaricato il codice sorgente del proxy locale da [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)e lo hai creato per la piattaforma di tua scelta. Faremo riferimento al file eseguibile proxy locale costruito come `localproxy` in questo tutorial.

## Apertura di un tunnel
<a name="open-tunnel"></a>

Puoi aprire un tunnel sicuro utilizzando Console di gestione AWS, AWS IoT API Reference o AWS CLI. Facoltativamente, è possibile configurare un nome di destinazione, ma non è richiesto per questo tutorial. Se si configura la destinazione, il tunneling sicuro distribuirà automaticamente il token di accesso al dispositivo remoto tramite MQTT. Per ulteriori informazioni, consulta [Metodi di creazione di tunnel nella AWS IoT console](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Per aprire un tunnel tramite la console**

1. Vai a [Hub dei tunnel della console AWS IoT](https://console.aws.amazon.com/iot/home#/tunnelhub) e scegli **Create tunnel** (Crea tunnel).  
![\[AWS IoT console che mostra un elenco vuoto di tunnel con opzioni per creare, chiudere o eliminare tunnel.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnels-page.png)

1. Per questo tutorial, scegli **Manual setup** (Configurazione manuale) come metodo di creazione del tunnel, quindi seleziona **Next** (Avanti). Per informazioni sull'utilizzo del metodo **Quick setup** (Configurazione rapida) per creare un tunnel, consulta [Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto](tunneling-tutorial-quick-setup.md).
**Nota**  
Se si crea un tunnel sicuro dalla pagina dei dettagli di un oggetto, è possibile scegliere se creare un nuovo tunnel o utilizzarne uno esistente. Per ulteriori informazioni, consulta [Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser](tunneling-tutorial-existing-tunnel.md).  
![\[Due opzioni per configurare una connessione al tunnel: configurazione rapida (SSH) o configurazione manuale, che richiede la configurazione di un proxy locale e la gestione dei token di accesso.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnels-choose-manual.PNG)

1. (Facoltativo) Immetti le impostazioni di configurazione per il tunnel. Puoi anche ignorare questo passaggio e andare a quello successivo per creare un tunnel. 

   Immetti una descrizione del tunnel, la durata del timeout del tunnel e i tag delle risorse come coppie chiave-valore per facilitare l'identificazione della risorsa. Per questo tutorial, puoi ignorare la configurazione della destinazione.
**Nota**  
Non ti verrà addebitato alcun costo in base alla durata di apertura di un tunnel. Ti vengono addebitati dei costi solo durante la creazione di un nuovo tunnel. Per informazioni sui prezzi, consulta **Tunneling sicuro** in [Prezzi di AWS IoT Device Management](https://aws.amazon.com/iot-device-management/pricing/).

1. Scarica i token di accesso client e scegli **Done** (Fine). I token non saranno disponibili per il download dopo aver scelto **Done** (Fine).

   Questi token possono essere utilizzati una sola volta per connettersi al tunnel. Se i token vengono persi o il tunnel si disconnette, è possibile generare e inviare nuovi token al dispositivo remoto per riconnettersi al tunnel.  
![\[Token di accesso all'origine e alla destinazione per creare una connessione sicura al tunnel, con istruzioni su come ruotare e inviare nuovamente i token, se necessario.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-success.png)

**Per aprire un tunnel mediante l'API**  
Per aprire un nuovo tunnel, puoi utilizzare l'operazione API. [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html) Utilizzando l'API è anche possibile specificare configurazioni aggiuntive, come la durata del tunnel e la configurazione della destinazione.

```
aws iotsecuretunneling open-tunnel \ 
    --region us-east-1 \ 
    --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com
```

L'esecuzione di questo comando crea un nuovo tunnel e fornisce i token di accesso di origine e destinazione. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Nuovo invio dei token di accesso al tunnel
<a name="resend-access-tokens"></a>

I token ottenuti durante la creazione di un tunnel possono essere utilizzati una sola volta per connettersi al tunnel. Se si smarrisce il token di accesso o il tunnel si disconnette, è possibile inviare nuovamente nuovi token di accesso al dispositivo remoto utilizzando MQTT senza costi aggiuntivi. AWS IoT il tunneling sicuro revocherà i token attuali e restituirà nuovi token di accesso per la riconnessione al tunnel.

**Rotazione dei token dalla console**

1. Vai all'[hub Tunnels della AWS IoT console e scegli il](https://console.aws.amazon.com/iot/home#/tunnels) tunnel che hai creato.

1. Nella pagina dei dettagli del tunnel, scegli **Generate new access tokens** (Genera nuovi token di accesso), quindi scegli **Next** (Avanti).

1. Scarica i nuovi token di accesso per il tunnel e scegli **Done** (Fine). Questi token possono essere utilizzati una sola volta. Se smarrisci questi token o il tunnel si disconnette, puoi inviare nuovi token di accesso.  
![\[Accedi ai token per i dispositivi di origine e destinazione con opzioni per copiarli o scaricarli. Il testo spiega che i token rotanti revocano i token correnti e generano nuovi token monouso per ricollegare un tunnel disconnesso.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-token-rotated.PNG)

**Rotazione dei token di accesso mediante l'API**  
Per ruotare i token di accesso al tunnel, puoi utilizzare l'operazione [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API per revocare i token correnti e restituire nuovi token di accesso per la riconnessione al tunnel. Ad esempio, il comando seguente ruota i token di accesso per il dispositivo di destinazione, *`RemoteThing1`*. 

```
aws iotsecuretunneling rotate-tunnel-access-token \ 
    --tunnel-id <tunnel-id> \ 
    --client-mode DESTINATION \ 
    --destination-config thingName=<RemoteThing1>,services=SSH \ 
    --region <region>
```

L'esecuzione di questo comando genera il nuovo token di accesso come mostrato nel seguente esempio. Il token viene quindi consegnato al dispositivo mediante MQTT per connettersi al tunnel, se l'agente di dispositivo è configurato correttamente.

```
{
    "destinationAccessToken": "destination-access-token", 
    "tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id"
}
```

Per esempi che mostrano come e quando ruotare i token di accesso, consulta [Risoluzione dei problemi di connettività del tunneling AWS IoT sicuro mediante la rotazione dei token di accesso del client](iot-secure-tunneling-troubleshooting.md).

## Configurazione e avvio del proxy locale
<a name="start-local-proxy"></a>

Per connettersi al dispositivo remoto, aprire un terminale sul laptop, quindi configurare e avviare il proxy locale. Il proxy locale trasmette i dati inviati dall'applicazione in esecuzione sul dispositivo di origine utilizzando il tunneling sicuro su una connessione sicura. WebSocket È possibile scaricare il sorgente proxy locale da. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)

Dopo aver configurato il proxy locale, copiare il token di accesso al client di origine e utilizzarlo per avviare il proxy locale in modalità di origine. Di seguito viene mostrato un comando di esempio per avviare il proxy locale. Nel comando seguente, il proxy locale è configurato per l'ascolto di nuove connessioni sulla porta 5555. In questo comando:
+ `-r`specifica la Regione AWS, che deve essere la stessa regione in cui è stato creato il tunnel.
+ `-s` specifica la porta a cui il proxy deve connettersi.
+ `-t` specifica il testo del token client.

```
./localproxy -r us-east-1 -s 5555 -t source-client-access-token
```

L'esecuzione di questo comando avvierà il proxy locale in modalità di origine. Se si riceve il seguente errore dopo l'esecuzione del comando, impostare il percorso CA. Per informazioni, consulta [Secure tunneling local proxy on](https://github.com/aws-samples/aws-iot-securetunneling-localproxy). GitHub

```
Could not perform SSL handshake with proxy server: certificate verify failed
```

Di seguito è riportato un output di esempio dell'esecuzione del proxy locale nella modalità `source`.

```
...
...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-east-1.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-east-1.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

## Avvia una sessione SSH
<a name="start-ssh-session"></a>

Apri un altro terminale e utilizza il comando seguente per avviare una nuova sessione SSH collegandosi al proxy locale sulla porta 5555.

```
ssh username@localhost -p 5555
```

Potrebbe essere richiesta una password per la sessione SSH. Al termine della sessione SSH, digita **exit** per chiudere la sessione.

## Pulizia
<a name="tunnel-cleanup-manual"></a>
+ 

**Chiusura del tunnel**  
Al termine dell'utilizzo, si consiglia di chiudere il tunnel. Un tunnel può chiudersi anche se è rimasto aperto per un periodo di tempo superiore alla durata del tunnel specificata. Un tunnel non può essere riaperto dopo che è stato chiuso. È ancora possibile duplicare un tunnel aprendo il tunnel chiuso e quindi selezionando **Duplicate tunnel** (Duplica tunnel). Specificare la durata del tunnel che si desidera utilizzare, quindi creare il nuovo tunnel.
  + Per chiudere un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri chiudere, quindi seleziona **Close tunnel** (Chiudi tunnel).
  + Per chiudere uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'[CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)operazione API.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminazione del tunnel**  
Puoi eliminare definitivamente un tunnel dal tuo Account AWS.
**avvertimento**  
Le operazioni di eliminazione sono permanenti e non possono essere annullate.
  + Per eliminare un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri eliminare, quindi seleziona **Delete tunnel** (Elimina tunnel).
  + Per eliminare uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'operazione [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Quando utilizzi l'API, imposta il flag `delete` su `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser
<a name="tunneling-tutorial-existing-tunnel"></a>

Dalla AWS IoT console, puoi creare un tunnel dall'**hub Tunnels** o dalla pagina dei dettagli di un oggetto IoT che hai creato. Quando si crea un tunnel dall'hub **Tunnels** (Tunnel), è possibile specificare se creare un tunnel utilizzando la configurazione rapida o manuale. Per un esempio di tutorial, consultare [Apertura di un tunnel e avvio di una sessione SSH su un dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md).

Quando crei un tunnel dalla pagina dei dettagli dell'oggetto della AWS IoT console, puoi anche specificare se creare un nuovo tunnel o aprire un tunnel esistente per quell'oggetto, come illustrato in questo tutorial. Se si sceglie un tunnel esistente, è possibile accedere al tunnel aperto più recente creato per questo dispositivo. È quindi possibile utilizzare l'interfaccia a riga di comando all'interno del terminale per accedere tramite SSH al dispositivo. 

## Prerequisiti
<a name="tunneling-tutorial-existing-prerequisites"></a>
+ I firewall dietro cui si trova il dispositivo remoto devono consentire il traffico in uscita sulla porta 443. Il tunnel creato utilizzerà questa porta per connettersi al dispositivo remoto.
+ È stato creato un oggetto IoT (ad esempio`RemoteDevice1`) nel AWS IoT registro. Questo oggetto corrisponde alla rappresentazione del dispositivo remoto nel cloud. Per ulteriori informazioni, consulta la sezione relativa alla [registrazione di un dispositivo nel registro AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/register-device.html).
+ Sul dispositivo remoto è in esecuzione un agente per dispositivi IoT (vedi[Snippet dell'agente IoT](configure-remote-device.md#agent-snippet)) che si connette al gateway del AWS IoT dispositivo ed è configurato con un abbonamento tematico MQTT. Per ulteriori informazioni, consulta [Connettere un dispositivo al gateway del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ È necessario disporre di un daemon SSH in esecuzione sul dispositivo remoto.

## Apertura di un nuovo tunnel per il dispositivo remoto
<a name="tunneling-tutorial-existing-open-tunnel"></a>

Supponiamo di voler aprire un tunnel nel dispositivo remoto, `RemoteDevice1`. Innanzitutto, creiamo un oggetto IoT con il nome `RemoteDevice1` nel registro AWS IoT . È quindi possibile creare un tunnel utilizzando Console di gestione AWS l' AWS IoT API Reference API o il AWS CLI. 

Configurando una destinazione durante la creazione di un tunnel, il servizio tunneling sicuro fornisce il token di accesso al client di destinazione al dispositivo remoto tramite MQTT e l'argomento MQTT riservato (`$aws/things/RemoteDeviceA/tunnels/notify`). Per ulteriori informazioni, consulta [Metodi di creazione di tunnel nella AWS IoT console](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Per creare un tunnel per un dispositivo remoto dalla console**

1. Scegli l'oggetto, `RemoteDevice1`, per visualizzare i relativi dettagli, quindi seleziona **Create secure tunnel** (Crea un tunnel sicuro).  
![\[Dettagli di un dispositivo denominato "RemoteDevice1" con il relativo Amazon Resource Name (ARN) visualizzato.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-create-thing.PNG)

1. Scegli se creare un nuovo tunnel o aprire un tunnel esistente. Per creare un nuovo tunnel, scegli **Create new tunnel** (Crea un nuovo tunnel). Puoi quindi scegliere se utilizzare il metodo di configurazione rapida o il metodo di configurazione manuale per creare il tunnel. Per ulteriori informazioni, consultare [Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto](tunneling-tutorial-manual-setup.md) e [Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto](tunneling-tutorial-quick-setup.md).

**Creazione di un tunnel per un dispositivo remoto mediante l'API**  
Per aprire un nuovo tunnel, puoi utilizzare l'operazione [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html)API. Nel codice seguente viene illustrato un esempio di esecuzione di questo comando.

```
aws iotsecuretunneling open-tunnel \ 
    --region us-east-1 \ 
    --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com
    --cli-input-json file://input.json
```

Di seguito viene mostrato il contenuto per il file `input.json`. È possibile utilizzare il parametro `destinationConfig` per specificare il nome del dispositivo di destinazione (ad esempio, `RemoteDevice1`) e il servizio che si desidera utilizzare per accedere al dispositivo di destinazione, ad esempio `SSH`. Facoltativamente, è anche possibile specificare parametri aggiuntivi come la descrizione del tunnel e i tag.

**Contenuto di input.json**

```
{
   "description": "Tunnel to remote device1",
   "destinationConfig": { 
      "services": [ "SSH" ],
      "thingName": "RemoteDevice1"
   }
}
```

L'esecuzione di questo comando crea un nuovo tunnel e fornisce i token di accesso di origine e destinazione. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Apertura di un tunnel esistente e utilizzo di SSH basato su browser
<a name="tunneling-tutorial-existing-convert-tunnel"></a>

Supponiamo che tu abbia creato il tunnel per il tuo dispositivo remoto`RemoteDevice1`, utilizzando il metodo di configurazione manuale o utilizzando l' AWS IoT API Reference API. È quindi possibile aprire il tunnel esistente per il dispositivo e scegliere **Quick setup** (Configurazione rapida) per utilizzare la funzionalità SSH basata sul browser. Le configurazioni di un tunnel esistente non possono essere modificate, pertanto non è possibile utilizzare il metodo di configurazione manuale.

Per utilizzare la funzionalità SSH basata su browser, non è necessario scaricare il token di accesso di origine o configurare il proxy locale. Un proxy locale basato sul Web verrà configurato automaticamente in modo da poter iniziare a interagire con il dispositivo remoto.

**Per utilizzare il metodo di configurazione rapida e l'SSH basato su browser**

1. Vai alla pagina dei dettagli dell'oggetto creato in precedenza, `RemoteDevice1`, e scegli **Create secure tunnel** (Crea un tunnel sicuro).

1. Scegli **Use existing tunnel** (Utilizza un tunnel esistente) per aprire il tunnel aperto più recente creato per il dispositivo remoto. Le configurazioni del tunnel non possono essere modificate, pertanto non è possibile utilizzare il metodo di configurazione manuale per il tunnel. Per utilizzare il metodo di configurazione rapida, scegli **Quick setup** (Configurazione rapida).

1. Continua per esaminare e confermare i dettagli di configurazione del tunnel e creare il tunnel. Le configurazioni del tunnel non possono essere modificate.

   Quando crei il tunnel, il tunneling sicuro utilizzerà l'operazione [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API per revocare i token di accesso originali e generare nuovi token di accesso. Se il dispositivo remoto utilizza MQTT, questi token verranno automaticamente distribuiti al dispositivo remoto nell'argomento MQTT a cui è iscritto. Puoi anche scegliere di scaricare questi token manualmente sul dispositivo di origine.

Dopo aver creato il tunnel, puoi utilizzare l'SSH basato su browser per interagire con il dispositivo remoto direttamente dalla console utilizzando l'interfaccia a riga di comando contestuale. Per utilizzare questa interfaccia a riga di comando, scegli il tunnel per l'oggetto creato in precedenza e, nella pagina dei dettagli, espandi la sezione **Command-line interface** (Interfaccia a riga di comando). Poiché il proxy locale è già stato configurato automaticamente, puoi iniziare a inserire i comandi per iniziare rapidamente ad accedere e interagire con il tuo dispositivo remoto, `RemoteDevice1`.

Per ulteriori informazioni sul metodo di configurazione rapida e sull'utilizzo di SSH basato su browser, consulta [Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto](tunneling-tutorial-quick-setup.md).

## Pulizia
<a name="tunnel-cleanup-existing"></a>
+ 

**Chiusura del tunnel**  
Al termine dell'utilizzo, si consiglia di chiudere il tunnel. Un tunnel può chiudersi anche se è rimasto aperto per un periodo di tempo superiore alla durata del tunnel specificata. Un tunnel non può essere riaperto dopo che è stato chiuso. È ancora possibile duplicare un tunnel aprendo il tunnel chiuso e quindi selezionando **Duplicate tunnel** (Duplica tunnel). Specificare la durata del tunnel che si desidera utilizzare, quindi creare il nuovo tunnel.
  + Per chiudere un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri chiudere, quindi seleziona **Close tunnel** (Chiudi tunnel).
  + Per chiudere uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'operazione API. [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminazione del tunnel**  
Puoi eliminare definitivamente un tunnel dal tuo Account AWS.
**avvertimento**  
Le operazioni di eliminazione sono permanenti e non possono essere annullate.
  + Per eliminare un singolo tunnel o più tunnel dalla console AWS IoT , passa all'[Hub dei tunnel](https://console.aws.amazon.com/iot/home#/tunnels), scegli i tunnel che desideri eliminare, quindi seleziona **Delete tunnel** (Elimina tunnel).
  + Per eliminare uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'operazione [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Quando utilizzi l'API, imposta il flag `delete` su `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Proxy locale
<a name="local-proxy"></a>

Il proxy locale trasmette i dati inviati dall'applicazione in esecuzione sul dispositivo di origine utilizzando il tunneling sicuro su una WebSocket connessione sicura. È possibile scaricare il sorgente proxy locale da. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) 

Il proxy locale può essere eseguito in due modalità: `source` o `destination`. In modalità di origine, il proxy locale viene eseguito sullo stesso dispositivo o rete dell'applicazione client che avvia la connessione TCP. In modalità di destinazione, il proxy locale viene eseguito sul dispositivo remoto, insieme all'applicazione di destinazione. Un singolo tunnel può supportare fino a tre flussi di dati alla volta utilizzando il multiplexing del tunnel. Per ogni flusso di dati, il tunneling sicuro utilizza più connessioni TCP, il che riduce il rischio di timeout. Per ulteriori informazioni, consulta [Flussi di dati multiplex e utilizzo di connessioni TCP simultanee in un tunnel sicuro](multiplexing.md).

# Come utilizzare il proxy locale
<a name="how-use-local-proxy"></a>

Puoi eseguire il proxy locale sui dispositivi di origine e di destinazione per trasmettere i dati agli endpoint di tunneling sicuro. Se i tuoi dispositivi si trovano in una rete che utilizza un proxy web, il proxy web può intercettare le connessioni prima di inoltrarle a Internet. In questo caso, dovrai configurare il proxy locale per utilizzare il proxy Web. Per ulteriori informazioni, consulta [Configurare il proxy locale per i dispositivi che utilizzano il proxy web](configure-local-proxy-web-proxy.md). 

## Flusso di lavoro del proxy locale
<a name="local-proxy-workflow"></a>

I passaggi seguenti mostrano come avviene l'esecuzione del proxy locale sui dispositivi di origine e destinazione.

1. 

**Connessione del proxy locale al tunneling sicuro**  
Il proxy locale stabilisce innanzitutto una connessione al tunneling sicuro. Quando avvii il proxy locale, utilizza i seguenti argomenti:
   + L'`-r`argomento per specificare il modo Regione AWS in cui viene aperto il tunnel.
   + L'argomento `-t` per passare il token di accesso client di origine o di destinazione restituito da `OpenTunnel`.
**Nota**  
Non è possibile connettere contemporaneamente due proxy locali che utilizzano lo stesso valore del token di accesso client.

1. 

**Esecuzione di operazioni di origine o destinazione**  
Una volta stabilita la WebSocket connessione, il proxy locale esegue azioni in modalità di origine o in modalità destinazione, a seconda della configurazione.

   Per impostazione predefinita, il proxy locale tenta di riconnettersi al tunneling sicuro in caso di errori input/output (I/O) o se la WebSocket connessione viene chiusa in modo imprevisto. Ciò causa la chiusura della connessione TCP. Se si verificano errori di socket TCP, il proxy locale invia un messaggio attraverso il tunnel per notificare all'altro lato di chiudere la connessione TCP. Per impostazione predefinita, il proxy locale utilizza sempre la comunicazione SSL.

1. 

**Arresto del proxy locale**  
Dopo aver utilizzato il tunnel, è possibile terminare il processo proxy locale in modo sicuro. Si consiglia di chiudere esplicitamente il tunnel chiamando `CloseTunnel`. I client di tunnel attivi potrebbero non essere chiusi subito dopo la chiamata. `CloseTunnel`

Per ulteriori informazioni su come utilizzare per Console di gestione AWS aprire un tunnel e avviare una sessione SSH, vedere[Apertura di un tunnel e avvio di una sessione SSH su un dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md).

## Best practice per i proxy locali
<a name="local-proxy-security"></a>

Quando esegui un proxy locale, attieniti alle best practice seguenti:
+ Evitare l'uso dell'argomento proxy `-t` locale per passare un token di accesso. Si consiglia di utilizzare la variabile di ambiente `AWSIOT_TUNNEL_ACCESS_TOKEN` per impostare il token di accesso per il proxy locale.
+ Eseguire l'eseguibile del proxy locale con privilegi minimi nel sistema operativo o nell'ambiente.
  + Evitare di eseguire il proxy locale come amministratore in Windows.
  + Evitare di eseguire il proxy locale come root su Linux e macOS.
+ Si consiglia di eseguire il proxy locale su host separati, container, sandbox, chroot jail o un ambiente virtualizzato.
+ Creare il proxy locale con i flag di sicurezza pertinenti, a seconda della toolchain.
+ Nei dispositivi con più interfacce di rete, utilizzare l'argomento `-b` per associare il socket TCP all'interfaccia di rete utilizzata per comunicare con l'applicazione di destinazione. 

## Esempio di comando e output
<a name="example-cmd-output-localproxy"></a>

Di seguito viene illustrato un esempio di comando eseguito su sistema operativo Linux e l'output corrispondente. L'esempio mostra come il proxy locale può essere configurato in entrambe le modalità `source` e `destination`. Il proxy locale aggiorna il protocollo HTTPS per stabilire una connessione di lunga durata, quindi inizia WebSockets a trasmettere i dati attraverso la connessione agli endpoint sicuri del dispositivo di tunneling.

**Prima di eseguire questi comandi:**  
Prima di poter eseguire questi comandi, è necessario aver già aperto un tunnel e aver ottenuto i token di accesso del client per l'origine e la destinazione. Inoltre, devi avere creato il proxy locale come descritto in precedenza. Per creare il proxy locale, apri il [codice sorgente del proxy locale](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) nel GitHub repository e segui le istruzioni per la creazione e l'installazione del proxy locale.

**Nota**  
I seguenti comandi utilizzati negli esempi utilizzano il flag `verbosity` per illustrare una panoramica dei diversi passaggi descritti in precedenza dopo l'esecuzione del proxy locale. È consigliabile utilizzare questo flag solo per effettuare dei test.

**Esecuzione di proxy locale in modalità di origine**  
I seguenti comandi mostrano come eseguire il proxy locale in modalità sorgente.

------
#### [ Linux/macOS ]

Su Linux o macOS, esegui i seguenti comandi nel terminale per configurare e avviare il proxy locale sull'origine.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -s 5555 -v 5 -r us-west-2
```

Dove:
+ `-s` è la porta di ascolto dell'origine che avvia il proxy locale nella modalità di origine.
+ `-v` è la verbosità dell'output che può essere un valore compreso tra zero e sei.
+ `-r` è la regione dell'endpoint in cui è aperto il tunnel.

Per ulteriori informazioni sui parametri, consulta la sezione [Opzioni impostate utilizzando gli argomenti della riga di comando](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

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

Su Windows, si configura il proxy locale in modo simile a quello che si esegue per Linux o macOS, ma il modo in cui si definiscono le variabili di ambiente è diverso dalle altre piattaforme. Esegui i seguenti comandi nella finestra `cmd` per configurare e avviare il proxy locale sull'origine.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -s 5555 -v 5 -r us-west-2
```

Dove:
+ `-s` è la porta di ascolto dell'origine che avvia il proxy locale nella modalità di origine.
+ `-v` è la verbosità dell'output che può essere un valore compreso tra zero e sei.
+ `-r` è la regione dell'endpoint in cui è aperto il tunnel.

Per ulteriori informazioni sui parametri, consulta la sezione [Opzioni impostate utilizzando gli argomenti della riga di comando](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------

**Nota**  
Quando si utilizza la versione più recente del proxy locale in modalità sorgente, è necessario includere il AWS CLI parametro `--destination-client-type V1` sul dispositivo di origine per garantire la compatibilità con le versioni precedenti. Questo vale quando ci si connette a una di queste modalità di destinazione:  
AWS IoT Client del dispositivo
AWS IoT Componente di tunneling sicuro o componente di tunneling AWS IoT Greengrass Version 2 sicuro
Qualsiasi codice dimostrativo di AWS IoT Secure Tunneling scritto prima del 2022
Versioni 1.X del proxy locale
Questo parametro garantisce una comunicazione corretta tra il proxy di origine aggiornato e i client di destinazione precedenti. Per ulteriori informazioni sulle versioni proxy locali, vedere [AWS IoT Secure Tunneling on](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following). *GitHub*

Di seguito è riportato un esempio di output dell'esecuzione del proxy locale in `source` modalità.

```
...
...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**Esecuzione del proxy locale nella modalità di destinazione**  
I comandi seguenti mostrano come eseguire il proxy locale in modalità destinazione.

------
#### [ Linux/macOS ]

Su Linux o macOS, esegui i seguenti comandi nel terminale per configurare e avviare il proxy locale sulla destinazione.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -d 22 -v 5 -r us-west-2
```

Dove:
+ `-d` è l'applicazione di destinazione che avvia il proxy locale nella modalità di destinazione.
+ `-v` è la verbosità dell'output che può essere un valore compreso tra zero e sei.
+ `-r` è la regione dell'endpoint in cui è aperto il tunnel.

Per ulteriori informazioni sui parametri, consulta la sezione [Opzioni impostate utilizzando gli argomenti della riga di comando](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

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

Su Windows, si configura il proxy locale in modo simile a quello che si esegue per Linux o macOS, ma il modo in cui si definiscono le variabili di ambiente è diverso dalle altre piattaforme. Esegui i seguenti comandi nella finestra `cmd` per configurare e avviare il proxy locale sulla destinazione.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -d 22 -v 5 -r us-west-2
```

Dove:
+ `-d` è l'applicazione di destinazione che avvia il proxy locale nella modalità di destinazione.
+ `-v` è la verbosità dell'output che può essere un valore compreso tra zero e sei.
+ `-r` è la regione dell'endpoint in cui è aperto il tunnel.

Per ulteriori informazioni sui parametri, consulta la sezione [Opzioni impostate utilizzando gli argomenti della riga di comando](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------

**Nota**  
Quando si utilizza la versione più recente del proxy locale in modalità di destinazione, è necessario includere il AWS CLI parametro `--destination-client-type V1` sul dispositivo di destinazione per garantire la compatibilità con le versioni precedenti. Questo vale quando ci si connette a una di queste modalità di origine:  
Tunneling sicuro basato su browser dalla console. AWS 
Versioni 1.X del proxy locale
Questo parametro garantisce una comunicazione corretta tra il proxy di destinazione aggiornato e i client di origine precedenti. Per ulteriori informazioni sulle versioni proxy locali, vedere [AWS IoT Secure Tunneling on](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following). *GitHub*

Di seguito è riportato un esempio di output dell'esecuzione del proxy locale in `destination` modalità.

```
...
...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```

# Configurare il proxy locale per i dispositivi che utilizzano il proxy web
<a name="configure-local-proxy-web-proxy"></a>

È possibile utilizzare il proxy locale sui AWS IoT dispositivi per comunicare tramite AWS IoT APIs tunneling sicuro. Il proxy locale trasmette i dati inviati dall'applicazione del dispositivo utilizzando un tunneling sicuro su una connessione sicura. WebSocket Il proxy locale può funzionare in modalità `source` o `destination`. Nella modalità `source`, viene eseguito sullo stesso dispositivo o rete che avvia la connessione TCP. Nella modalità `destination`, il proxy locale viene eseguito sul dispositivo remoto, insieme all'applicazione di destinazione. Per ulteriori informazioni, consulta [Proxy locale](local-proxy.md).

Il proxy locale deve connettersi direttamente a Internet per utilizzare AWS IoT il tunneling sicuro. [Per una connessione TCP di lunga durata con tunneling sicuro, il proxy locale aggiorna la richiesta HTTPS per stabilire una WebSockets connessione a uno degli endpoint di connessione del dispositivo di tunneling sicuro.](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html)

Se i tuoi dispositivi si trovano in una rete che utilizza un proxy Web, il proxy Web può intercettare le connessioni prima di inoltrarle a Internet. Per stabilire una connessione di lunga durata agli endpoint di connessione del dispositivo di tunneling protetto, configura il proxy locale per l'utilizzo del proxy web come descritto nella sezione [specifica websocket](https://tools.ietf.org/html/rfc6455#section-4.1).

**Nota**  
[AWS IoT Client del dispositivo](iot-sdks.md#iot-sdk-device-client) non supporta dispositivi che utilizzano un proxy web. Per lavorare con il proxy web, è necessario utilizzare un proxy locale e configurarlo per il funzionamento con un proxy web come descritto di seguito.

I passaggi seguenti mostrano come il proxy locale funziona con un proxy web.

1. Il proxy locale invia una richiesta HTTP `CONNECT` al proxy web che contiene l'indirizzo remoto del servizio di tunneling protetto, insieme alle informazioni di autenticazione del proxy Web.

1. Il proxy web creerà quindi una connessione di lunga durata agli endpoint di tunneling protetti remoti.

1. La connessione TCP viene stabilita e il proxy locale ora funzionerà sia in modalità di origine che di destinazione per la trasmissione dei dati.

**Topics**
+ [Crea il proxy locale](#build-local-proxy)
+ [Configurazione del proxy Web](#configure-web-proxy)
+ [Configura e avvia il proxy locale](#configure-start-local-proxy)

## Crea il proxy locale
<a name="build-local-proxy"></a>

Apri il [codice sorgente del proxy locale](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) nel GitHub repository e segui le istruzioni per creare e installare il proxy locale.

## Configurazione del proxy Web
<a name="configure-web-proxy"></a>

Il proxy locale si basa sul meccanismo di tunneling HTTP descritto dalle [Specifiche HTTP/1.1](https://tools.ietf.org/html/rfc7231#section-4.3.6). Per rispettare le specifiche, il proxy web deve consentire ai dispositivi di utilizzare il metodo `CONNECT`.

La modalità di configurazione del proxy web dipende dal proxy web utilizzato e dalla versione del proxy web. Per assicurarsi di configurare correttamente il proxy web, controlla la documentazione del proxy web.

Per configurare il proxy web, identifica innanzitutto l'URL del proxy web e verifica se il proxy web supporta il tunneling HTTP. L'URL del proxy web verrà utilizzato in un secondo momento quando si configura e si avvia il proxy locale.

1. 

**Identifica l'URL del proxy web**  
L'URL del proxy web sarà nel formato seguente.

   ```
   protocol://web_proxy_host_domain:web_proxy_port
   ```

   AWS IoT il tunneling sicuro supporta solo l'autenticazione di base per il proxy web. Per utilizzare l'autenticazione di base, è necessario specificare **username** e **password** come parte dell'URL del proxy web. L'URL del proxy web sarà nel formato seguente.

   ```
   protocol://username:password@web_proxy_host_domain:web_proxy_port
   ```
   + *protocol*può essere o. `http` `https` Ti consigliamo di utilizzare `https`.
   + *web\$1proxy\$1host\$1domain*è l'indirizzo IP del proxy Web o un nome DNS che si risolve nell'indirizzo IP del proxy Web.
   + *web\$1proxy\$1port*è la porta su cui il proxy web è in ascolto.
   + Il proxy web utilizza questo **username** e **password** per autenticare la richiesta.

1. 

**Verificare l'URL del proxy web**  
Per confermare se il proxy web supporta il tunneling TCP, utilizza un comando `curl` e assicurati di ottenere una risposta `2xx` o `3xx`.

   Ad esempio, se l'URL del proxy web è `https://server.com:1235`, utilizza un flag `proxy-insecure` con il comando `curl` perché il proxy web potrebbe basarsi su un certificato autofirmato.

   ```
   export HTTPS_PROXY=https://server.com:1235
   curl -I https://aws.amazon.com --proxy-insecure
   ```

   Se l'URL del proxy web ha una porta `http` (ad esempio, `http://server.com:1234`), non è necessario utilizzare il flag `proxy-insecure`.

   ```
   export HTTPS_PROXY=http://server.com:1234
   curl -I https://aws.amazon.com
   ```

## Configura e avvia il proxy locale
<a name="configure-start-local-proxy"></a>

Per configurare il proxy locale affinché utilizzi un proxy web, puoi configurare le variabili di ambiente `HTTPS_PROXY` con i nomi di dominio DNS o gli indirizzi IP e i numeri della porta utilizzati dai server proxy.

Dopo aver configurato il proxy locale, è possibile utilizzare il proxy locale come spiegato in questo documento [README](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#readme).

**Nota**  
La dichiarazione di ambiente variabile prevede la distinzione tra lettere maiuscole e minuscole. È consigliabile definire ogni variabile una volta utilizzando tutte le lettere maiuscole o minuscole. Gli esempi seguenti mostrano il nome della variabile di ambiente in lettere maiuscole. Se la stessa variabile viene specificata utilizzando lettere maiuscole e minuscole, la variabile specificata con lettere minuscole ha la precedenza. 

I comandi seguenti mostrano come configurare il proxy locale in esecuzione sulla destinazione per utilizzare il proxy web e avviare il proxy locale.
+ `AWSIOT_TUNNEL_ACCESS_TOKEN`: questa variabile contiene il token di accesso del client (CAT) per la destinazione.
+ `HTTPS_PROXY`: questa variabile contiene l'URL del proxy web o l'indirizzo IP per la configurazione del proxy locale.

I comandi illustrati negli esempi seguenti dipendono dal sistema operativo utilizzato e dal fatto che il proxy web sia in ascolto su una porta HTTP o HTTPS.

### Proxy web in ascolto su una porta HTTP
<a name="configure-start-local-proxy-http"></a>

Se il proxy web è in ascolto su una porta HTTP, è possibile fornire l'URL del proxy web o l'indirizzo IP per la variabile `HTTPS_PROXY`.

------
#### [ Linux/macOS ]

Su Linux o macOS, eseguire i seguenti comandi nel terminale per configurare e avviare il proxy locale sulla destinazione per utilizzare un proxy web in ascolto di una porta HTTP.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

Se è necessario autenticarsi con il proxy, è necessario specificare **username** e **password** come parte della variabile `HTTPS_PROXY`.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

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

Su Windows, si configura il proxy locale in modo simile a quello che si esegue per Linux o macOS, ma il modo in cui si definiscono le variabili di ambiente è diverso dalle altre piattaforme. Esegui i comandi seguenti nella finestra `cmd` per configurare e avviare il proxy locale sulla destinazione per utilizzare un proxy web in ascolto di una porta HTTP.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22
```

Se è necessario autenticarsi con il proxy, è necessario specificare **username** e **password** come parte della variabile `HTTPS_PROXY`.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22
```

------

### Proxy web in ascolto su una porta HTTPS
<a name="configure-start-local-proxy-https"></a>

Esegui i seguenti comandi se il proxy web è in ascolto su una porta HTTPS. 

**Nota**  
Se utilizzi un certificato autofirmato per il proxy web o se esegui il proxy locale su un sistema operativo che non dispone del supporto OpenSSL nativo e delle configurazioni predefinite, dovrai configurare i certificati proxy web come descritto nella sezione Configurazione dei [certificati del repository](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#certificate-setup). GitHub 

I comandi seguenti avranno un aspetto simile alla configurazione del proxy web per un proxy HTTP, con l'eccezione che verrà specificato anche il percorso dei file di certificato installati come descritto in precedenza.

------
#### [ Linux/macOS ]

In Linux o macOS, esegui i seguenti comandi nel terminale per configurare il proxy locale in esecuzione sulla destinazione per utilizzare un proxy web in ascolto di una porta HTTPS.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

Se è necessario autenticarsi con il proxy, è necessario specificare **username** e **password** come parte della variabile `HTTPS_PROXY`.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

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

Su Windows, esegui i comandi seguenti nella finestra `cmd` per configurare e avviare il proxy locale in esecuzione sulla destinazione per utilizzare un proxy web in ascolto di una porta HTTP.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

Se è necessario autenticarsi con il proxy, è necessario specificare **username** e **password** come parte della variabile `HTTPS_PROXY`.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

------

### Esempio di comando e output
<a name="example-cmd-output-localproxy-webproxy"></a>

Di seguito viene illustrato un esempio di comando eseguito su sistema operativo Linux e l'output corrispondente. L'esempio mostra un proxy Web che è in ascolto su una porta HTTP e come il proxy locale può essere configurato per l'utilizzo del proxy web sia nella modalità `source` che nella modalità `destination`. Prima di poter eseguire questi comandi, è necessario aver già aperto un tunnel e aver ottenuto i token di accesso del client per l'origine e la destinazione. È inoltre necessario aver creato il proxy locale e aver configurato il proxy web come descritto in precedenza.

Ecco una panoramica dei passaggi dopo aver avviato il proxy locale. Il proxy locale:
+ Identifica l'URL del proxy web in modo che possa utilizzare l'URL per connettersi al server proxy.
+ Stabilisce una connessione TCP con il proxy web.
+ Invia una richiesta HTTP `CONNECT` al proxy web e attende la risposta `HTTP/1.1 200`, che indica che la connessione è stata stabilita.
+ Aggiorna il protocollo HTTPS per stabilire una connessione di lunga durata WebSockets .
+ Avvia la trasmissione dei dati tramite la connessione agli endpoint del dispositivo di tunneling sicuro. 

**Nota**  
I seguenti comandi utilizzati negli esempi utilizzano il flag `verbosity` per illustrare una panoramica dei diversi passaggi descritti in precedenza dopo l'esecuzione del proxy locale. È consigliabile utilizzare questo flag solo per effettuare dei test.

**Esecuzione di proxy locale in modalità di origine**  
I comandi seguenti mostrano come eseguire il proxy locale nella modalità di origine.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -s 5555 -v 5 -r us-west-2
```

Di seguito è riportato un output di esempio dell'esecuzione del proxy locale nella modalità `source`.

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.11
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 0a109afffee745f5-00001341-000b8138-cc6c878d80e8adb0-f186064b
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**Esecuzione del proxy locale nella modalità di destinazione**  
I comandi seguenti mostrano come eseguire il proxy locale nella modalità di destinazione.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -d 22 -v 5 -r us-west-2
```

Di seguito è riportato un output di esempio dell'esecuzione del proxy locale nella modalità `destination`.

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.1
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 06717bfffed3fd05-00001355-000b8315-da3109a85da804dd-24c3d10d
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```

# Flussi di dati multiplex e utilizzo di connessioni TCP simultanee in un tunnel sicuro
<a name="multiplexing"></a>

Puoi utilizzare più flussi dei dati per tunnel mediante la caratteristica multiplexing di tunneling sicuro. Con il multiplexing, puoi risolvere i problemi dei dispositivi utilizzando più flussi di dati. È inoltre possibile ridurre il carico operativo eliminando la necessità di creare, implementare e avviare più proxy locali o aprire più tunnel sullo stesso dispositivo. Ad esempio, il multiplexing può essere utilizzato nel caso di un browser web che richiede l'invio di più flussi di dati HTTP e SSH.

Per ogni flusso di dati, il tunneling AWS IoT sicuro supporta connessioni TCP simultanee. L'utilizzo di connessioni simultanee riduce il rischio di timeout in caso di richieste multiple da parte del client. Ad esempio, può ridurre il tempo di caricamento quando si accede in remoto a un server Web locale al dispositivo di destinazione.

Nelle sezioni seguenti vengono fornite ulteriori informazioni sul multiplexing e sull'utilizzo di connessioni TCP simultanee e sui diversi casi d'uso.

**Topics**
+ [Flussi multipli dei dati multiplex in un tunnel sicuro](multiplexing-multiple-streams.md)
+ [Utilizzo di connessioni TCP simultanee in un tunnel sicuro](multiplexing-simultaneous-tcp.md)

# Flussi multipli dei dati multiplex in un tunnel sicuro
<a name="multiplexing-multiple-streams"></a>

È possibile utilizzare la funzionalità di multiplexing per dispositivi che utilizzano più connessioni o porte. Il multiplexing può essere utilizzato anche quando sono necessarie più connessioni a un dispositivo remoto per risolvere eventuali problemi. Ad esempio, può essere utilizzato nel caso di un browser web che richiede l'invio di più flussi di dati HTTP e SSH. I dati delle applicazioni da entrambi gli stream vengono inviati contemporaneamente al dispositivo attraverso il tunnel multiplex.

## Esempio di caso d’uso
<a name="multiplexing-use-case"></a>

Ad esempio, potrebbe essere necessario connettersi a un'applicazione web sul dispositivo per modificare alcuni parametri di rete, mentre contemporaneamente emettono comandi shell attraverso il terminale per verificare che il dispositivo funzioni correttamente con i nuovi parametri di rete. In questo scenario, potrebbe essere necessario connettersi al dispositivo tramite HTTP e SSH e trasferire due flussi di dati paralleli per accedere contemporaneamente all'applicazione Web e al terminale. Con la funzione multiplexing, questi due flussi indipendenti possono essere trasferiti contemporaneamente sullo stesso tunnel.

![\[Un diagramma che mostra l'architettura cloud IoT con dispositivi di origine, server proxy e dispositivi di destinazione per lo streaming di dati su protocolli diversi.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tunnel-multiplexing.png)


## Come impostare un tunnel multiplex
<a name="multiplexing-tutorial"></a>

La procedura seguente illustra come configurare un tunnel multiplex per la risoluzione dei problemi relativi ai dispositivi che utilizzano applicazioni che richiedono connessioni a più porte. Imposterai un tunnel con due flussi multiplex: un flusso HTTP e uno SSH.

1. 

**(Facoltativo) Crea file di configurazione**

   Facoltativamente è possibile configurare il dispositivo di origine e di destinazione con i file di configurazione. Usa i file di configurazione se è probabile che le mappature delle porte cambino frequentemente. È possibile saltare questo passaggio se si preferisce specificare la mappatura delle porte tramite CLI o non è necessario avviare il proxy locale su porte di ascolto designate. Per ulteriori informazioni su come utilizzare i file di configurazione, vedi [Opzioni impostate tramite --config](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via---config) in. GitHub

   1. Sul tuo dispositivo di origine, nella cartella in cui verrà eseguito il proxy locale, crea una cartella di configurazione chiamata `Config`. All'interno di questa cartella, crea un file chiamato `SSHSource.ini` con il seguente contenuto:

      ```
      HTTP1 = 5555
      SSH1 = 3333
      ```

   1. Sul dispositivo di destinazione, nella cartella in cui verrà eseguito il proxy locale, crea una cartella di configurazione chiamata `Config`. All'interno di questa cartella, crea un file chiamato `SSHDestination.ini` con il seguente contenuto:

      ```
      HTTP1 = 80
      SSH1 = 22
      ```

1. 

**Apertura di un tunnel**

   Aprire un tunnel utilizzando l'operazione `OpenTunnel` API o il comando `open-tunnel` CLI. Configura la destinazione specificando `SSH1` e `HTTP1` come servizi e il nome dell' AWS IoT elemento che corrisponde al tuo dispositivo remoto. Le applicazioni SSH e HTTP sono in esecuzione su questo dispositivo remoto. È necessario aver già creato l'oggetto IoT nel AWS IoT registro. Per ulteriori informazioni, consulta [Gestire gli elementi con il registro](thing-registry.md).

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP1,SSH1
   ```

   L'esecuzione di questo comando genera i token di accesso di origine e destinazione che utilizzerai per eseguire il proxy locale.

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**Configurazione e avvio del proxy locale**

   Prima di poter eseguire il proxy locale, configura il AWS IoT Device Client o scarica il codice sorgente del proxy locale da [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)e crealo per la piattaforma che preferisci. È quindi possibile avviare il proxy locale di destinazione e di origine per connettersi al tunnel sicuro. Per ulteriori informazioni sulla configurazione e l'utilizzo del proxy locale, consulta [Come utilizzare il proxy locale](how-use-local-proxy.md).
**Nota**  
Sul dispositivo di origine, se non si utilizzano file di configurazione o non si specifica la mappatura delle porte utilizzando l'interfaccia a riga di comando, è comunque possibile utilizzare lo stesso comando per eseguire il proxy locale. Il proxy locale raccoglierà le porte disponibili per utilizzare e gestire le mappature al tuo posto.

------
#### [ Start local proxy using configuration files ]

   Esegui i seguenti comandi per eseguire il proxy locale nelle modalità di origine e destinazione utilizzando i file di configurazione.

   ```
   // ----------------- Start the destination local proxy -----------------------
   ./localproxy -r us-east-1 -m dst -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------
   // You also run the same command below if you want the local proxy to
   // choose the mappings for you instead of using configuration files.
   ./localproxy -r us-east-1 -m src -t source_client_access_token
   ```

------
#### [ Start local proxy using CLI port mapping ]

   Esegui i seguenti comandi per eseguire il proxy locale nelle modalità di origine e destinazione specificando esplicitamente le mappature delle porte utilizzando l'interfaccia a riga di comando.

   ```
   // ----------------- Start the destination local proxy -----------------------------------
   ./localproxy -r us-east-1 -d HTTP1=80,SSH1=22 -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------------------
   ./localproxy -r us-east-1 -s HTTP1=5555,SSH1=33 -t source_client_access_token
   ```

------

I dati delle applicazioni dalla connessione SSH e HTTP possono ora essere trasferiti contemporaneamente attraverso il tunnel multiplex. Come si può vedere dalla mappa sottostante, l'identificatore del servizio funge da formato leggibile per tradurre la mappatura delle porte tra il dispositivo di origine e quello di destinazione. Con questa configurazione, il tunneling sicuro inoltra tutto il traffico HTTP in entrata dalla porta *5555* del dispositivo di origine alla porta del dispositivo di destinazione e tutto il traffico SSH in entrata da una porta *3333* all'altra *80* sul dispositivo di destinazione. *22*

![\[Un processo di traduzione per mappare gli identificatori di servizio dai proxy locali di origine e destinazione alle mappature delle porte tradotte dopo l'elaborazione.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/multiplexing-post-mapping-translation.png)


# Utilizzo di connessioni TCP simultanee in un tunnel sicuro
<a name="multiplexing-simultaneous-tcp"></a>

AWS IoT il tunneling sicuro supporta più di una connessione TCP contemporaneamente per ogni flusso di dati. È possibile utilizzare questa funzionalità quando sono necessarie connessioni simultanee a un dispositivo remoto. L'utilizzo di connessioni TCP simultanee riduce il rischio di timeout in caso di richieste multiple da parte del client. Ad esempio, quando si accede a un server Web su cui sono in esecuzione più componenti, le connessioni TCP simultanee possono ridurre il tempo necessario per caricare il sito. 

**Nota**  
Le connessioni TCP simultanee hanno un limite di larghezza di banda di 800 Kilobyte al secondo per ciascuna. Account AWS AWS IoT il tunneling sicuro può configurare questo limite automaticamente in base al numero di richieste in arrivo.

## Esempio di caso d’uso
<a name="tcp-use-case"></a>

Supponiamo che sia necessario accedere in remoto a un server Web locale al dispositivo di destinazione e con più componenti in esecuzione su di esso. Con una singola connessione TCP, mentre si tenta di accedere al server Web, il caricamento sequenziale può aumentare il tempo necessario per caricare le risorse sul sito. Le connessioni TCP simultanee possono ridurre il tempo di caricamento soddisfacendo i requisiti di risorse del sito, riducendo così il tempo di accesso. Il diagramma seguente mostra come sono supportate le connessioni TCP simultanee per il flusso di dati verso l'applicazione del server Web in esecuzione sul dispositivo remoto.

**Nota**  
Se si desidera accedere a più applicazioni in esecuzione sul dispositivo remoto utilizzando il tunnel, è possibile utilizzare il multiplexing del tunnel. Per ulteriori informazioni, consulta [Flussi multipli dei dati multiplex in un tunnel sicuro](multiplexing-multiple-streams.md).

![\[Un'illustrazione che mostra la configurazione cloud IoT con dispositivo di origine, proxy locale, server proxy e dispositivo di destinazione con applicazione server Web, connesso tramite protocolli TCP e WSS.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/tcp-tunneling.png)


## Come usare connessioni TCP simultanee
<a name="multiple-tcp-tutorial"></a>

La procedura seguente illustra come utilizzare connessioni TCP simultanee per accedere al browser Web sul dispositivo remoto. In caso di più richieste da parte del client, il tunneling AWS IoT sicuro configura automaticamente connessioni TCP simultanee per gestire le richieste, riducendo così i tempi di caricamento.

1. 

**Apertura di un tunnel**

   Aprire un tunnel utilizzando l'operazione `OpenTunnel` API o il comando `open-tunnel` CLI. Configura la destinazione specificando `HTTP` come servizio e il nome dell'oggetto AWS IoT che corrisponde al tuo dispositivo remoto. L'applicazione del server Web è in esecuzione su questo dispositivo remoto. È necessario aver già creato l'oggetto IoT nel AWS IoT registro. Per ulteriori informazioni, consulta [Gestire gli elementi con il registro](thing-registry.md).

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP
   ```

   L'esecuzione di questo comando genera i token di accesso di origine e destinazione che utilizzerai per eseguire il proxy locale.

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**Configurazione e avvio del proxy locale**

   Prima di poter eseguire il proxy locale, scarica il codice sorgente del proxy locale da [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)e crealo per la piattaforma che preferisci. È quindi possibile avviare il proxy locale di destinazione e di origine per connettersi al tunnel sicuro e iniziare a utilizzare l'applicazione del server Web remoto.
**Nota**  
Affinché il tunneling AWS IoT sicuro utilizzi connessioni TCP simultanee, devi eseguire l'aggiornamento alla versione più recente del proxy locale. Questa funzionalità non è disponibile se si configura il proxy locale utilizzando AWS IoT Device Client.

   ```
   // Start the destination local proxy
   ./localproxy -r us-east-1 -d HTTP=80 -t destination_client_access_token
   
   // Start the source local proxy
   ./localproxy -r us-east-1 -s HTTP=5555 -t source_client_access_token
   ```

   Per ulteriori informazioni sulla configurazione e l'utilizzo del proxy locale, consulta [Come utilizzare il proxy locale](how-use-local-proxy.md).

È ora possibile utilizzare il tunnel per accedere all'applicazione del server Web. AWS IoT il tunneling sicuro configurerà e gestirà automaticamente le connessioni TCP simultanee quando ci sono più richieste dal client.

# Configurazione di un dispositivo remoto e utilizzo dell'agente IoT
<a name="configure-remote-device"></a>

L'agente IoT viene utilizzato per ricevere il messaggio MQTT che include il token di accesso client e avviare un proxy locale sul dispositivo remoto. Se desideri che il tunneling sicuro fornisca il token di accesso client, devi installare ed eseguire l'agente IoT sul dispositivo remoto. L'agente IoT deve sottoscrivere l'argomento MQTT dell'IoT riservato riportato di seguito:

**Nota**  
Se si desidera consegnare il token di accesso del client di destinazione al dispositivo remoto tramite metodi diversi dalla sottoscrizione all'argomento MQTT riservato, potrebbero essere necessari un listener CAT (Destination Client Access Token) e un proxy locale. Il listener CAT deve funzionare con il meccanismo di consegna del token di accesso client scelto ed essere in grado di avviare un proxy locale in modalità di destinazione.

## Snippet dell'agente IoT
<a name="agent-snippet"></a>

L'agente IoT deve iscriversi al seguente argomento IoT MQTT riservato in modo da poter ricevere il messaggio MQTT e avviare il proxy locale:

`$aws/things/thing-name/tunnels/notify`

`thing-name`Dov'è il nome dell' AWS IoT oggetto associato al dispositivo remoto.

Di seguito è riportato un esempio di payload del messaggio MQTT:

```
{
    "clientAccessToken": "destination-client-access-token",
    "clientMode": "destination",
    "region": "aws-region",
    "services": ["destination-service"]
}
```

Dopo aver ricevuto un messaggio MQTT, l'agente IoT deve avviare un proxy locale sul dispositivo remoto con i parametri appropriati.

Il seguente codice Java dimostra come utilizzare [AWS IoT Device SDK](https://github.com/aws/aws-iot-device-sdk-java) e [ProcessBuilder](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html)dalla libreria Java per creare un semplice agente IoT che funzioni con il tunneling sicuro.

```
// Find the IoT device endpoint for your Account AWS
final String endpoint = iotClient.describeEndpoint(new DescribeEndpointRequest().withEndpointType("iot:Data-ATS")).getEndpointAddress();

// Instantiate the IoT Agent with your AWS credentials
final String thingName = "RemoteDeviceA";
final String tunnelNotificationTopic = String.format("$aws/things/%s/tunnels/notify", thingName);
final AWSIotMqttClient mqttClient = new AWSIotMqttClient(endpoint, thingName,
                 "your_aws_access_key", "your_aws_secret_key");

try {
    mqttClient.connect();
    final TunnelNotificationListener listener = new TunnelNotificationListener(tunnelNotificationTopic);
    mqttClient.subscribe(listener, true);
}
finally {
    mqttClient.disconnect();
}

private static class TunnelNotificationListener extends AWSIotTopic {
    public TunnelNotificationListener(String topic) {
        super(topic);
    }

    @Override
    public void onMessage(AWSIotMessage message) {
        try {
            // Deserialize the MQTT message
            final JSONObject json = new JSONObject(message.getStringPayload());
 
            final String accessToken = json.getString("clientAccessToken");
            final String region = json.getString("region");
            
            final String clientMode = json.getString("clientMode");
            if (!clientMode.equals("destination")) {
                throw new RuntimeException("Client mode " + clientMode + " in the MQTT message is not expected");
            }

            final JSONArray servicesArray = json.getJSONArray("services");
            if (servicesArray.length() > 1) {
                throw new RuntimeException("Services in the MQTT message has more than 1 service");
            }
            final String service = servicesArray.get(0).toString();
            if (!service.equals("SSH")) {
                throw new RuntimeException("Service " + service + " is not supported");
            }

            // Start the destination local proxy in a separate process to connect to the SSH Daemon listening port 22
            final ProcessBuilder pb = new ProcessBuilder("localproxy",
                        "-t", accessToken,
                        "-r", region,
                        "-d", "localhost:22");
            pb.start();
        }
        catch (Exception e) {
            log.error("Failed to start the local proxy", e);
        }
    }
}
```

# Controllo dell'accesso ai tunnel
<a name="tunnel-access"></a>

Il tunneling sicuro fornisce le operazioni, le risorse e le chiavi di contesto della condizione specifiche del servizio da utilizzare nelle policy di autorizzazione IAM.

## Prerequisiti di accesso al tunnel
<a name="tunnel-access-prereq"></a>
+ [Scopri come proteggere le AWS risorse utilizzando le policy IAM.](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html)
+ Informazioni su come creare e valutare le [condizioni IAM](      https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).
+ Scopri come proteggere AWS le risorse utilizzando i [tag delle risorse](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html).

## Policy di accesso al tunnel
<a name="tunnel-access-policies"></a>

È necessario utilizzare le seguenti policy per concedere le autorizzazioni a utilizzare l'API di tunneling sicuro. Per ulteriori informazioni sulla AWS IoT sicurezza, consulta[Gestione delle identità e degli accessi per AWS IoT](security-iam.md).

### iot: OpenTunnel
<a name="open-tunnel-action"></a>

L'operazione policy `iot:OpenTunnel` concede un'autorizzazione principale per chiamare [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html).

Nell'elemento `Resource` dell'istruzione di policy IAM:
+ Specifica l'ARN del tunnel con carattere jolly:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Specifica l'ARN di un oggetto per gestire l'autorizzazione `OpenTunnel` per specifici oggetti IoT:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

Ad esempio, la seguente dichiarazione di policy consente di aprire un tunnel per l'oggetto IoT denominato `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

L'operazione policy `iot:OpenTunnel` supporta le seguenti chiavi di condizione:
+ `iot:ThingGroupArn`
+ `iot:TunnelDestinationService`
+ `aws:RequestTag`/*tag-key*
+ `aws:SecureTransport`
+ `aws:TagKeys`

La seguente istruzione della policy consente di aprire un tunnel per l'oggetto, se l'oggetto appartiene a un gruppo di oggetti con un nome che inizia con `TestGroup` e il servizio di destinazione configurato nel tunnel è SSH.

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "ForAnyValue:StringLike": {
            "iot:ThingGroupArn": [
                "arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
            ]
        },
        "ForAllValues:StringEquals": {
            "iot:TunnelDestinationService": [
                "SSH"
            ]
        }
    }
}
```

È inoltre possibile utilizzare i tag delle risorse per controllare le autorizzazioni per aprire i tunnel. Ad esempio, la seguente dichiarazione policy consente di aprire un tunnel se la chiave tag `Owner` è presente con un valore di `Admin` e non vengono specificati altri tag. Per informazioni generali sull'utilizzo dei tag, consulta [Taggare le tue risorse AWS IoT](tagging-iot.md).

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "StringEquals": {
            "aws:RequestTag/Owner": "Admin"
        },
        "ForAllValues:StringEquals": {
            "aws:TagKeys": "Owner"
        }
    }
}
```

### IoT: RotateTunnelAccessToken
<a name="rotate-tunnel-action"></a>

L'operazione policy `iot:RotateTunnelAccessToken` concede un'autorizzazione principale per chiamare [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RorateTunnelAccessToken.html).

Nell'elemento `Resource` dell'istruzione di policy IAM:
+ Specifica l'ARN del tunnel completo:

  `arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

  Puoi anche utilizzare l'ARN del tunnel con carattere jolly:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Specifica l'ARN di un oggetto per gestire l'autorizzazione `RotateTunnelAccessToken` per specifici oggetti IoT:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

Ad esempio, la seguente istruzione di policy consente di ruotare il token di accesso di origine di un tunnel o il token di accesso di destinazione di un tunnel per l'oggetto IoT denominato `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:RotateTunnelAccessToken",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

L'operazione policy `iot:RotateTunnelAccessToken` supporta le seguenti chiavi di condizione:
+ `iot:ThingGroupArn`
+ `iot:TunnelDestinationService`
+ `iot:ClientMode`
+ `aws:SecureTransport`

La seguente istruzione di policy consente di ruotare il token di accesso di destinazione sull'oggetto se l'oggetto appartiene a un gruppo di oggetti con un nome che inizia con `TestGroup`, il servizio di destinazione configurato nel tunnel è SSH e il client è in modalità `DESTINATION`.

```
{
    "Effect": "Allow",
    "Action": "iot:RotateTunnelAccessToken",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "ForAnyValue:StringLike": {
            "iot:ThingGroupArn": [
                "arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
            ]
        },
        "ForAllValues:StringEquals": {
            "iot:TunnelDestinationService": [
                "SSH"
            ],
            "iot:ClientMode": "DESTINATION"
        }
    }
}
```

### IoT: DescribeTunnel
<a name="describe-tunnel-action"></a>

L'operazione policy `iot:DescribeTunnel` concede un'autorizzazione principale per chiamare [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html).

Nell'elemento `Resource` dell'istruzione di policy IAM, specifica l'ARN del tunnel completo:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

Puoi anche utilizzare l'ARN del carattere jolly:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

L'operazione policy `iot:DescribeTunnel` supporta le seguenti chiavi di condizione:
+ `aws:ResourceTag/tag-key`
+ `aws:SecureTransport`

La seguente dichiarazione policy consente di chiamare `DescribeTunnel` se il tunnel richiesto è contrassegnato con la chiave `Owner` con un valore pari a `Admin`.

```
{
    "Effect": "Allow",
    "Action": "iot:DescribeTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/Owner": "Admin"
        }
    }
}
```

### IoT: ListTunnels
<a name="list-tunnels-action"></a>

L'operazione policy `iot:ListTunnels` concede un'autorizzazione principale per chiamare [ListTunnels](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_ListTunnels.html).

Nell'elemento `Resource` dell'istruzione di policy IAM:
+ Specifica l'ARN del tunnel con carattere jolly:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Specifica l'ARN di un oggetto per gestire l'autorizzazione `ListTunnels` per gli oggetti IoT selezionati:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

L'operazione di policy `iot:ListTunnels` supporta la chiave di condizione `aws:SecureTransport`.

La seguente dichiarazione policy consente di elencare i tunnel per l'oggetto denominato `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:ListTunnels",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

### IoT: ListTagsForResource
<a name="list-tags-for-resource-action"></a>

L'operazione policy `iot:ListTagsForResource` concede un'autorizzazione principale per chiamare `ListTagsForResource`.

Nell'elemento `Resource` dell'istruzione di policy IAM, specifica l'ARN del tunnel completo:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

Puoi anche utilizzare l'ARN del tunnel con carattere jolly:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

L'operazione di policy `iot:ListTagsForResource` supporta la chiave di condizione `aws:SecureTransport`.

### IoT: CloseTunnel
<a name="close-tunnel-action"></a>

L'operazione policy `iot:CloseTunnel` concede un'autorizzazione principale per chiamare [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html).

Nell'elemento `Resource` dell'istruzione di policy IAM, specifica l'ARN del tunnel completo:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

Puoi anche utilizzare l'ARN del tunnel con carattere jolly:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

L'operazione policy `iot:CloseTunnel` supporta le seguenti chiavi di condizione:
+ `iot:Delete`
+ `aws:ResourceTag/tag-key`
+ `aws:SecureTransport`

La seguente dichiarazione policy consente di chiamare `CloseTunnel` se il parametro `Delete` della richiesta è `false` e il tunnel richiesto viene taggato con la chiave `Owner` con un valore pari a `QATeam`.

```
{
    "Effect": "Allow",
    "Action": "iot:CloseTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "Bool": {
            "iot:Delete": "false"
        },
        "StringEquals": {
            "aws:ResourceTag/Owner": "QATeam"
        }
    }
}
```

### IoT: TagResource
<a name="tag-resource-action"></a>

L'operazione policy `iot:TagResource` concede un'autorizzazione principale per chiamare `TagResource`.

Nell'elemento `Resource` dell'istruzione di policy IAM, specifica l'ARN del tunnel completo:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

Puoi anche utilizzare l'ARN del tunnel con carattere jolly:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

L'operazione di policy `iot:TagResource` supporta la chiave di condizione `aws:SecureTransport`.

### IoT: UntagResource
<a name="untag-resource-action"></a>

L'operazione policy `iot:UntagResource` concede un'autorizzazione principale per chiamare `UntagResource`.

Nell'elemento `Resource` dell'istruzione di policy IAM, specifica l'ARN del tunnel completo:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

Puoi anche utilizzare l'ARN del tunnel con carattere jolly:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

L'operazione di policy `iot:UntagResource` supporta la chiave di condizione `aws:SecureTransport`.

# Risoluzione dei problemi di connettività del tunneling AWS IoT sicuro mediante la rotazione dei token di accesso del client
<a name="iot-secure-tunneling-troubleshooting"></a>

Quando si utilizza il tunneling AWS IoT sicuro, è possibile che si verifichino problemi di connettività anche se il tunnel è aperto. Le sezioni seguenti illustrano alcuni possibili problemi e come è possibile risolverli con la rotazione dei token di accesso client. Per ruotare il client access token (CAT), usa l'[RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API o il. [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html) AWS CLI A seconda che si verifichi un errore con l'utilizzo del client in modalità di origine o di destinazione, è possibile ruotare il CAT in modalità di origine o destinazione o entrambe.

**Nota**  
Se non sei sicuro se il CAT debba essere ruotato sull'origine o sulla destinazione, puoi ruotare il CAT sia sull'origine che sulla destinazione impostando `ClientMode` su ALL quando usi l'API `RotateTunnelAccessToken`.
La rotazione del CAT non estende la durata del tunnel. Ad esempio, supponiamo che la durata del tunnel è di 12 ore e il tunnel è già aperto da 4 ore. Quando ruoti i token di accesso, i nuovi token generati possono essere utilizzati solo per le restanti 8 ore.

**Topics**
+ [Errore del token di accesso client non valido](#invalid-access-token)
+ [Errore di mancata corrispondenza del token client](#client-token-mismatch)
+ [Problemi di connettività del dispositivo remoto](#tunnel-open-device-error)

## Errore del token di accesso client non valido
<a name="invalid-access-token"></a>

Quando si utilizza il tunneling AWS IoT sicuro, è possibile che si verifichi un errore di connessione quando si utilizza lo stesso token di accesso client (CAT) per riconnettersi allo stesso tunnel. In questo caso, il proxy locale non può connettersi al server proxy di tunneling sicuro. Se utilizzi un client in modalità di origine, potresti visualizzare il seguente messaggio di errore:

```
Invalid access token: The access token was previously used and cannot be used again
```

L'errore si verifica perché il token di accesso client (CAT) può essere utilizzato solo una volta dal proxy locale e quindi diventa non valido. Per risolvere questo errore, ruota il token di accesso client in modalità `SOURCE` per generare un nuovo CAT per l'origine. Per un esempio che mostra come ruotare il CAT di origine, consulta [Esempio di rotazione del CAT di origine](#rotate-token-source-example).

## Errore di mancata corrispondenza del token client
<a name="client-token-mismatch"></a>

**Nota**  
Non è consigliabile utilizzare i token client per riutilizzare il CAT. Ti consigliamo di utilizzare l'API `RotateTunnelAccessToken` per ruotare i token di accesso client per riconnetterti al tunnel.

Se usi i token client, puoi riutilizzare il CAT per riconnetterti al tunnel. Per riutilizzare il CAT, devi fornire al token client il CAT la prima volta che ti connetti al tunneling sicuro. Il tunneling sicuro memorizza il token client, quindi per i successivi tentativi di connessione con lo stesso token, è necessario fornire anche il token client. Per ulteriori informazioni sull'utilizzo dei token client, consulta l'implementazione di riferimento del [proxy locale](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/master/V2WebSocketProtocolGuide.md) in. GitHub

Quando si utilizzano i token client, se usi un client in modalità di origine, è possibile che venga visualizzato il seguente errore:

```
Invalid client token: The provided client token does not match the client token 
				that was previously set.
```

L'errore si verifica perché il token client fornito non corrisponde al token client fornito con il CAT quando si accede al tunnel. Per risolvere questo errore, ruota il CAT in modalità `SOURCE` per generare un nuovo CAT per l'origine. Di seguito viene riportato un esempio:

### Esempio di rotazione del CAT di origine
<a name="rotate-token-source-example"></a>

Di seguito viene illustrato un esempio di come eseguire l'API `RotateTunnelAccessToken` in modalità `SOURCE` per generare un nuovo CAT per l'origine:

```
aws iotsecuretunneling rotate-tunnel-access-token \ 
    --region <region> \ 
    --tunnel-id <tunnel-id> \ 
    --client-mode SOURCE
```

L'esecuzione di questo comando genera un nuovo token di accesso di origine e restituisce l'ARN del tunnel.

```
{
    "sourceAccessToken": "<source-access-token>", 
    "tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/<tunnel-id>"
}
```

Ora puoi utilizzare il nuovo token di origine per connettere il proxy locale in modalità di origine.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=<source-access-token>
./localproxy -r <region> -s <port>
```

Di seguito è riportato un output di esempio dell'esecuzione del proxy locale:

```
...

[info]    Starting proxy in source mode
...
[info]    Successfully established websocket connection with proxy server ...
[info]    Listening for new connection on port <port>
...
```

## Problemi di connettività del dispositivo remoto
<a name="tunnel-open-device-error"></a>

Quando si utilizza il tunneling AWS IoT sicuro, il dispositivo potrebbe disconnettersi in modo imprevisto anche se il tunnel è aperto. [Per identificare se un dispositivo è ancora connesso al tunnel, puoi utilizzare l'API o il [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)describe-tunnel.](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/describe-tunnel.html) AWS CLI

Un dispositivo può essere disconnesso per diversi motivi. Per risolvere il problema di connettività, è possibile ruotare il CAT sulla destinazione se il dispositivo è stato disconnesso per i seguenti possibili motivi:
+ Il CAT sulla destinazione è diventato non valido.
+ Il token non è stato consegnato al dispositivo tramite l'argomento MQTT riservato del tunneling sicuro:

  `$aws/things/<thing-name>/tunnels/notify`

Gli esempi seguenti mostrano come risolvere il problema:

### Esempio di rotazione del CAT di destinazione
<a name="rotate-token-dest-example"></a>

Considera il dispositivo remoto `<RemoteThing1>`. Per aprire un tunnel per quell'oggetto puoi usare il seguente comando:

```
aws iotsecuretunneling open-tunnel \ 
    --region <region> \ 
    --destination-config thingName=<RemoteThing1>,services=SSH
```

L'esecuzione di questo comando genera i dettagli del tunnel e il CAT per l'origine e la destinazione.

```
{
    "sourceAccessToken": "<source-access-token>", 
    "destinationAccessToken": "<destination-access-token>", 
    "tunnelId": "<tunnel-id>", 
    "tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/tunnel-id"
}
```

Tuttavia, quando si utilizza l'[DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)API, l'output indica che il dispositivo è stato disconnesso, come illustrato di seguito:

```
aws iotsecuretunneling describe-tunnel \ 
    --tunnel-id <tunnel-id> \ 
    --region <region>
```

L'esecuzione di questo comando indica che il dispositivo non è ancora connesso.

```
{
    "tunnel": {
        ...
        "destinationConnectionState": {
            "status": "DISCONNECTED"
        },
        ...
    }
}
```

Per risolvere questo errore, esegui l'API `RotateTunnelAccessToken` con il client in modalità `DESTINATION` e le configurazioni per la destinazione. L'esecuzione di questo comando revoca il vecchio token di accesso, genera un nuovo token e invia nuovamente questo token all'argomento MQTT:

`$aws/things/<thing-name>/tunnels/notify`

```
aws iotsecuretunneling rotate-tunnel-access-token \ 
    --tunnel-id <tunnel-id> \ 
    --client-mode DESTINATION \ 
    --destination-config thingName=<RemoteThing1>,services=SSH \ 
    --region <region>
```

L'esecuzione di questo comando genera il nuovo token di accesso come mostrato di seguito. Il token viene quindi consegnato al dispositivo per connettersi al tunnel, se l'agente del dispositivo è configurato correttamente.

```
{
    "destinationAccessToken": "destination-access-token", 
    "tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id"
}
```