إنشاء الشهادات والتحقق منها

ولّد شهادات ⁦TLS⁩ موقّعة بـ⁦CA⁩ المحلية (أو موقّعة ذاتيًا)، وافحص تفاصيل الشهادات من ملفات ومضيفين بعيدين، وتحقق من سلاسل الثقة وانتهاء الصلاحية، وحوّل بين ⁦PEM⁩ و⁦DER⁩. هذه هي العمليات اليومية لـ⁦PKI⁩ الخاصة بـ⁦Elide⁩.

---

إنشاء الشهادات

إنشاء شهادة ⁦TLS⁩ موقّعة بـ⁦CA⁩ المحلية لـ⁦Elide⁩:

bash
 elide crt generate example.com www.example.com

ينتج هذا ⁦example.com.crt⁩ و⁦example.com.key⁩ في الدليل الحالي، موقّعة بـ⁦CA⁩ المُخزّنة في دليل ⁦PKI⁩ (عادةً ⁦~/.local/share/elide/pki/ca/⁩). إذا لم تكن ⁦CA⁩ موجودة، تُولَّد شهادة موقّعة ذاتيًا تلقائيًا كاحتياط.

نطاقات وعناوين ⁦IP⁩ متعددة

مرّر أي مزيج من أسماء النطاقات وعناوين ⁦IP⁩ كوسائط موضعية. يصبح الوسيط الأول هو الاسم الشائع (⁦CN⁩)؛ وتُضاف جميع الوسائط كأسماء بديلة للموضوع (⁦SANs⁩):

bash
 elide crt generate myapp.local localhost 127.0.0.1 ::1

تُكتشف عناوين ⁦IP⁩ تلقائيًا (بمحاولة تحليلها كـ⁦IpAddr⁩) وتُضاف كـ⁦SANs⁩ لعناوين ⁦IP⁩ بدلاً من ⁦SANs⁩ لـ⁦DNS⁩. نطاقات البدل مثل ⁦.example.com⁩ مدعومة — يستبدل اسم ملف الإخراج ⁦⁩ بـ⁦_wildcard⁩.

شهادات موقّعة ذاتيًا

فرض شهادة موقّعة ذاتيًا حتى عند توفر ⁦CA⁩ محلية:

bash
 elide crt generate example.com --self-signed

الشهادات الموقّعة ذاتيًا مفيدة للاختبار أو البيئات التي لا يكون فيها تثبيت ⁦CA⁩ عمليًا. ستعرض المتصفحات وعملاء ⁦TLS⁩ تحذيرات ثقة ما لم يُوثق بالشهادة صراحة.

شهادات عميل لـ⁦mTLS⁩

إنشاء شهادة عميل للمصادقة المتبادلة عبر ⁦TLS⁩:

bash
 elide crt generate service-name --client

شهادات العميل يُعيَّن استخدام المفتاح الموسّع فيها إلى ⁦ClientAuth⁩ بدلاً من ⁦ServerAuth⁩. يجب تكوين الخادم لطلب والتحقق من شهادات العميل مقابل نفس ⁦CA⁩.

⁦CA⁩ مخصصة

التوقيع بـ⁦CA⁩ محددة بدلاً من مخزن ⁦PKI⁩ الافتراضي لـ⁦Elide⁩. يجب توفير كل من ⁦--ca-cert⁩ و⁦--ca-key⁩ معًا:

bash
 elide crt generate example.com \
 --ca-cert /path/to/ca.crt \
 --ca-key /path/to/ca.key

تجميع سلسلة ⁦CA⁩

تضمين شهادة ⁦CA⁩ في الإخراج لإنتاج ملف شهادة كامل السلسلة:

bash
 elide crt generate example.com --bundle

سيحتوي الإخراج ⁦example.com.crt⁩ على الشهادة الورقية متبوعة بشهادة ⁦CA⁩. مفيد للخوادم التي تحتاج السلسلة الكاملة في ملف واحد.

فترة صلاحية مخصصة

bash
 elide crt generate example.com --days 90

الافتراضي 365 يومًا.

مسارات الإخراج

التحكم في مكان كتابة ملفات الشهادة والمفتاح:

bash
# Explicit file paths
 elide crt generate example.com \
 --out-cert ./certs/server.crt \
 --out-key ./certs/server.key

# Output directory (files named after the first domain)
 elide crt generate example.com --out-dir ./certs

عند استخدام ⁦--out-dir⁩، تُسمّى الملفات ⁦{domain}.crt⁩ و⁦{domain}.key⁩ بناءً على الوسيط الموضعي الأول.

شفافية الشهادات

إذا أُنشئت ⁦CA⁩ بسجل شفافية شهادات (عبر ⁦elide crt ca --ct-log⁩)، ستتضمن الشهادات الموقّعة بتلك ⁦CA⁩ طابعًا زمنيًا موقّعًا مُضمّنًا (⁦SCT⁩) في ملحق ⁦SCT⁩ لـ⁦X.509⁩ (⁦OID⁩ ⁦1.3.6.1.4.1.11129.2.4.2⁩).

---

مرجع سطر الأوامر: ⁦generate⁩

elide crt generate [OPTIONS] <DOMAINS...>
العلَمالافتراضيالوصف
DOMAINSمطلوباسم نطاق واحد أو أكثر و/أو عناوين ⁦IP⁩. الأول يصبح ⁦CN⁩؛ جميعها تصبح ⁦SANs⁩
—ca-cert ⁦CA⁩ المحلية لـ⁦Elide⁩ملف شهادة ⁦CA⁩ للتوقيع بها (يتطلب ⁦—ca-key⁩)
—ca-key ⁦CA⁩ المحلية لـ⁦Elide⁩ملف المفتاح الخاص لـ⁦CA⁩ للتوقيع به (يتطلب ⁦—ca-cert⁩)
—self-signedfalseفرض شهادة موقّعة ذاتيًا (تخطي توقيع ⁦CA⁩)
—days 365فترة الصلاحية بالأيام
—clientfalseإنشاء شهادة عميل (⁦EKU⁩: ⁦ClientAuth⁩) لـ⁦mTLS⁩
—out-cert ./{domain}.crtمسار ملف الشهادة الناتج
—out-key ./{domain}.keyمسار ملف المفتاح الخاص الناتج
—out-dir .دليل الإخراج (تُسمّى الملفات حسب النطاق الأول)
—bundlefalseتضمين شهادة ⁦CA⁩ في الإخراج (سلسلة كاملة)
—ct-log لا شيءتفعيل سجل شفافية الشهادات لتضمين ⁦SCT⁩ (حدّد مسار دليل البيانات)
—jsonfalseالإخراج بصيغة ⁦JSON⁩
تستخدم الشهادات الموقّعة بـ⁦CA⁩ خوارزمية مفتاح ⁦ECDSA P-256⁩ افتراضيًا. خوارزمية مفتاح الشهادة الورقية غير قابلة للتكوين حاليًا عبر علَم سطر أوامر — ترث الافتراضي من مكتبة ⁦PKI⁩.

---

فحص الشهادات

عرض تفاصيل شهادة من ملف محلي أو اتصال ⁦TLS⁩ بعيد.

فحص ملف محلي

bash
 elide crt inspect ./cert.pem

يتضمن الإخراج الموضوع، والمُصدِر، والرقم التسلسلي، وتواريخ الصلاحية، وبصمة ⁦SHA-256⁩، و⁦SANs⁩ (⁦DNS⁩ و⁦IP⁩)، وحالة ⁦CA⁩، وخوارزمية المفتاح، واستخدام المفتاح، واستخدام المفتاح الموسّع، و⁦SCTs⁩ المُضمّنة، والأيام المتبقية.

فحص مضيف بعيد

bash
 elide crt inspect example.com

يتصل هذا بـ⁦example.com:443⁩، ويُجري مصافحة ⁦TLS⁩، ويستخرج شهادة القرين. لاستخدام منفذ مخصص:

bash
 elide crt inspect example.com:8443

يُعامَل الهدف كمضيف بعيد عندما لا يحتوي على ⁦/⁩ أو ⁦\⁩، ولا ينتهي بـ⁦.pem⁩ أو ⁦.crt⁩ أو ⁦.der⁩ أو ⁦.cer⁩.

سلسلة الشهادات الكاملة

عرض جميع الشهادات في السلسلة (ورقية، وسيطة، جذرية):

bash
 elide crt inspect example.com --chain

تُطبع كل شهادة بفاصل ورقم فهرس.

إخراج مختصر

صيغة مدمجة بسطر واحد مناسبة للوحات التحكم والفحوصات السريعة:

bash
 elide crt inspect example.com --brief

صيغة الإخراج: ⁦{subject} issuer={issuer} expires={not_after} remaining={days}d

إذا وُجدت ⁦SCTs⁩ مُضمّنة، يُلحق العدد: ⁦scts=1⁩.

إدخال ⁦DER⁩

إذا كان ملف الإدخال بترميز ⁦DER⁩ بدلاً من ⁦PEM⁩:

