كل ما تحتاج معرفته عن الشهادات الرقمية

شرح شامل ومبسط لمفهوم الشهادات الرقمية واستخداماتها وأمانها

ما هي الشهادة الرقمية (Digital Certificate)؟

هي بطاقة تعريف إلكترونية تُثبت هوية الشخص أو الجهة التي توقع الملفات أو ترسل رسائل مشفرة.

تشبه جواز السفر ، لكنها رقمية. تحتوي على:

العنصر الوصف
الاسم اسم الشخص أو الشركة
البريد الإلكتروني المرتبط بالتوقيع
المفتاح العام (Public Key) يُستخدم للتحقق من التوقيع أو لتشفير الرسائل
جهة موثوقة (CA) تصدر الشهادة وتُؤكد أن صاحبها حقيقي
تاريخ صلاحية متى تبدأ وتنتهي الشهادة

ما فائدة الشهادة الرقمية؟

أين تُستخدم الشهادات الرقمية؟

توقيع ملفات PDF (عقود، تقارير، فواتير)
توقيع رسائل البريد الإلكتروني (S/MIME)
توقيع البرامج والتطبيقات (Code Signing)
تأمين المواقع الإلكترونية (HTTPS/SSL/TLS)

هل أحتاج شهادة رقمية لتوقيع ملف؟

لديك خياران رئيسيان:

