Uso de la firma RSA-2048 para verificar el Documentos de identidad de instancia - Amazon Elastic Compute Cloud

Uso de la firma RSA-2048 para verificar el Documentos de identidad de instancia

En este tema, se explica cómo verificar el documento de identidad de la instancia mediante la firma RSA-2048 y el certificado público RSA-2048 de AWS.

Para verificar el documento de identidad de la instancia mediante la firma RSA-2048 y el certificado público RSA-2048 de AWS
  1. Conéctese a la instancia.

  2. Recupere la firma RSA-2048 de los metadatos de la instancia y agréguela a un archivo denominado rsa2048 junto con el encabezado y el pie de página requeridos. Utilice uno de los siguientes comandos dependiendo de la versión IMDS utilizada por la instancia.

    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. Busque el certificado público RSA-2048 para su región en Certificados públicos de AWS y agregue el contenido a un archivo nuevo denominado certificate.

  4. Utilice el comando openSSL smime para verificar la firma. Incluya la opción -verify para indicar que es necesario verificar la firma, y la opción -noverify para indicar que no es necesario verificar el certificado.

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

    Si la firma es válida, aparecerá el mensaje Verification successful. Si no se puede verificar la firma, póngase en contacto con AWS Support.

Requisitos previos

Este procedimiento requiere la clase Microsoft .NET Core de System.Security. Para agregar la clase a la sesión de PowerShell, ejecute el siguiente comando.

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

El comando agrega la clase solo a la sesión actual de PowerShell. Si inicia una nueva sesión, debe ejecutar el comando de nuevo.

Para verificar el documento de identidad de la instancia mediante la firma RSA-2048 y el certificado público RSA-2048 de AWS
  1. Conéctese a la instancia.

  2. Recupere la firma RSA-2048 de los metadatos de instancia, conviértala en una matriz de bytes y agréguela a una variable denominada $Signature. Utilice uno de los siguientes comandos dependiendo de la versión IMDS utilizada por la instancia.

    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. Recupere el documento de identidad de instancia de texto sin formato de los metadatos de instancia, conviértalo en una matriz de bytes y agréguelo a una variable denominada $Document. Utilice uno de los siguientes comandos dependiendo de la versión IMDS utilizada por la instancia.

    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. Busque el certificado público RSA-2048 para su región en Certificados públicos de AWS y agregue el contenido a un archivo nuevo denominado certificate.pem.

  5. Extraiga el certificado del archivo de certificado y guárdelo en una variable denominada $Store.

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

    PS C:\> $SignatureDocument = [Security.Cryptography.Pkcs.SignedCms]::new()
    PS C:\> $SignatureDocument.Decode($Signature)
    PS C:\> $SignatureDocument.CheckSignature($Store, $true)

    Si la firma es válida, el comando no devuelve ningún resultado. Si no se puede verificar la firma, el comando devuelve Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer. Si su firma no se puede verificar, póngase en contacto con AWS Support.

  7. Valide el contenido del documento de identidad de instancia.

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

    Si el contenido del documento de identidad de instancia es válido, el comando devuelve True. Si el documento de identidad de instancia no se puede validar, póngase en contacto con AWS Support.