Utilizzo della firma RSA-2048 per verificare l'Documenti di identità dell'istanza - Amazon Elastic Compute Cloud

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

Utilizzo della firma RSA-2048 per verificare l'Documenti di identità dell'istanza

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

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

  2. 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
  3. Trovare il certificato pubblico RSA-2048 per la propria regione in AWS certificati pubblici e aggiungere i contenuti in un nuovo file denominato certificate.

  4. 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 AWS Support.

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.

  2. 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)
  3. 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)
  4. Trovare il certificato pubblico RSA-2048 per la propria regione in AWS certificati pubblici e aggiungere i contenuti in un nuovo file denominato certificate.pem.

  5. 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)))
  6. 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 AWS Support.

  7. 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, contattare AWS Support.