การยืนยันตัวตนด้วยลายเซ็นดิจิทัล
Less than 1 minute
ภาพรวมลายเซ็นดิจิทัล
การยืนยันตัวตนด้วยลายเซ็นดิจิทัลเป็นกลไกความปลอดภัยที่สำคัญสำหรับธุรกรรม API ทั้งหมด รวมถึงการดำเนินการ Pay-In, Pay-Out และการสอบถาม (การสอบถามสถานะและการสอบถามยอดเงิน) กระบวนการนี้รับประกันความสมบูรณ์ของคำขอ ความถูกต้อง และการไม่ปฏิเสธผ่านการตรวจสอบด้วยการเข้ารหัส
กระบวนการสร้างลายเซ็น
ขั้นตอนที่ 1: เตรียมข้อมูลลายเซ็น
รวบรวมองค์ประกอบต่อไปนี้สำหรับการสร้างลายเซ็น:
- X-TIMESTAMP: ไทม์สแตมป์ในรูปแบบ ISO 8601
- Merchant Secret: รหัสลับพ่อค้าที่ได้รับมอบหมาย
- Request Body: JSON payload (จะถูกทำให้กระชับ)
- Merchant Private Key: RSA private key ของคุณสำหรับการเซ็น
ขั้นตอนที่ 2: ทำให้ Request Body กระชับ
ลบช่องว่างและการจัดรูปแบบที่ไม่จำเป็นทั้งหมดออกจาก JSON request body เพื่อให้แน่ใจว่าการสร้างลายเซ็นมีความสม่ำเสมอ
ก่อนการทำให้กระชับ:
{
"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"
}
หลังการทำให้กระชับ:
{"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}
ขั้นตอนที่ 3: สร้างสตริงสำหรับการเซ็น
สร้างสตริงลายเซ็นโดยการเชื่อมต่อองค์ประกอบด้วยตัวคั่น pipe:
X-TIMESTAMP + "|" + merchant_secret + "|" + minify(requestBody)
ตัวอย่างสตริงสำหรับการเซ็น:
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}
ขั้นตอนที่ 4: สร้างลายเซ็นดิจิทัล
ใช้การเข้ารหัส SHA256withRSA กับสตริงลายเซ็นโดยใช้ RSA private key ของคุณ
สูตรการเข้ารหัส:
SHA256withRSA(stringToSign, merchantPrivateKey)
ตัวอย่าง RSA Private Key:
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=
ตัวอย่างลายเซ็นที่สร้างขึ้น:
RvWeMDztovywfyarzFEUUDUo6F5f0weT+X2FTfjJ/KVxyDJJ4PHddsqHx0h98/ZOofCaADx8MaoG1rTaHd+5BkJPPlwrwG62oZygjNOV2gJ0rstTBWZOQgORkTjvBj91KQgzWRpT6yLJaeRaJRS2YfRPGA5MH7ieGWkocPXNRw+v0HolPMren+y69sZmVVXeRs9SXV9QpCZP8zNHPEQt75zgVKSr5/GmkfTCgFPNz/+23MpVMigwpOcifxEDwN+KzfdnQxjYi6n01qztb1skXOTlIRrhDkJSRhOzrDHQEwnp/6XEjyZaOV/XXSJtMsr85Yl97cF0daW1ALkuF7NHew==
ขั้นตอนที่ 5: รวมลายเซ็นใน HTTP Header
เพิ่มลายเซ็นที่สร้างขึ้นใน HTTP request header:
X-SIGNATURE: RvWeMDztovywfyarzFEUUDUo6F5f0weT+X2FTfjJ/KVxyDJJ4PHddsqHx0h98/ZOofCaADx8MaoG1rTaHd+5BkJPPlwrwG62oZygjNOV2gJ0rstTBWZOQgORkTjvBj91KQgzWRpT6yLJaeRaJRS2YfRPGA5MH7ieGWkocPXNRw+v0HolPMren+y69sZmVVXeRs9SXV9QpCZP8zNHPEQt75zgVKSr5/GmkfTCgFPNz/+23MpVMigwpOcifxEDwN+KzfdnQxjYi6n01qztb1skXOTlIRrhDkJSRhOzrDHQEwnp/6XEjyZaOV/XXSJtMsr85Yl97cF0daW1ALkuF7NHew==
การตรวจสอบลายเซ็น
RSA Public Key สำหรับการตรวจสอบ
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXfGWrq5PwNFgdV+wq1vkqrFTOL9mTBk3alhEDgCkMmPw2RJoEpu8IVDC2H6nisc8wHd5WR774sjv1fx7dovGsbYgObcg2uPOSIAcvozvVB8cyPvQkcZyGOY4wwKgIBL0WtB2RH2ByxpR9yEOANmu4PFpt8qp9qayK4GNtZzuPt9xrgUdKgqRsbYdJFe/0UnYVr9xX9c5G+8lGJ/c37moPbLS39Z8PlIu4Y1y/sRojUWLAwhzi8ysp2cZNXAX6sj2OWDEyI0IpOHCPmHzOATDfG5kwdct8/bHX2x1UyPzw/32w873yu0v1yb2Nm49U8DXmAh3HeQ8ejGIjtdq3wOVwIDAQAB
เครื่องมือสำหรับการพัฒนา
เครื่องมือทำให้ JSON กระชับ
เครื่องมือ | URL | การใช้งาน |
---|---|---|
JSON Formatter | https://jsonformatter.org/json-minify | เลือกตัวเลือก "Minify JSON" |
แนวทางปฏิบัติที่ดีที่สุดสำหรับความปลอดภัย
การจัดการคีย์
- การจัดเก็บที่ปลอดภัย: เก็บ private keys ในที่จัดเก็บที่ปลอดภัยและเข้ารหัส
- การหมุนเวียนคีย์: หมุนเวียน RSA key pairs อย่างสม่ำเสมอ
- การควบคุมการเข้าถึง: จำกัดการเข้าถึง private keys เฉพาะบุคลากรที่ได้รับอนุญาตเท่านั้น
- การสำรองข้อมูล: รักษาการสำรองข้อมูลที่ปลอดภัยของ private keys
แนวทางการใช้งาน
- ความแม่นยำของไทม์สแตมป์: ตรวจสอบให้แน่ใจว่า X-TIMESTAMP อยู่ในช่วง ±5 นาทีของเวลาเซิร์ฟเวอร์
- ความสมบูรณ์ของคำขอ: อย่าแก้ไข request body หลังจากการสร้างลายเซ็น
- การจัดการข้อผิดพลาด: ใช้การจัดการข้อผิดพลาดที่เหมาะสมสำหรับการตรวจสอบลายเซ็นที่ล้มเหลว
- การบันทึก: บันทึกการพยายามสร้างลายเซ็นเพื่อวัตถุประสงค์การตรวจสอบ
ปัญหาที่พบบ่อยและวิธีแก้ไข
- ลายเซ็นไม่ตรงกัน: ตรวจสอบว่าองค์ประกอบทั้งหมดอยู่ในลำดับและรูปแบบที่ถูกต้อง
- ปัญหาของไทม์สแตมป์: ตรวจสอบให้แน่ใจว่านาฬิกาของระบบซิงค์กับเซิร์ฟเวอร์ NTP
- รูปแบบของคีย์: ตรวจสอบรูปแบบและ encoding ของ RSA key
- ปัญหาของการเข้ารหัส: ตรวจสอบให้แน่ใจว่ามีการเข้ารหัส UTF-8 ที่เหมาะสมสำหรับองค์ประกอบสตริงทั้งหมด
การปฏิบัติตามและมาตรฐาน
มาตรฐานการเข้ารหัส
- อัลกอริทึม: SHA256withRSA (SHA-256 hash กับ RSA signature)
- ขนาดของคีย์: แนะนำ RSA keys ขั้นต่ำ 2048-bit
- การเข้ารหัส: Base64 encoding สำหรับผลลัพธ์ลายเซ็น
- รูปแบบ: PKCS#8 format สำหรับ private keys
ข้อกำหนดการตรวจสอบ
- บันทึกลายเซ็น: รักษาบันทึกของการสร้างและตรวจสอบลายเซ็นทั้งหมด
- การใช้งานคีย์: ติดตามการใช้งานคีย์และตารางการหมุนเวียน
- บันทึกการเข้าถึง: ตรวจสอบการเข้าถึงวัสดุการเข้ารหัส
- รายงานการปฏิบัติตาม: สร้างรายงานการปฏิบัติตามสำหรับข้อกำหนดทางกฎระเบียบ