Menggunakan tanda tangan PKCS7 untuk memverifikasi dokumen identitas instans - Amazon Elastic Compute Cloud

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan tanda tangan PKCS7 untuk memverifikasi dokumen identitas instans

Topik ini menjelaskan cara memverifikasi dokumen identitas instans menggunakan tanda tangan PKCS7 dan sertifikat publik AWS DSA.

Prasyarat

Prosedur ini membutuhkan kelas System.Security Microsoft.NET Core. Untuk menambahkan kelas ke PowerShell sesi Anda, jalankan perintah berikut.

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

Perintah menambahkan kelas ke PowerShell sesi saat ini saja. Jika Anda memulai sesi baru, Anda harus menjalankan perintah lagi.

Untuk memverifikasi dokumen identitas instans menggunakan tanda tangan PKCS7 dan sertifikat publik AWS DSA.
  1. Hubungkan dengan instans.

  2. Ambil tanda tangan PKCS7 dari metadata instans, konversi ke byte array, dan tambahkan ke variabel bernama $Signature. Gunakan salah satu perintah berikut, tergantung pada versi IMDS yang digunakan oleh instans.

    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/pkcs7).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
  3. Ambil dokumen identitas instans plaintext dari metadata instans, ubah menjadi array byte, dan tambahkan ke variabel bernama $Document. Gunakan salah satu perintah berikut, tergantung pada versi IMDS yang digunakan oleh instans.

    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. Temukan sertifikat publik DSA untuk Wilayah Anda di Sertifikat publik AWS dan tambahkan konten ke file baru yang bernama certificate.pem.

  5. Ekstrak sertifikat dari file sertifikat dan simpan dalam variabel bernama $Store.

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

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

    Jika tanda tangan valid, perintah tidak mengembalikan keluaran. Jika tanda tangan tidak dapat diverifikasi, perintah menampilkan Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer. Jika tanda tangan tidak dapat diverifikasi, hubungi AWS Support.

  7. Validasi konten dokumen identitas instans.

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

    Jika konten dokumen identitas instans valid, perintah mengembalikan True. Jika dokumen identitas instans tidak dapat divalidasi, kontak AWS Support.