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 instance menggunakan tanda tangan PKCS7 dan sertifikat publik AWS DSA.

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

  2. Ambil tanda tangan PKCS7 dari metadata instans dan tambahkan ke file baru bernama pkcs7 beserta header dan footer yang diperlukan. Gunakan salah satu perintah berikut, tergantung pada versi IMDS yang digunakan oleh instans.

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

  4. Gunakan perintah OpenSSL smime untuk memverifikasi tanda tangan. Masukkan opsi -verify untuk menunjukkan bahwa tanda tangan perlu diverifikasi, dan opsi -noverify untuk menunjukkan bahwa sertifikat tidak perlu diverifikasi.

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

    Jika tanda tangan valid, pesan Verification successful muncul.

    Perintah tersebut juga menulis konten dokumen identitas instans ke file baru bernama document. Anda dapat membandingkan konten dokumen identitas instans dari metadata instans dengan konten file ini menggunakan perintah berikut.

    $ 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

    Jika tanda tangan tidak dapat diverifikasi, kontak AWS Support.

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 DSA AWS
  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 AWS sertifikat publik 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.