Langsung ke konten utama

Otorisasi Tanda Tangan

smilepayz teamsSekitar 2 menit

Ikhtisar Tanda Tangan Digital

Autentikasi tanda tangan digital adalah mekanisme keamanan kritis untuk semua transaksi API, termasuk operasi Pay-In, Pay-Out, dan Inquiry (inquiry status dan inquiry balance). Proses ini memastikan integritas request, keaslian, dan non-repudiation melalui verifikasi kriptografis.

Proses Generasi Tanda Tangan

Langkah 1: Siapkan Data Tanda Tangan

Kumpulkan komponen berikut untuk generasi tanda tangan:

  • X-TIMESTAMP: Timestamp format ISO 8601
  • Merchant Secret: Merchant secret key yang ditugaskan
  • Request Body: Payload JSON (akan diminifikasi)
  • Merchant Private Key: Private key RSA Anda untuk menandatangani

Parameter Tanda Tangan

Langkah 2: Minifikasi Request Body

Hapus semua whitespace dan formatting yang tidak perlu dari request body JSON untuk memastikan generasi tanda tangan yang konsisten.

Sebelum Minifikasi:

{
    "additionalParam": {},
    "area": 10,
    "callbackUrl": "https://docs.smilepayz.com/en/",
    "merchant": {
        "merchantId": "20019"
    },
    "money": {
        "amount": 10000,
        "currency": "IDR"
    },
    "orderNo": "20019c5b63c4b-e34a-4855-9b20-d4b",
    "paymentMethod": "QRIS",
    "purpose": "Purpose For Transaction from Java SDK"
}

Setelah Minifikasi:

{"paymentMethod":"QRIS","orderNo":"20019c5b63c4b-e34a-4855-9b20-d4b","purpose":"Purpose For Transaction from Java SDK","additionalParam":{},"money":{"currency":"IDR","amount":10000},"merchant":{"merchantId":"20019"},"callbackUrl":"https://docs.smilepayz.com/en/","area":10}

Langkah 3: Buat String untuk Ditandatangani

Buat string tanda tangan dengan menggabungkan komponen dengan pemisah pipe:

X-TIMESTAMP + "|" + merchant_secret + "|" + minify(requestBody)

Contoh String untuk Ditandatangani:

2024-12-30T18:30:36Z|95b57c46b8c2e068982be23fb669a80612cad68e6ce6ba4f5af9ec20d23bb274|{"paymentMethod":"QRIS","orderNo":"20019c5b63c4b-e34a-4855-9b20-d4b","purpose":"Purpose For Transaction from Java SDK","additionalParam":{},"money":{"currency":"IDR","amount":10000},"merchant":{"merchantId":"20019"},"callbackUrl":"https://docs.smilepayz.com/en/","area":10}

Langkah 4: Generate Tanda Tangan Digital

Terapkan enkripsi SHA256withRSA ke string tanda tangan menggunakan private key RSA Anda.

Formula Kriptografis:

SHA256withRSA(stringToSign, merchantPrivateKey)

