كيفية إنشاء مفاتيح ترخيص البرامج والتحقق منها
تعرف على كيفية إنشاء مفاتيح ترخيص البرامج والتحقق منها باستخدام Crypto API. يمكن تفعيل المفاتيح دون الاتصال بالإنترنت ولا تتطلب قاعدة بيانات.
أنت تدير شركة برمجيات صغيرة تبيع التنزيلات الرقمية – التطبيقات أو المكونات الإضافية أو حتى القوالب. عندما يكمل المشتري عملية الشراء، يتعين عليك تزويده بمفتاح ترخيص يمكنه استخدامه لتنشيط البرنامج والتحقق من صحته.
وإليك كيفية تنفيذ نظام الترخيص هذا في برنامجك:
- قم بإنشاء زوج مفاتيح عام وخاص باستخدام خوارزمية RSA.
- قم بتوقيع رسالة بالمفتاح الخاص. تحتوي الرسالة على عنوان البريد الإلكتروني للمشتري وSKU للبرنامج.
- الرسالة الموقعة هي مفتاح الترخيص الذي يتم إرساله مرة أخرى إلى عنوان البريد الإلكتروني للمشتري.
- عندما يقوم المشتري بتنشيط البرنامج، يتم التحقق من مفتاح الترخيص باستخدام المفتاح العام.
المزايا
الميزة هنا هي أنه يمكن تضمين المفتاح العام في الكود المصدري للبرنامج، وليست هناك حاجة لاستخدام قاعدة بيانات، ويمكن للمشتري التحقق من مفتاح الترخيص دون الاتصال بالإنترنت دون الحاجة إلى الاتصال بالخادم الخاص بك.
لنستعرض الآن خطوات التنفيذ بالتفصيل.
1. إنشاء زوج المفاتيح العامة والخاصة
سنقوم بإنشاء زوج مفاتيح عام وخاص باستخدام خوارزمية RSA. قم بتشغيل الجهاز وقم بتشغيل الأمر opensl التالي.
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private_key.pem
سيقوم بإنشاء مفتاح RSA خاص بطول 2048 بت وحفظه في ملف يسمى private_key.pem
في المجلد الحالي. بعد ذلك، سنكتب أمرًا لإنشاء مفتاح عام من المفتاح الخاص.
openssl rsa -pubout -in private_key.pem -out public_key.pem
الآن بعد أن حصلنا على مفاتيحنا، فلنطبعها على وحدة التحكم لأننا سنحتاج إليها في الخطوة التالية.
openssl pkey -in private_key.pem && openssl pkey -pubin -in public_key.pem
2. إنشاء مفتاح الترخيص
سنقوم بكتابة نص Node.js بسيط لإنشاء مفتاح ترخيص. يستخدم crypto
وحدة لتوقيع الرسالة بالمفتاح الخاص و fs
وحدة لقراءة المفتاح الخاص من نظام الملفات.
const crypto = require('crypto');
const fs = require('fs');
const privateKey = fs.readFileSync('private_key.pem', 'utf8');
const buyerEmailAddress = 'amit@labnol.org';
const data = Buffer.from(buyerEmailAddress);
const signature = crypto.sign('sha256', data, {
key: privateKey,
padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
});
const licenseKey = signature.toString('base64');
console.log(licenseKey);
3. التحقق من مفتاح الترخيص
يتم إرسال مفتاح الترخيص الذي تم إنشاؤه في الخطوة السابقة إلى عنوان البريد الإلكتروني للمشتري ونحتاج إلى التحقق منه عندما يقوم المشتري بتنشيط البرنامج.
هذا مرة أخرى هو برنامج نصي Node.js بسيط يستخدم ملحق crypto
وحدة للتحقق من مفتاح الترخيص بالمفتاح العام.
const crypto = require('crypto');
const fs = require('fs');
const buyerEmailAddress = '<<buyer email address>>';
const licenseKey = '<<license key>>';
const publicKey = fs.readFileSync('public_key.pem', 'utf8');
const signatureBuffer = Buffer.from(licenseKey, 'base64');
const licenseStatus = crypto.verify(
'sha256',
Buffer.from(buyerEmailAddress),
{
key: Buffer.from(publicKey),
padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
},
signatureBuffer
);
console.log(licenseStatus ? 'Activated' : 'Invalid license key');
تنشيط الترخيص في Google Apps Script
إذا كنت تخطط لتضمين التنشيط داخل إضافات Google Workspace، فيمكنك إنشاء Google Cloud Function أو خدمة Google Cloud Run للتعامل مع تنشيط الترخيص.
يمكن لكود البرنامج النصي للتطبيقات الخاص بك تقديم طلب UrlFetch POST إلى خدمة الويب باستخدام مفتاح الترخيص واستعادة حالة التنشيط. في مثل هذه الحالة، لا يلزم تضمين المفتاح العام في البرنامج النصي. كما يمكن استرداد عنوان البريد الإلكتروني للمستخدم بسهولة باستخدام Session.getActiveUser().getEmail()
طريقة.
القيود
من الواضح أن هذا تطبيق أساسي لنظام ترخيص البرامج الذي لا يتعامل مع جميع حالات الحافة. يمكن أن تكون نقطة بداية ولكن هناك العديد من الأشياء الأخرى التي يجب مراعاتها مثل:
- كيفية تحديد تواريخ انتهاء الصلاحية لمفاتيح الترخيص.
- كيفية إلغاء مفتاح الترخيص.
- كيفية منع مشاركة المفاتيح بين المستخدمين.
اكتشاف المزيد من مرابع التكنولوجيا
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.