

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

# Verifica il documento di identità dell'istanza per un' EC2 istanza Amazon
<a name="verify-iid"></a>

Se si intende utilizzare i contenuti del Documenti di identità dell'istanza per uno scopo importante, occorre verificarne il contenuto e l'autenticità prima di utilizzarlo.

Il Documenti di identità dell'istanza di testo normale è accompagnato da tre firme con hash e crittografate. Puoi utilizzare queste firme per verificare l'origine e l'autenticità del Documenti di identità dell'istanza e delle informazioni incluse. Vengono fornite le seguenti firme:
+ Firma con codifica Base64: si tratta di un hash con codifica base64 del documento di identità dell'istanza che viene crittografato utilizzando una coppia SHA256 di chiavi RSA.
+ PKCS7 Firma: si tratta di un SHA1 hash del documento di identità dell'istanza crittografato utilizzando una coppia di chiavi DSA.
+ Firma RSA-2048: si tratta di un SHA256 hash del documento di identità dell'istanza crittografato utilizzando una coppia di chiavi RSA-2048.

Ogni firma è disponibile in un endpoint diverso nei metadati dell'istanza. Puoi utilizzare una di queste firme qualsiasi a seconda dei requisiti di hashing e di crittografia. Per verificare le firme, è necessario utilizzare il certificato pubblico corrispondente. AWS 

**Contents**
+ [Opzione 1: verifica il documento di identità dell'istanza utilizzando la firma PKCS7](#verify-pkcs7)
+ [Opzione 2: Verifica il documento di identità dell'istanza usando la firma con codifica base64](#verify-signature)
+ [Opzione 3: Verifica il documento di identità dell'istanza usando la firma RSA-2048](#verify-rsa2048)

## Opzione 1: verifica il documento di identità dell'istanza utilizzando la firma PKCS7
<a name="verify-pkcs7"></a>

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il certificato pubblico AWS DSA.

### Istanze Linux
<a name="verify-pkcs7-linux"></a>

**Per verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il certificato AWS pubblico DSA**

1. Collegati all'istanza.

1. Recupera la PKCS7 firma dai metadati dell'istanza e aggiungila a un nuovo file denominato `pkcs7` insieme all'intestazione e al piè di pagina richiesti. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   $ echo "-----BEGIN PKCS7-----" >> pkcs7 \
   	&& TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/pkcs7 >> pkcs7 \
   	&& echo "" >> pkcs7 \
   	&& echo "-----END PKCS7-----" >> pkcs7
   ```

------
#### [ IMDSv1 ]

   ```
   $ echo "-----BEGIN PKCS7-----" >> pkcs7 \
   	&& curl -s http://169.254.169.254/latest/dynamic/instance-identity/pkcs7 >> pkcs7 \
   	&& echo "" >> pkcs7 \
   	&& echo "-----END PKCS7-----" >> pkcs7
   ```

------

1. Trovare il certificato pubblico **DSA** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate`.

1. Utilizzare il comando **OpenSSL smime** per verificare la firma. Includere l'opzione `-verify` per indicare che la firma deve essere verificata e l'opzione `-noverify` per indicare che il certificato non deve essere verificato.

   ```
   $ openssl smime -verify -in pkcs7 -inform PEM -certfile certificate -noverify | tee document
   ```

   Se la firma è valida, viene visualizzato il messaggio `Verification successful`.

   Il comando, inoltre, scrive i contenuti del documento di identità dell'istanza in un nuovo file denominato `document`. Puoi confrontare i contenuti del documento di identità dell'istanza dai metadati dell'istanza con i contenuti di questo file utilizzando i comandi seguenti.

   ```
   $ openssl dgst -sha256 < document
   ```

   ```
   $ curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256
   ```

    Se non è possibile verificare la firma, contattare Supporto.

### Istanze Windows
<a name="verify-pkcs7-windows"></a>

**Prerequisiti**  
Questa procedura richiede la classe `System.Security` Microsoft .NET Core. Per aggiungere la classe alla PowerShell sessione, esegui il comando seguente.

```
PS C:\> Add-Type -AssemblyName System.Security
```

**Nota**  
Il comando aggiunge la classe solo alla PowerShell sessione corrente. Se avvii una nuova sessione, devi eseguire nuovamente il comando.

**Per verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il AWS certificato pubblico DSA**

1. Collegati all'istanza.

1. Recuperate la PKCS7 firma dai metadati dell'istanza, convertitela in un array di byte e aggiungetela a una variabile denominata. `$Signature` Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} -Uri http://169.254.169.254/latest/api/token).Content
   ```

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} -Uri http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Uri http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
   ```

------

1. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata `$Document`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} -Uri http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Document =  [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------

1. Trovare il certificato pubblico **DSA** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate.pem`.

1. Estrarre il certificato dal file del certificato e archiviarlo in una variabile denominata `$Store`.

   ```
   PS C:\> $Store = [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)))
   ```

1. Verifica la firma.

   ```
   PS C:\> $SignatureDocument = [Security.Cryptography.Pkcs.SignedCms]::new()
   ```

   ```
   PS C:\> $SignatureDocument.Decode($Signature)
   ```

   ```
   PS C:\> $SignatureDocument.CheckSignature($Store, $true)
   ```

   Se la firma è valida, il comando non restituisce alcun output. Se non è possibile verificare la firma, il comando restituisce `Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer`. Se non è possibile verificare la firma, contattare Supporto AWS.

1. Convalidare il contenuto del documento di identità dell'istanza.

   ```
   PS C:\> [Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content, $Document)
   ```

   Se il contenuto del documento di identità dell'istanza è valido, il comando restituisce `True`. Se il documento di identità dell'istanza non può essere convalidato, contatta Supporto AWS.

## Opzione 2: Verifica il documento di identità dell'istanza usando la firma con codifica base64
<a name="verify-signature"></a>

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico RSA. AWS 

### Istanze Linux
<a name="verify-signature-linux"></a>

**Per convalidare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico RSA AWS**

1. Collegati all'istanza.

1. Recuperare la firma con codifica base64 dai metadati dell'istanza, convertirla in un formato binario e aggiungerla a un file denominato `signature`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   $ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/signature | base64 -d >> signature
   ```

------
#### [ IMDSv1 ]

   ```
   $ curl -s http://169.254.169.254/latest/dynamic/instance-identity/signature | base64 -d >> signature
   ```

------

1. Recuperare il Documenti di identità dell'istanza in testo normale dai metadati dell'istanza e aggiungerlo a un file denominato `document`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   $ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document >> document
   ```

------
#### [ IMDSv1 ]

   ```
   $ curl -s http://169.254.169.254/latest/dynamic/instance-identity/document >> document
   ```

------

1. Trovare il certificato pubblico **RSA** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate`.

1. Estrai la chiave pubblica dal certificato pubblico AWS RSA e salvala in un file denominato. `key`

   ```
   $ openssl x509 -pubkey -noout -in certificate >> key
   ```

1. Utilizzare il comando **OpenSSL dgst** per verificare il Documenti di identità dell'istanza.

   ```
   $ openssl dgst -sha256 -verify key -signature signature document
   ```

   Se la firma è valida, viene visualizzato il messaggio `Verification successful`.

   Il comando, inoltre, scrive i contenuti del documento di identità dell'istanza in un nuovo file denominato `document`. Puoi confrontare i contenuti del documento di identità dell'istanza dai metadati dell'istanza con i contenuti di questo file utilizzando i comandi seguenti.

   ```
   $ openssl dgst -sha256 < document
   ```

   ```
   $ curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256
   ```

    Se non è possibile verificare la firma, contattare Supporto.

### Istanze Windows
<a name="verify-signature-windows"></a>

**Per convalidare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico RSA AWS**

1. Collegati all'istanza.

1. Recuperare la firma con codifica base64 dai metadati dell'istanza, convertirla in un array di byte e aggiungerla alla variabile denominata `$Signature`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
   ```

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/signature).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/signature).Content)
   ```

------

1. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata `$Document`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Document =  [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------

1. Trovare il certificato pubblico **RSA** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate.pem`.

1. Verificare il documento di identità dell'istanza.

   ```
   PS C:\> [Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)).PublicKey.Key.VerifyData($Document, 'SHA256', $Signature)
   ```

   Se la firma è valida, il comando restituisce `True`. Se non è possibile verificare la firma, contattare Supporto.

## Opzione 3: Verifica il documento di identità dell'istanza usando la firma RSA-2048
<a name="verify-rsa2048"></a>

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la firma RSA-2048 e il certificato pubblico RSA-2048. AWS 

### Istanze Linux
<a name="verify-rsa2048-linux"></a>

**Per verificare il documento di identità dell'istanza utilizzando la firma RSA-2048 e il certificato pubblico RSA-2048 AWS**

1. Collegati all'istanza.

1. Recuperare la firma RSA-2048 dai metadati dell'istanza e aggiungerla a un file denominato `rsa2048`, insieme all'intestazione e al piè di pagina richiesti. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   $ echo "-----BEGIN PKCS7-----" >> rsa2048 \
   	&& TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \
   	&& echo "" >> rsa2048 \
   	&& echo "-----END PKCS7-----" >> rsa2048
   ```

------
#### [ IMDSv1 ]

   ```
   $ echo "-----BEGIN PKCS7-----" >> rsa2048 \
   	&& curl -s http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \
   	&& echo "" >> rsa2048 \
   	&& echo "-----END PKCS7-----" >> rsa2048
   ```

------

1. Trovare il certificato pubblico **RSA-2048** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate`.

1. Utilizzare il comando **OpenSSL smime** per verificare la firma. Includere l'opzione `-verify` per indicare che la firma deve essere verificata e l'opzione `-noverify` per indicare che il certificato non deve essere verificato.

   ```
   $ openssl smime -verify -in rsa2048 -inform PEM -certfile certificate -noverify | tee document
   ```

   Se la firma è valida, viene visualizzato il messaggio `Verification successful`. Se non è possibile verificare la firma, contattare Supporto.

### Istanze Windows
<a name="verify-rsa2048-windows"></a>

**Prerequisiti**  
Questa procedura richiede la classe `System.Security` Microsoft .NET Core. Per aggiungere la classe alla PowerShell sessione, esegui il comando seguente.

```
PS C:\> Add-Type -AssemblyName System.Security
```

**Nota**  
Il comando aggiunge la classe solo alla PowerShell sessione corrente. Se avvii una nuova sessione, devi eseguire nuovamente il comando.

**Per verificare il documento di identità dell'istanza utilizzando la firma RSA-2048 e il certificato pubblico RSA-2048 AWS**

1. Collegati all'istanza.

1. Recuperare la firma RSA-2048 dai metadati dell'istanza, convertirla in un array di byte e aggiungerla a una variabile denominata `$Signature`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
   ```

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/rsa2048).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/rsa2048).Content)
   ```

------

1. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata `$Document`. Utilizzare uno dei comandi seguenti a seconda della versione IMDS utilizzata dall'istanza.

------
#### [ IMDSv2 ]

   ```
   PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------
