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 HTTP titik akhir Anda oleh AmazonSNS, Anda dapat memverifikasi tanda tangan pesan. Ada dua kasus di mana kami merekomendasikan untuk memverifikasi keaslian pesan. Pertama, ketika Amazon SNS mengirim pesan ke HTTP titik akhir Anda bahwa Anda berlangganan topik. Kedua, ketika Amazon SNS mengirimi Anda pesan konfirmasi ke HTTP titik akhir Anda setelah eksekusi Subscribe atau Unsubscribe API tindakan.

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

  • Selalu gunakan HTTPS saat mendapatkan sertifikat dari AmazonSNS.

  • Validasi keaslian sertifikat.

  • Verifikasi sertifikat diterima dari AmazonSNS.

  • Jika memungkinkan, gunakan salah satu yang didukung Amazon AWS SDKs SNS untuk memvalidasi dan memverifikasi pesan.

  • Validasi bahwa SNS pesan Amazon diterima dari yang Anda inginkanTopicArn.

Amazon SNS mendukung dua versi tanda tangan pesan:

  • SignatureVersion1: Amazon SNS membuat tanda tangan berdasarkan SHA1hash pesan.

  • SignatureVersion2: Amazon SNS membuat tanda tangan berdasarkan SHA256hash pesan.

Untuk mengonfigurasi versi tanda tangan pesan pada SNS topik Amazon

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

Contoh kode berikut menunjukkan cara mengatur atribut topik SignatureVersion menggunakan AWS 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 SNS pesan Amazon saat menggunakan HTTP permintaan berbasis kueri
  1. Ekstrak pasangan nama-nilai dari JSON dokumen di badan HTTP POST permintaan yang SNS dikirimkan Amazon ke titik akhir Anda. Anda akan menggunakan nilai-nilai dari beberapa pasangan nama-nilai untuk membuat string-to-sign. Saat memverifikasi tanda tangan SNS pesan Amazon, penting bagi Anda untuk mengonversi karakter kontrol yang diloloskan ke representasi karakter aslinya dalam nilai Message danSubject. Nilai-nilai ini harus dalam bentuk aslinya saat Anda menggunakannya sebagai bagian dari string-to-sign. Untuk informasi tentang cara mengurai JSON dokumen, lihatLangkah 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 SNS digunakan Amazon 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

    Untuk memverifikasi tanda tangan SubscriptionConfirmation dan UnsubscribeConfirmation pesan, string yang akan ditandatangani harus menyertakan pasangan nama-nilai berikut:

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    Contoh berikut adalah string untuk menandatangani SubscriptionConfirmation pesan:

    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
    catatan

    SubscribeURLBidang ini digunakan dalam string untuk menandatangani keduanya SubscriptionConfirmation dan UnsubscribeConfirmation pesan. Ini URL diperlukan untuk mengonfirmasi atau mengelola langganan.

  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 turunan dari SNS pesan Amazon. Kirim SNS pesan Amazon, dalam format kanonik, ke algoritma hash yang sama yang digunakan untuk menghasilkan tanda tangan.

    1. Jika 1, gunakan SHA1sebagai algoritma hash. SignatureVersion

    2. Jika 2, gunakan SHA256sebagai algoritma hash. SignatureVersion

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

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