Contoh Private Key RSA:

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1d8Zaurk/A0WB1X7CrW+SqsVM4v2ZMGTdqWEQOAKQyY/DZEmgSm7whUMLYfqeKxzzAd3lZHvviyO/V/Ht2i8axtiA5tyDa485IgBy+jO9UHxzI+9CRxnIY5jjDAqAgEvRa0HZEfYHLGlH3IQ4A2a7g8Wm3yqn2prIrgY21nO4+33GuBR0qCpGxth0kV7/RSdhWv3Ff1zkb7yUYn9zfuag9stLf1nw+Ui7hjXL+xGiNRYsDCHOLzKynZxk1cBfqyPY5YMTIjQik4cI+YfM4BMN8bmTB1y3z9sdfbHVTI/PD/fbDzvfK7S/XJvY2bj1TwNeYCHcd5Dx6MYiO12rfA5XAgMBAAECggEASRpMJMat042c1ZXM793wYXQ78SJMKQcOyyDtwhveJLeeG4duBY2WrXvxq0c4L7mMevSYkE1vg+tYZj+mbTwE19Oc6iiWUrbkxo5FAgx7BVvEFpo2S0vbPhepQmXaYTPN1zpPF4QdyXwBmXpjJTFxlD6cRAII6/+rdQZt6G9xxOWUq6bbENNUc6y+N+97oPPwrzLZGYADfusM735Mlx3j8xTGLSHTh2d8e5epwKcSW+ZvBbiM30ZeO+M5bh6zgZrHpPQNJAOsEDuVk5vjuC5O+i81YwP702GAE50zI9Ysr4QMS3QQGe2jwpJAmMjvO6/MRv/6De83NJ6Y70+00OONcQKBgQDtP+sQOyKRErCN9ePmu6FBfzMZcTC5vXQpA0kW7vUMKyQR537appYcOb5DPJDgUqqyNcr8vIqadR6OW0thkfRyb+L/elOyS/XnVbFc6RA9DW/KV4xm68LUX9oRqfgy5YOESEEA2igEh8IdqfkIRCZ3g7xrQUmb3gq0BM2/hnxyHwKBgQDDz0Slbw2Pv820CSheZi8HQf3sEFe0JDHKo2KAHX9rTvFEF3xsT+UZh6pcHUcesYlVlJM2Ciejq4dmiOnvGIKtkqtcLfioVbPrDP2HlDtIT3mSC7sL6VdWLxYz/l0EVjsR2KMVwXD42jcjz3e5bDIi98Z8G4Bx6cu6pwlBtfMMyQKBgHJhWoacu/GNPSlz3sgitX/KP2yIsaEawaH0P4ya7/FJ6z3mibYIkl5RSHVKAd7ke/8nCBIJJBmLVYv0X8dOgreZUasx4qAXFxrMqZHNm1KT4819n+cOywNwosXZWBvRozJnU0+B3cExYljC1ZkyogkErhZXh5Fp32ci2b74q46pAoGANWyixSRkpdjmLf3lpsPohulpd3QKCdtqPmiPonbp4gRa7YIe74po7qtGPvW6BtTXrKLp+2+P2yccvUwTz6l3VhZTbMYaNwuTGEmmDszR0+vjNoa+1QQoURpty2fWRy2j1j2uWWw6/5rCOqILf2rWzxWdcRUr2Wi5rkaOzv/uvYkCgYEAlFV6huNhi1NIIg5gkTS0kmxnIUWu8XIT9IgZWMrhR7TvImVISoormE9LdISgMBz+J5YJxhAZbxVxlUJrsl+HVcS81gmUkeoIpTA+iKUzbD9gAPjEdqVylzN8A9uNIkkb5Cf4BWYfEyMaLfBuiHDlKDcBjz4cJbcom3RVGacghKc=

Contoh Tanda Tangan yang Dihasilkan:

RvWeMDztovywfyarzFEUUDUo6F5f0weT+X2FTfjJ/KVxyDJJ4PHddsqHx0h98/ZOofCaADx8MaoG1rTaHd+5BkJPPlwrwG62oZygjNOV2gJ0rstTBWZOQgORkTjvBj91KQgzWRpT6yLJaeRaJRS2YfRPGA5MH7ieGWkocPXNRw+v0HolPMren+y69sZmVVXeRs9SXV9QpCZP8zNHPEQt75zgVKSr5/GmkfTCgFPNz/+23MpVMigwpOcifxEDwN+KzfdnQxjYi6n01qztb1skXOTlIRrhDkJSRhOzrDHQEwnp/6XEjyZaOV/XXSJtMsr85Yl97cF0daW1ALkuF7NHew==

Langkah 5: Sertakan Tanda Tangan di HTTP Header

Tambahkan tanda tangan yang dihasilkan ke header HTTP request:

X-SIGNATURE: RvWeMDztovywfyarzFEUUDUo6F5f0weT+X2FTfjJ/KVxyDJJ4PHddsqHx0h98/ZOofCaADx8MaoG1rTaHd+5BkJPPlwrwG62oZygjNOV2gJ0rstTBWZOQgORkTjvBj91KQgzWRpT6yLJaeRaJRS2YfRPGA5MH7ieGWkocPXNRw+v0HolPMren+y69sZmVVXeRs9SXV9QpCZP8zNHPEQt75zgVKSr5/GmkfTCgFPNz/+23MpVMigwpOcifxEDwN+KzfdnQxjYi6n01qztb1skXOTlIRrhDkJSRhOzrDHQEwnp/6XEjyZaOV/XXSJtMsr85Yl97cF0daW1ALkuF7NHew==

Verifikasi Tanda Tangan

Public Key RSA untuk Verifikasi

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXfGWrq5PwNFgdV+wq1vkqrFTOL9mTBk3alhEDgCkMmPw2RJoEpu8IVDC2H6nisc8wHd5WR774sjv1fx7dovGsbYgObcg2uPOSIAcvozvVB8cyPvQkcZyGOY4wwKgIBL0WtB2RH2ByxpR9yEOANmu4PFpt8qp9qayK4GNtZzuPt9xrgUdKgqRsbYdJFe/0UnYVr9xX9c5G+8lGJ/c37moPbLS39Z8PlIu4Y1y/sRojUWLAwhzi8ysp2cZNXAX6sj2OWDEyI0IpOHCPmHzOATDfG5kwdct8/bHX2x1UyPzw/32w873yu0v1yb2Nm49U8DXmAh3HeQ8ejGIjtdq3wOVwIDAQAB

Tools Pengembangan

Tools Minifikasi JSON

ToolURLPenggunaan
JSON Formatterhttps://jsonformatter.org/json-minifyopen in new windowPilih opsi "Minify JSON"

Praktik Terbaik Keamanan

Manajemen Kunci

  • Penyimpanan Aman: Simpan private key di penyimpanan yang aman dan terenkripsi
  • Rotasi Kunci: Rotasi pasangan kunci RSA secara berkala
  • Kontrol Akses: Batasi akses ke private key hanya untuk personel yang berwenang
  • Backup: Pertahankan backup aman dari private key

Panduan Implementasi

  • Akurasi Timestamp: Pastikan X-TIMESTAMP dalam ±5 menit dari waktu server
  • Integritas Request: Jangan pernah modifikasi request body setelah generasi tanda tangan
  • Penanganan Error: Implementasikan penanganan error yang tepat untuk kegagalan validasi tanda tangan
  • Logging: Log upaya generasi tanda tangan untuk tujuan audit

Masalah Umum dan Solusi

  • Ketidakcocokan Tanda Tangan: Verifikasi semua komponen dalam urutan dan format yang benar
  • Masalah Timestamp: Pastikan jam sistem disinkronkan dengan server NTP
  • Format Kunci: Verifikasi format dan encoding kunci RSA
  • Masalah Encoding: Pastikan encoding UTF-8 yang tepat untuk semua komponen string

Kepatuhan dan Standar

Standar Kriptografis

  • Algoritma: SHA256withRSA (hash SHA-256 dengan tanda tangan RSA)
  • Ukuran Kunci: Minimum 2048-bit RSA keys direkomendasikan
  • Encoding: Base64 encoding untuk output tanda tangan
  • Format: Format PKCS#8 untuk private key

Persyaratan Audit

  • Log Tanda Tangan: Pertahankan log semua generasi dan verifikasi tanda tangan
  • Penggunaan Kunci: Lacak penggunaan kunci dan jadwal rotasi
  • Log Akses: Pantau akses ke materi kriptografis
  • Laporan Kepatuhan: Generate laporan kepatuhan untuk persyaratan regulasi
Terakhir diperbarui: