إنشاء الشهادات والتحقق منها
ولّد شهادات TLS موقّعة بـCA المحلية (أو موقّعة ذاتيًا)، وافحص تفاصيل الشهادات من ملفات ومضيفين بعيدين، وتحقق من سلاسل الثقة وانتهاء الصلاحية، وحوّل بين PEM وDER. هذه هي العمليات اليومية لـPKI الخاصة بـElide.
---
إنشاء الشهادات
إنشاء شهادة TLS موقّعة بـCA المحلية لـElide:
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):
elide crt generate myapp.local localhost 127.0.0.1 ::1تُكتشف عناوين IP تلقائيًا (بمحاولة تحليلها كـIpAddr) وتُضاف كـSANs لعناوين IP بدلاً من SANs لـDNS. نطاقات البدل مثل .example.com مدعومة — يستبدل اسم ملف الإخراج بـ_wildcard.
شهادات موقّعة ذاتيًا
فرض شهادة موقّعة ذاتيًا حتى عند توفر CA محلية:
elide crt generate example.com --self-signedالشهادات الموقّعة ذاتيًا مفيدة للاختبار أو البيئات التي لا يكون فيها تثبيت CA عمليًا. ستعرض المتصفحات وعملاء TLS تحذيرات ثقة ما لم يُوثق بالشهادة صراحة.
شهادات عميل لـmTLS
إنشاء شهادة عميل للمصادقة المتبادلة عبر TLS:
elide crt generate service-name --clientشهادات العميل يُعيَّن استخدام المفتاح الموسّع فيها إلى ClientAuth بدلاً من ServerAuth. يجب تكوين الخادم لطلب والتحقق من شهادات العميل مقابل نفس CA.
CA مخصصة
التوقيع بـCA محددة بدلاً من مخزن PKI الافتراضي لـElide. يجب توفير كل من --ca-cert و--ca-key معًا:
elide crt generate example.com \
--ca-cert /path/to/ca.crt \
--ca-key /path/to/ca.keyتجميع سلسلة CA
تضمين شهادة CA في الإخراج لإنتاج ملف شهادة كامل السلسلة:
elide crt generate example.com --bundleسيحتوي الإخراج example.com.crt على الشهادة الورقية متبوعة بشهادة CA. مفيد للخوادم التي تحتاج السلسلة الكاملة في ملف واحد.
فترة صلاحية مخصصة
elide crt generate example.com --days 90الافتراضي 365 يومًا.
مسارات الإخراج
التحكم في مكان كتابة ملفات الشهادة والمفتاح:
# 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-signed | false | فرض شهادة موقّعة ذاتيًا (تخطي توقيع CA) |
—days | 365 | فترة الصلاحية بالأيام |
—client | false | إنشاء شهادة عميل (EKU: ClientAuth) لـmTLS |
—out-cert | ./{domain}.crt | مسار ملف الشهادة الناتج |
—out-key | ./{domain}.key | مسار ملف المفتاح الخاص الناتج |
—out-dir | . | دليل الإخراج (تُسمّى الملفات حسب النطاق الأول) |
—bundle | false | تضمين شهادة CA في الإخراج (سلسلة كاملة) |
—ct-log | لا شيء | تفعيل سجل شفافية الشهادات لتضمين SCT (حدّد مسار دليل البيانات) |
—json | false | الإخراج بصيغة JSON |
---
فحص الشهادات
عرض تفاصيل شهادة من ملف محلي أو اتصال TLS بعيد.
فحص ملف محلي
elide crt inspect ./cert.pemيتضمن الإخراج الموضوع، والمُصدِر، والرقم التسلسلي، وتواريخ الصلاحية، وبصمة SHA-256، وSANs (DNS وIP)، وحالة CA، وخوارزمية المفتاح، واستخدام المفتاح، واستخدام المفتاح الموسّع، وSCTs المُضمّنة، والأيام المتبقية.
فحص مضيف بعيد
elide crt inspect example.comيتصل هذا بـexample.com:443، ويُجري مصافحة TLS، ويستخرج شهادة القرين. لاستخدام منفذ مخصص:
elide crt inspect example.com:8443يُعامَل الهدف كمضيف بعيد عندما لا يحتوي على / أو \، ولا ينتهي بـ.pem أو .crt أو .der أو .cer.
سلسلة الشهادات الكاملة
عرض جميع الشهادات في السلسلة (ورقية، وسيطة، جذرية):
elide crt inspect example.com --chainتُطبع كل شهادة بفاصل ورقم فهرس.
إخراج مختصر
صيغة مدمجة بسطر واحد مناسبة للوحات التحكم والفحوصات السريعة:
elide crt inspect example.com --briefصيغة الإخراج: {subject} issuer={issuer} expires={not_after} remaining={days}d
إذا وُجدت SCTs مُضمّنة، يُلحق العدد: scts=1.
إدخال DER
إذا كان ملف الإدخال بترميز DER بدلاً من PEM:
elide crt inspect ./cert.der --der---
مرجع سطر الأوامر: inspect
elide crt inspect [OPTIONS] <TARGET>| العلَم | الافتراضي | الوصف |
|---|---|---|
TARGET | مطلوب | مسار ملف، أو مضيف بعيد (host[:port])، أو - للإدخال القياسي |
—chain | false | عرض جميع الشهادات في السلسلة |
—der | false | معاملة الإدخال كترميز DER (وليس PEM) |
—brief | false | إخراج مدمج بسطر واحد |
—json | false | الإخراج بصيغة JSON |
التحقق من الشهادات
التحقق من انتهاء صلاحية الشهادة، واسم المضيف، وسلسلة CA، واختياريًا حالة إبطال OCSP. يعكس رمز الخروج النتيجة: 0 لصالحة، 1 لغير صالحة.
التحقق من شهادة محلية
elide crt verify ./cert.pemيتحقق هذا مما إذا كانت الشهادة قد انتهت صلاحيتها، وإذا تم تعيين --expiry-warn (افتراضي: 30 يومًا)، مما إذا كانت قريبة من الانتهاء.
التحقق مقابل CA
elide crt verify ./leaf.crt --ca ./ca.crtيتحقق التحقق من السلسلة من أن مُصدِر الشهادة يتطابق مع موضوع CA وأن CA لديها قيد CA:true الأساسي.
التحقق من مضيف بعيد
elide crt verify example.comعند التحقق من مضيف بعيد، يُفحص اسم المضيف تلقائيًا مقابل SANs الشهادة. تُعتبر السلسلة صالحة إذا قدّم الخادم البعيد شهادات متعددة (ورقية + وسيطة).
التحقق من اسم المضيف
التحقق صراحة من اسم مضيف مقابل SANs الشهادة، بما في ذلك مطابقة البدل (*.example.com يطابق sub.example.com):
elide crt verify ./cert.pem --hostname api.example.comفحص إبطال OCSP
فحص حالة إبطال الشهادة عبر OCSP:
elide crt verify ./cert.pem --ocspفحوصات OCSP غير قاتلة: إذا كان مُستجيب OCSP غير قابل للوصول أو كانت الشهادة تفتقر لملحق AIA، يُنتج الفحص تحذيرًا لكن لا يُفشل التحقق الشامل. حالة Revoked مع ذلك تُسبب إبلاغ التحقق بأنها غير صالحة.
عتبة تحذير انتهاء الصلاحية
إنتاج تحذير عندما تنتهي صلاحية الشهادة خلال عدد معيّن من الأيام. تُبلَّغ الشهادة كصالحة، لكن يظهر التحذير في الإخراج:
elide crt verify ./cert.pem --expiry-warn 60العتبة الافتراضية 30 يومًا.
تكامل CI
استخدام رمز الخروج ومخرجات JSON لمراقبة الشهادات الآلية:
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 للتحقق من السلسلة مقابلها |
—ocsp | false | فحص حالة إبطال OCSP |
—expiry-warn | 30 | التحذير إذا انتهت صلاحية الشهادة خلال N يوم |
—hostname | لا شيء | اسم المضيف للتحقق مقابل SANs الشهادة |
—json | false | الإخراج بصيغة JSON |
التصدير والتحويل
تحويل الشهادات بين صيغتي PEM وDER، أو تجميع شهادات متعددة في ملف سلسلة.
PEM إلى DER
elide crt export cert.pem --out cert.derتُستنتج صيغة الإخراج من امتداد الملف (.der يُنتج DER؛ .pem و.crt و.cer يُنتجون PEM). التجاوز بـ--format:
elide crt export cert.pem --format der --out cert.binDER إلى PEM
elide crt export cert.der --out cert.pemتجميع سلسلة شهادات
دمج شهادة ورقية مع CA في ملف سلسلة PEM واحد:
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 (محجوزة للاستخدام المستقبلي) |
—json | false | الإخراج بصيغة JSON |
.p12/.pfx) مخطط لكن لم يُنفَّذ بعد. تُقبل أعلام —key و—password بواسطة محلل سطر الأوامر للتوافق المستقبلي.---
أمثلة شاملة
HTTPS للتطوير المحلي مع سلسلة كاملة
# 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.localmTLS بين خدمتين
# 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مراقبة انتهاء صلاحية شهادات الإنتاج
# 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فحص ومقارنة الشهادات
# 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
# 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