Memverifikasi tanda tangan pesan Amazon SNS - Amazon Simple Notification Service

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

Memverifikasi tanda tangan pesan Amazon SNS

Untuk memverifikasi keaslian pesan yang dikirim ke titik akhir HTTP Anda oleh Amazon SNS, Anda dapat memverifikasi tanda tangan pesan. Ada dua kasus di mana kami merekomendasikan untuk memverifikasi keaslian pesan. Pertama, ketika Amazon SNS mengirim pesan ke titik akhir HTTP Anda bahwa Anda berlangganan topik. Kedua, saat Amazon SNS mengirimi Anda pesan konfirmasi ke titik akhir HTTP Anda setelah eksekusi Subscribe atau tindakan API. Unsubscribe

Anda harus melakukan hal berikut saat memverifikasi pesan yang dikirim oleh Amazon SNS:

  • Selalu gunakan HTTPS saat mendapatkan sertifikat dari Amazon SNS.

  • Validasi keaslian sertifikat.

  • Verifikasi bahwa sertifikat diterima dari Amazon SNS.

  • Saat memungkinkan, gunakan salah satu dari SDK AWS yang didukung untuk Amazon SNS untuk memvalidasi dan memverifikasi pesan.

  • Validasi bahwa pesan Amazon SNS diterima dari yang Anda inginkan. TopicArn

Amazon SNS mendukung dua versi tanda tangan pesan:

  • SignatureVersion1: Amazon SNS membuat tanda tangan berdasarkan hash SHA1 pesan.

  • SignatureVersion2: Amazon SNS membuat tanda tangan berdasarkan hash SHA256 pesan.

Untuk mengonfigurasi versi tanda tangan pesan pada topik Amazon SNS

Secara default, topik Amazon SNS menggunakan SignatureVersion 1. Untuk memilih algoritma hashing pada topik Amazon SNS Anda, SignatureVersion baik 1 (SHA1) SignatureVersion atau 2 (SHA256), Anda dapat menggunakan tindakan API. SetTopicAttributes

Contoh kode berikut menunjukkan cara mengatur atribut topik SignatureVersion menggunakanAWS CLI:

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \ --attribute-name SignatureVersion \ --attribute-value 2
Untuk memverifikasi tanda tangan pesan Amazon SNS saat menggunakan permintaan berbasis kueri HTTP
  1. Ekstraksi pasangan nama-nilai dari dokumen JSON dalam isi permintaan HTTP POST yang dikirim Amazon SNS ke titik akhir Anda. Anda akan menggunakan nilai-nilai dari beberapa pasangan nama-nilai untuk membuat string-to-sign. Saat Anda memverifikasi tanda tangan pesan Amazon SNS, sangat penting bahwa Anda mengonversi karakter kontrol yang di-escape ke representasi karakter aslinya dalam nilai Message dan Subject. Nilai-nilai ini harus dalam bentuk aslinya saat Anda menggunakannya sebagai bagian dari string-to-sign. Untuk informasi tentang cara mengurai dokumen JSON, lihat Langkah 1: Pastikan titik akhir Anda siap untuk memproses pesan Amazon SNS.

    Ini SignatureVersion memberi tahu Anda versi tanda tangan yang digunakan oleh Amazon SNS untuk menghasilkan tanda tangan pesan. Dari versi tanda tangan, Anda dapat menentukan persyaratan untuk cara menghasilkan tanda tangan. Untuk notifikasi, Amazon SNS saat ini mendukung versi tanda tangan 1 dan 2. Bagian ini menyediakan langkah-langkah untuk memverifikasi tanda tangan menggunakan versi tanda tangan ini.

  2. Dapatkan sertifikat X509 yang digunakan Amazon SNS untuk menandatangani pesan. Nilai SigningCertURL menunjuk ke lokasi sertifikat X509 yang digunakan untuk membuat tanda tangan digital untuk pesan. Ambil sertifikat dari lokasi ini.

  3. Ekstraksi kunci publik dari sertifikat. Kunci publik dari sertifikat yang ditentukan oleh SigningCertURL digunakan untuk memverifikasi keaslian dan integritas pesan.

  4. Tentukan jenis pesan. Format string-to-sign tergantung pada jenis pesan, yang ditentukan oleh nilai Type.

  5. Buat string-to-sign. String-to-sign adalah daftar pasangan nama-nilai tertentu yang dibatasi karakter baris baru dari pesan. Setiap pasangan nilai diwakili oleh nama terlebih dahulu diikuti dengan karakter baris baru, diikuti dengan nilai, dan diakhiri dengan karakter baris baru. Pasangan nama-nilai harus tercantum dalam urutan byte-sort.

    Tergantung pada jenis pesan, string-to-sign harus memiliki pasangan nama-nilai berikut.

    Pemberitahuan

    Pesan notifikasi harus berisi pasangan nama-nilai berikut:

    Message MessageId Subject (if included in the message) Timestamp TopicArn Type

    Contoh berikut adalah string-to-sign untuk Notification.

    Message My Test Message MessageId 4d4dc071-ddbf-465d-bba8-08f81c89da64 Subject My subject Timestamp 2019-01-31T04:37:04.321Z TopicArn arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P Type Notification
    SubscriptionConfirmation dan UnsubscribeConfirmation

    Pesan SubscriptionConfirmation dan UnsubscribeConfirmation harus berisi pasangan nama-nilai berikut:

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    Contoh berikut adalah string-to-sign untuk SubscriptionConfirmation.

    Message My Test Message MessageId 3d891288-136d-417f-bc05-901c108273ee SubscribeURL https://sns.us-east-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P&Token=233... Timestamp 2019-01-31T19:25:13.719Z Token 233... TopicArn arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P Type SubscriptionConfirmation
  6. Dekodekan nilai Signature dari format Base64. Pesan mengirimkan tanda tangan dalam nilai Signature, yang dienkodekan sebagai Base64. Sebelum Anda membandingkan nilai tanda tangan dengan tanda tangan yang telah Anda hitung, pastikan bahwa Anda mendekode nilai Signature dari Base64 sehingga Anda membandingkan nilai-nilai menggunakan format yang sama.

  7. Hasilkan nilai hash yang diturunkan dari pesan Amazon SNS. Kirim pesan Amazon SNS, dalam format kanonik, ke algoritma hash yang sama yang digunakan untuk menghasilkan tanda tangan.

    1. Jika 1, gunakan SHA1 sebagai algoritma hash. SignatureVersion

    2. Jika 2, gunakan SHA256 sebagai algoritma hash. SignatureVersion

  8. Hasilkan nilai hash yang dinyatakan dari pesan Amazon SNS. Nilai hash yang dinyatakan adalah hasil dari menggunakan nilai kunci publik (dari langkah 3) untuk mendekripsi tanda tangan yang dikirimkan dengan pesan Amazon SNS.

  9. Verifikasi keaslian dan integritas pesan Amazon SNS. Bandingkan nilai hash yang diturunkan (dari langkah 7) dengan nilai hash yang dinyatakan (dari langkah 8). Jika nilai-nilai tersebut identik, maka penerima diyakinkan bahwa pesan belum diubah saat dalam transit dan pesan pasti berasal dari Amazon SNS. Jika nilai-nilai tersebut tidak identik, pesan tidak boleh dipercaya oleh penerima.