bash
 elide crt inspect ./cert.der --der

---

مرجع سطر الأوامر: ⁦inspect⁩

elide crt inspect [OPTIONS] <TARGET>
العلَمالافتراضيالوصف
TARGETمطلوبمسار ملف، أو مضيف بعيد (⁦host[:port]⁩)، أو ⁦-⁩ للإدخال القياسي
—chainfalseعرض جميع الشهادات في السلسلة
—derfalseمعاملة الإدخال كترميز ⁦DER⁩ (وليس ⁦PEM⁩)
—brieffalseإخراج مدمج بسطر واحد
—jsonfalseالإخراج بصيغة ⁦JSON⁩
---

التحقق من الشهادات

التحقق من انتهاء صلاحية الشهادة، واسم المضيف، وسلسلة ⁦CA⁩، واختياريًا حالة إبطال ⁦OCSP⁩. يعكس رمز الخروج النتيجة: ⁦0⁩ لصالحة، ⁦1⁩ لغير صالحة.

التحقق من شهادة محلية

bash
 elide crt verify ./cert.pem

يتحقق هذا مما إذا كانت الشهادة قد انتهت صلاحيتها، وإذا تم تعيين ⁦--expiry-warn⁩ (افتراضي: 30 يومًا)، مما إذا كانت قريبة من الانتهاء.

التحقق مقابل ⁦CA⁩

bash
 elide crt verify ./leaf.crt --ca ./ca.crt

يتحقق التحقق من السلسلة من أن مُصدِر الشهادة يتطابق مع موضوع ⁦CA⁩ وأن ⁦CA⁩ لديها قيد ⁦CA:true⁩ الأساسي.

التحقق من مضيف بعيد

bash
 elide crt verify example.com

عند التحقق من مضيف بعيد، يُفحص اسم المضيف تلقائيًا مقابل ⁦SANs⁩ الشهادة. تُعتبر السلسلة صالحة إذا قدّم الخادم البعيد شهادات متعددة (ورقية + وسيطة).

التحقق من اسم المضيف

التحقق صراحة من اسم مضيف مقابل ⁦SANs⁩ الشهادة، بما في ذلك مطابقة البدل (⁦*.example.com⁩ يطابق ⁦sub.example.com⁩):

bash
 elide crt verify ./cert.pem --hostname api.example.com

فحص إبطال ⁦OCSP⁩

فحص حالة إبطال الشهادة عبر ⁦OCSP⁩:

bash
 elide crt verify ./cert.pem --ocsp

فحوصات ⁦OCSP⁩ غير قاتلة: إذا كان مُستجيب ⁦OCSP⁩ غير قابل للوصول أو كانت الشهادة تفتقر لملحق ⁦AIA⁩، يُنتج الفحص تحذيرًا لكن لا يُفشل التحقق الشامل. حالة ⁦Revoked⁩ مع ذلك تُسبب إبلاغ التحقق بأنها غير صالحة.

عتبة تحذير انتهاء الصلاحية

إنتاج تحذير عندما تنتهي صلاحية الشهادة خلال عدد معيّن من الأيام. تُبلَّغ الشهادة كصالحة، لكن يظهر التحذير في الإخراج:

bash
 elide crt verify ./cert.pem --expiry-warn 60

العتبة الافتراضية 30 يومًا.

تكامل ⁦CI⁩

استخدام رمز الخروج ومخرجات ⁦JSON⁩ لمراقبة الشهادات الآلية:

bash
if ! elide crt verify production.example.com --expiry-warn 14 --json > /dev/null 2>&1; then
 echo "Certificate validation failed"
  exit 1
fi

---

مرجع سطر الأوامر: ⁦verify⁩

elide crt verify [OPTIONS] <CERT>
العلَمالافتراضيالوصف
CERTمطلوبمسار ملف الشهادة أو مضيف بعيد (⁦host[:port]⁩)
—ca لا شيءملف شهادة ⁦CA⁩ للتحقق من السلسلة مقابلها
—ocspfalseفحص حالة إبطال ⁦OCSP⁩
—expiry-warn 30التحذير إذا انتهت صلاحية الشهادة خلال ⁦N⁩ يوم
—hostname لا شيءاسم المضيف للتحقق مقابل ⁦SANs⁩ الشهادة
—jsonfalseالإخراج بصيغة ⁦JSON⁩
---

التصدير والتحويل

تحويل الشهادات بين صيغتي ⁦PEM⁩ و⁦DER⁩، أو تجميع شهادات متعددة في ملف سلسلة.

⁦PEM⁩ إلى ⁦DER⁩

bash
 elide crt export cert.pem --out cert.der

تُستنتج صيغة الإخراج من امتداد الملف (⁦.der⁩ يُنتج ⁦DER⁩؛ ⁦.pem⁩ و⁦.crt⁩ و⁦.cer⁩ يُنتجون ⁦PEM⁩). التجاوز بـ⁦--format⁩:

bash
 elide crt export cert.pem --format der --out cert.bin

⁦DER⁩ إلى ⁦PEM⁩

bash
 elide crt export cert.der --out cert.pem

تجميع سلسلة شهادات

دمج شهادة ورقية مع ⁦CA⁩ في ملف سلسلة ⁦PEM⁩ واحد:

bash
 elide crt export leaf.crt --chain ca.crt --out fullchain.pem

يحتوي الإخراج على الشهادات بالترتيب: ملف الإدخال أولاً، ثم محتويات ملف السلسلة. تُحوَّل إدخالات ⁦DER⁩ تلقائيًا إلى ⁦PEM⁩ للتجميع.

---

مرجع سطر الأوامر: ⁦export⁩

elide crt export [OPTIONS] <INPUT> --out <OUTPUT>
العلَمالافتراضيالوصف
INPUTمطلوبملف شهادة الإدخال (⁦PEM⁩ أو ⁦DER⁩، يُكتشف تلقائيًا)
—out مطلوبمسار ملف الإخراج
—format من الامتدادصيغة الإخراج: ⁦pem⁩ أو ⁦der
—chain لا شيءملف سلسلة ⁦CA⁩/وسيطة للتجميع مع الشهادة
—key لا شيءملف المفتاح الخاص (محجوز لدعم ⁦PKCS12⁩ المستقبلي)
—password لا شيءكلمة مرور لإخراج ⁦PKCS12⁩ (محجوزة للاستخدام المستقبلي)
—jsonfalseالإخراج بصيغة ⁦JSON⁩
إخراج ⁦PKCS12⁩ (⁦.p12⁩/⁦.pfx⁩) مخطط لكن لم يُنفَّذ بعد. تُقبل أعلام ⁦—key⁩ و⁦—password⁩ بواسطة محلل سطر الأوامر للتوافق المستقبلي.

---

أمثلة شاملة

⁦HTTPS⁩ للتطوير المحلي مع سلسلة كاملة

bash
# Create a CA and trust it
 elide crt ca
 sudo elide crt trust

# Generate a certificate with the CA chain bundled
 elide crt generate myapp.local localhost 127.0.0.1 \
 --bundle --out-dir ./certs

# Verify it
 elide crt verify ./certs/myapp.local.crt \
 --ca ~/.local/share/elide/pki/ca/ca.crt \
 --hostname myapp.local

⁦mTLS⁩ بين خدمتين

bash
# Create a shared CA
 elide crt ca --name "Internal Services CA"

# Generate server certificate
 elide crt generate api.internal --out-dir ./server-certs

# Generate client certificate
 elide crt generate client-service --client --out-dir ./client-certs

# Verify the client cert was signed by the same CA
 elide crt verify ./client-certs/client-service.crt \
 --ca ~/.local/share/elide/pki/ca/ca.crt

مراقبة انتهاء صلاحية شهادات الإنتاج

bash
# Check multiple hosts, fail if any expires within 14 days
for host in api.example.com app.example.com cdn.example.com; do
 echo "--- $host ---"
 elide crt verify "$host" --expiry-warn 14
done

فحص ومقارنة الشهادات

bash
# Extract subjects from the full chain of a production host
 elide crt inspect api.example.com --chain --json | jq '.[].subject'

# Quick summary of all certs in the chain
 elide crt inspect api.example.com --chain --brief

تجديد ⁦ACME⁩ مع ⁦Cloudflare DNS⁩

bash
# Obtain a certificate for a wildcard domain
 elide crt renew "*.example.com" example.com \
 --acme-email admin@example.com \
 --dns cloudflare \
 --dns-token "$CF_API_TOKEN" \
 --out-dir ./certs

# Force renewal even if the current cert is still valid
 elide crt renew example.com \
 --acme-email admin@example.com \
 --dns cloudflare \
 --dns-token "$CF_API_TOKEN" \
 --force

---

انظر أيضًا

  • elide crt⁩ — نظرة عامة على إدارة الشهادات و⁦PKI⁩
  • ⁦CA⁩ وإدارة الثقة — إنشاء سلطات الشهادات، والتثبيت في مخازن ثقة النظام و⁦JVM⁩