#### [ IMDSv1 ]

   ```
   PS C:\> $Document =  [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
   ```

------

1. Trovare il certificato pubblico **RSA-2048** per la propria regione in [AWS certificati pubblici, ad esempio firme di documenti di identità](regions-certs.md) e aggiungere i contenuti in un nuovo file denominato `certificate.pem`.

1. Estrarre il certificato dal file del certificato e archiviarlo in una variabile denominata `$Store`.

   ```
   PS C:\> $Store = [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)))
   ```

1. Verifica la firma.

   ```
   PS C:\> $SignatureDocument = [Security.Cryptography.Pkcs.SignedCms]::new()
   ```

   ```
   PS C:\> $SignatureDocument.Decode($Signature)
   ```

   ```
   PS C:\> $SignatureDocument.CheckSignature($Store, $true)
   ```

   Se la firma è valida, il comando non restituisce alcun output. Se non è possibile verificare la firma, il comando restituisce `Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer`. Se non è possibile verificare la firma, contattare Supporto AWS.

1. Convalidare il contenuto del documento di identità dell'istanza.

   ```
   PS C:\> [Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content, $Document)
   ```

   Se il contenuto del documento di identità dell'istanza è valido, il comando restituisce `True`. Se il documento di identità dell'istanza non può essere convalidato, contatta Supporto AWS.