شهادة من شركة موثوقة (CA)

  • تستخدمها الشركات والمؤسسات الرسمية.
  • تظهر تلقائيًا كموثوقة في الأنظمة.
  • غالبًا تكون مدفوعة (باستثناء Let's Encrypt للمواقع).

شهادة ذاتية التوقيع (Self-signed)

  • تنشئها بنفسك باستخدام أدوات مثل OpenSSL أو GPG.
  • مجانية وسهلة الإنشاء.
  • تتطلب من الطرف الآخر الوثوق بها يدويًا.

مثال عملي: التوقيع في Adobe Acrobat

عندما تفتح ملف PDF موقّع:

1. شهادة من جهة موثوقة (CA):

2. شهادة ذاتية التوقيع (Self-Signed):

كيف تُنشئ شهادة رقمية؟

1. إنشاء شهادة رقمية ذاتية التوقيع (Self-signed)

مفيدة للتجارب الشخصية أو بين أطراف تثق ببعضها مسبقًا.

باستخدام OpenSSL:

# الخطوة 1: توليد مفتاح خاص (احفظه بأمان!)
openssl genrsa -out mykey.pem 2048

# الخطوة 2: توليد شهادة رقمية باستخدام المفتاح الخاص
# سيطلب منك إدخال بيانات مثل الدولة، الاسم، البريد الإلكتروني
openssl req -new -x509 -key mykey.pem -out mycert.pem -days 3650 # صالحة لـ 10 سنوات

الناتج:

  • mykey.pem: المفتاح الخاص (سري جدًا )
  • mycert.pem: الشهادة الرقمية (يمكن نشرها )

2. طلب شهادة رقمية من جهة موثوقة (CA)

للشركات والمواقع العامة التي تحتاج ثقة تلقائية من المتصفحات والأنظمة.

أشهر الجهات المصدرة:

DigiCert GlobalSign Sectigo Let's Encrypt (للمواقع)

الخطوات العامة:

  1. تُنشئ طلب توقيع شهادة (CSR) باستخدام مفتاحك الخاص (سنشرحه لاحقًا).
  2. ترسله للجهة المصدرة (CA) عبر موقعها.
  3. تتحقق الجهة من هويتك أو ملكيتك للنطاق (Domain Validation).
  4. ترسل لك الجهة الشهادة الموقعة (مثل certificate.crt).

كيف نضمن أن الشهادة أصلية ولم يتم العبث بها؟

في حالة الشهادات من CA (موثوقة):

  • يتم توقيع شهادتك من قبل سلطة موثوقة (CA) باستخدام مفتاحها الخاص السري.
  • برامج مثل المتصفحات وAdobe لديها قائمة بالـ CAs الموثوقة ومفاتيحها العامة للتحقق.
  • يتم التحقق أوتوماتيكيًا من سلسلة الثقة (Chain of Trust) وصولًا إلى CA الجذرية الموثوقة.
  • إذا تم تعديل أي جزء في الشهادة، سيفشل التحقق من توقيع الـ CA .

في حالة الشهادات الذاتية (غير موثوقة افتراضيًا):

  • لا يوجد CA خارجي للتحقق من صحتها.
  • الشخص الذي يستلم الشهادة يجب أن يتحقق من صحتها بنفسه قبل الوثوق بها.
  • الطريقة الشائعة هي مقارنة بصمة الشهادة (Fingerprint).

التحقق باستخدام بصمة الشهادة (Fingerprint):

كل شهادة لها بصمة فريدة (ناتج Hash مثل SHA-256). يمكنك حسابها باستخدام:

openssl x509 -in mycert.pem -noout -fingerprint -sha256

ترسل هذه البصمة (النص الطويل الناتج) للطرف الآخر عبر قناة آمنة (مكالمة، رسالة موثوقة). الطرف الآخر يحسب البصمة للشهادة التي استلمها ويقارنها. إذا تطابقت = الشهادة أصلية.

الملفات الأساسية ودورها

عند التعامل مع الشهادات، ستواجه غالبًا هذه الأنواع من الملفات:

الملف الوصف الاستخدام الأساسي
المفتاح الخاص (Private Key) ملف سري جدًا، يجب أن يبقى بحوزتك فقط. لتوقيع الملفات أو فك تشفير البيانات المرسلة لك.
الشهادة الرقمية (Certificate) تحتوي بياناتك + مفتاحك العام + توقيع CA (إن وجدت). لإثبات هويتك للطرف الآخر وتمكينه من التحقق.
المفتاح العام (Public Key) يمكن نشره بأمان، وهو جزء من الشهادة. للتحقق من توقيعك أو تشفير بيانات لك.

سيناريو التوقيع والتحقق (مثال OpenSSL)

1. أنت المرسل (التوقيع)

تستخدم مفتاحك الخاص لتوقيع الملف:

# توقيع ملف document.pdf باستخدام mykey.pem
openssl dgst -sha256 -sign mykey.pem -out document.sig document.pdf

ترسل للطرف الآخر:

  • document.pdf (الأصلي)
  • document.sig (التوقيع)
  • mycert.pem (شهادتك)

2. الطرف الآخر (التحقق)

يستخدم شهادتك (التي تحتوي على مفتاحك العام) للتحقق:

# استخراج المفتاح العام من الشهادة والتحقق من التوقيع
openssl dgst -sha256 \
 -verify <(openssl x509 -in mycert.pem -pubkey -noout) \
 -signature document.sig \
 document.pdf

النتيجة:

  • "Verified OK" (إذا كان التوقيع صحيحًا ولم يتغير الملف)
  • "Verification Failure" (إذا كان التوقيع غير صحيح أو تم تعديل الملف)

مكونات الشهادة الرقمية ووظائفها

لماذا تحتوي الشهادة على كل هذه الأجزاء؟ كل جزء له دور حيوي في بناء الثقة:

1. بيانات الهوية (Subject)

الهدف: تحديد هوية صاحب الشهادة (من أنت؟).

تشمل: الاسم الشائع (CN)، المؤسسة (O)، الدولة (C)، البريد الإلكتروني، إلخ.

مثال: CN=ahmad.example.com, O=Robotics Lab, C=JO

2. المفتاح العام (Public Key)

الهدف: تمكين الآخرين من التحقق من توقيعك أو تشفير بيانات لك.

هو المفتاح المقابل لمفتاحك الخاص السري.

3. توقيع الجهة المصدِرة (CA Signature)

الهدف: ضمان أن الشهادة لم يتم تزويرها وأن المعلومات فيها صحيحة ومُحققة.

الـ CA توقع بيانات الشهادة + مفتاحك العام باستخدام مفتاحها الخاص. الأنظمة تثق بالـ CA وتستخدم مفتاحها العام للتحقق من هذا التوقيع.

(في الشهادات الذاتية، أنت من يوقع، لذا لا يوجد هذا الضمان الخارجي).

خلاصة وظائف المكونات

المكون الوظيفة الأساسية
بيانات الهويةتحديد صاحب الشهادة
المفتاح العامأداة التحقق والتشفير
توقيع الجهة المصدِرة (CA)ضمان الأصالة والثقة

فهم امتدادات الملفات الشائعة

قد تبدو الامتدادات مربكة، لكنها غالبًا ما تشير إلى تنسيق الملف أو محتواه:

امتدادات المفتاح الخاص

.pemتنسيق نصي (Base64)، الأكثر شيوعًا، قد يحتوي مفتاحًا أو شهادة.
.keyعادة ما يكون مفتاحًا خاصًا بتنسيق PEM.
.p12 / .pfxتنسيق ثنائي (PKCS#12)، يجمع المفتاح الخاص والشهادة معًا، محمي بكلمة مرور.

هذه الملفات سرية للغاية!

امتدادات الشهادة الرقمية

.pemشهادة بتنسيق نصي (Base64).
.crt / .cerعادة ما تكون شهادة بتنسيق PEM أو DER.
.derشهادة بتنسيق ثنائي (Binary).
.p7b / .p7cتنسيق PKCS#7، يحتوي عادة على الشهادة وسلسلة الثقة (بدون المفتاح الخاص).

امتدادات المفتاح العام

.pemمفتاح عام بتنسيق نصي (Base64).
.pubشائع في SSH و GPG، مفتاح عام فقط.
(مستخرج)يمكن استخراجه من الشهادة أو المفتاح الخاص.

امتدادات التوقيع الرقمي

.sigملف توقيع منفصل، عادة ثنائي.
.ascتوقيع منفصل بتنسيق نصي (ASCII)، شائع في GPG.
.p7sتوقيع بتنسيق PKCS#7، غالبًا ما يكون مرفقًا بالبريد الإلكتروني (S/MIME).

امتداد طلب توقيع الشهادة

.csrملف طلب توقيع الشهادة، يحتوي معلوماتك ومفتاحك العام، ترسله للـ CA.

تلميحات سريعة للتذكر

إذا رأيت... فهو غالبًا...
.key, .p12, .pfx, أو .pem مع "PRIVATE KEY"مفتاح خاص (سري!)
.crt, .cer, أو .pem مع "CERTIFICATE"شهادة رقمية
.pub, أو .pem مع "PUBLIC KEY"مفتاح عام
.sig, .asc, .p7sملف توقيع رقمي
.csrطلب توقيع شهادة

التمييز بين ملفات .pem المختلفة

امتداد .pem شائع جدًا! كيف تعرف ما بداخله؟

الطريقة الأضمن: قراءة السطر الأول

افتح الملف بأي محرر نصوص. السطر الأول يخبرك بالمحتوى:

-----BEGIN PRIVATE KEY-----      # مفتاح خاص (غير مشفر، PKCS#8)
-----BEGIN RSA PRIVATE KEY-----   # مفتاح خاص (غير مشفر، PKCS#1/RSA)
-----BEGIN ENCRYPTED PRIVATE KEY----- # مفتاح خاص (مشفر بكلمة مرور)
-----BEGIN PUBLIC KEY-----       # مفتاح عام
-----BEGIN CERTIFICATE-----      # شهادة رقمية (X.509)

الطريقة الآلية: استخدام OpenSSL

يمكنك استخدام أوامر OpenSSL لفحص الملف:

للتحقق إذا كان شهادة:

openssl x509 -in file.pem -noout -text

(إذا نجح الأمر، فهو شهادة)

للتحقق إذا كان مفتاح خاص (RSA كمثال):

openssl rsa -in file.pem -check -noout

(إذا نجح الأمر، فهو مفتاح خاص RSA صالح)

للتحقق إذا كان مفتاح عام:

openssl pkey -in file.pem -pubin -noout

(إذا نجح الأمر، فهو مفتاح عام)

التسميات الشائعة للملفات (أمثلة)

لا توجد قاعدة صارمة، لكن هذه بعض الأمثلة الشائعة لتنظيم الملفات:

نوع الملف تسمية مقترحة الامتداد الشائع
المفتاح الخاصmy-domain.key أو private-key.pem.key, .pem
المفتاح العامmy-domain.pub أو public-key.pem.pub, .pem
الشهادةmy-domain.crt أو certificate.pem.crt, .pem, .cer
سلسلة الشهادات (Chain)chain.pem أو intermediate.crt.pem, .crt
الشهادة الكاملة (مع السلسلة)fullchain.pem.pem
طلب توقيع الشهادةmy-domain.csr.csr
حزمة (مفتاح+شهادة)my-domain.pfx أو identity.p12.pfx, .p12

شرح طلب توقيع الشهادة (CSR)

ملف .csr هو الخطوة الأولى لطلب شهادة من جهة موثوقة (CA).

الهدف منه

تقديم معلوماتك + مفتاحك العام للـ CA لتوقيعها وإصدار شهادة رسمية.

هو بمثابة "طلب هوية رقمية" رسمي موجه للـ CA.

محتوياته

  1. بيانات الهوية (Subject):
    • CN (Common Name): اسم النطاق (e.g., www.example.com) أو اسمك.
    • O (Organization): اسم المؤسسة.
    • L (Locality): المدينة.
    • ST (State): الولاية/المحافظة.
    • C (Country): رمز الدولة (حرفان).
    • emailAddress: البريد الإلكتروني.
  2. المفتاح العام (Public Key): الذي قمت بتوليده مسبقًا.
  3. توقيع الطلب: يتم توقيع الطلب نفسه باستخدام المفتاح الخاص المقابل للمفتاح العام الموجود في الطلب، لإثبات أنك تملك المفتاح الخاص.

كيفية إنشائه (OpenSSL)

# 1. تأكد أن لديك مفتاح خاص (mykey.pem)
# openssl genrsa -out mykey.pem 2048

# 2. أنشئ الـ CSR باستخدام المفتاح الخاص
openssl req -new -key mykey.pem -out mydomain.csr

سيطلب منك إدخال بيانات الهوية (CN, O, L, ST, C...).

الناتج:

الخطوة التالية

ترسل ملف .csr للـ CA، وتتبع إجراءات التحقق الخاصة بهم للحصول على الشهادة الموقعة.

أهمية ثقة الجهة المصدّرة (CA) - مثال Let's Encrypt

لماذا لا يثق المتصفح بشهادتك الذاتية مباشرة؟ لأنه لا يوجد طرف ثالث موثوق يؤكد هويتك.

دور الـ CA (مثل Let’s Encrypt)

الـ CA تعمل كـ "كاتب عدل رقمي". قبل أن توقع شهادتك، تطلب منك إثبات ملكيتك للنطاق (Domain Validation).

أشهر طرق التحقق:

DNS Challenge:

تضيف سجل TXT خاص في إعدادات DNS لنطاقك.

HTTP Challenge:

تضع ملفًا خاصًا على خادم الويب الخاص بك في مسار معين.

بعد التحقق الناجح

عندما يزور المتصفح موقعك:

كيف يتم تشفير البيانات فعليًا في HTTPS؟ (تبسيط)

فهمنا أن الشهادة تثبت هوية الخادم. لكن كيف يتم تشفير البيانات ذهابًا وإيابًا؟

ليس بالمفتاح العام/الخاص مباشرة!

التشفير غير المتماثل (عام/خاص) بطيء نسبيًا. لذا يُستخدم فقط في البداية لتبادل مفتاح آخر أسرع.

مرحلة المصافحة (TLS Handshake) - الهدف: مفتاح سري مشترك

خطوات مبسطة جدًا:

  1. المتصفح الخادم: "أريد الاتصال بأمان، هذه خوارزمياتي المدعومة".
  2. الخادم المتصفح: "حسنًا، هذه شهادتي (تحتوي مفتاحي العام)، واخترت هذه الخوارزمية".
  3. المتصفح: يتحقق من الشهادة (هل هي موثوقة؟ هل تطابق النطاق؟ هل هي صالحة؟).
  4. (هنا السحر ) - إنشاء مفتاح الجلسة:
    • إما المتصفح يولد سرًا، يشفره بمفتاح الخادم العام ويرسله (RSA Key Exchange - قديم).
    • أو (الأحدث والأفضل) كلاهما يتبادل أجزاء رياضية ويولدان نفس المفتاح السري بشكل مستقل دون إرساله مباشرة (Diffie-Hellman/ECDHE).
  5. كلا الطرفين الآن لديهما نفس المفتاح السري المؤقت (Session Key).

مرحلة التشفير الفعلي (Symmetric Encryption)