سكريبتات شل لتشغيل هيئة إصدار شهادات (CA) غير متصلة بالشبكة ومعزولة هوائيًا على OpenBSD باستخدام OpenSSL. يُنشر حالة الإلغاء عبر خادم OpenBSD OCSP منفصل. تُنقل التحديثات بين جهاز CA غير المتصل وجهاز خادم OCSP عبر محرك USB.
🌐 Language / Sprache / Langue / Idioma / Língua / Lingua / 語言 / 언어 / भाषा / Язык / لغة / Lugha / 言語 / Lang / Wika / ʻŌlelo / Gagana / Reo / Taal / Harshe / ቋንቋ / Èdè / ভাষা / 语言 / Keel / Kieli / Språk / Мова / ภาษา / Bahasa / Wika / Bahasa / Basa / Γλώσσα / Lingua / שפה / Teanga
| 🇺🇸 English | 🇩🇪 Deutsch | 🇪🇸 Español | 🇫🇷 Français | 🇵🇹 Português |
| 🇮🇹 Italiano | 🇭🇰 繁體中文 | 🇰🇷 한국어 | 🇮🇳 हिन्दी | 🇷🇺 Русский |
| 🇸🇦 العربية | 🌍 Kiswahili | 🇯🇵 日本語 | 🇭🇹 Kreyòl ayisyen | 🌺 ʻŌlelo Hawaiʻi |
| 🌊 Gagana Sāmoa | 🌿 Te Reo Māori | 🇿🇦 Afrikaans | 🇳🇱 Nederlands | 🌍 Hausa |
| 🇪🇹 አማርኛ | 🌍 Yorùbá | 🇧🇩 বাংলা | 🇨🇳 简体中文 | 🇪🇪 Eesti |
| 🇫🇮 Suomi | 🇸🇪 Svenska | 🇳🇴 Norsk | 🇺🇦 Українська | 🇹🇭 ภาษาไทย |
| 🇮🇩 Bahasa Indonesia | 🇵🇭 Filipino | 🇲🇾 Bahasa Melayu | 🌏 Basa Jawa | 🇬🇷 Ελληνικά |
| 📜 Latina | 🇮🇱 עברית | 🇮🇪 Gaeilge |
┌─────────────────────────────┐ محرك USB ┌──────────────────────────┐
│ جهاز CA غير المتصل │ ───────────────────► │ جهاز خادم OCSP │
│ (OpenBSD، معزول هوائيًا) │ export-to-usb.sh │ (OpenBSD، متصل بشبكة) │
│ │ ◄─────────────────── │ │
│ /root/ca/ │ نقل مادي │ /etc/ocsp/ │
│ openssl.cnf │ │ index.txt │
│ certs/ca.cert.pem │ │ *.crl.pem │
│ intermediate-*/ │ │ *-responder.crt │
│ index.txt │ │ OcspServer (ASP.NET) │
│ crl/ │ │ rcctl enable ocspserver │
│ certs/ │ │ │
│ ocsp/ │ │ │
└─────────────────────────────┘ └──────────────────────────┘
يعمل كلا الجهازين بنظام OpenBSD. ثبّت OpenSSL إن لم يكن موجودًا:
pkg_add opensslيحتاج جهاز خادم OCSP أيضًا إلى تثبيت
OpenBSDOCSPServer
وتسجيله كخدمة rc.d باسم ocspserver.
تستخدم جميع السكريبتات #!/bin/sh (نظام /bin/sh المبني على ksh في OpenBSD)،
وأدوات OpenBSD القياسية (mount_msdos، sha256، rcctl، doas)،
وopenssl(1). شغّل جميع السكريبتات بصلاحيات الجذر عبر doas.
scripts/
setup-ca.sh تهيئة مجلدات CA الجذر وتوليد المفتاح/الشهادة الجذر
create-intermediate-ca.sh إنشاء CA وسيطة موقّعة من CA الجذر
create-server-cert.sh إصدار شهادة خادم TLS (mTLS)
create-client-cert.sh إصدار شهادة عميل (mTLS)
revoke-cert.sh إلغاء شهادة وإعادة توليد CRL
export-to-usb.sh تعبئة بيانات CA على USB للنقل المعزول هوائيًا (جانب CA)
import-from-usb.sh الاستيراد من USB إلى خادم OCSP (جانب خادم OCSP)
config/
openssl-root.cnf.template قالب إعدادات OpenSSL لـ CA الجذر
openssl-intermediate.cnf.template قالب إعدادات OpenSSL لـ CA الوسيطة
حضّر قيم النشر قبل تنفيذ الخطوات أدناه:
-
أين ستكون CA؟
default:/root/ca
القيمة الفعلية: -
ما هي المؤسسة وأين تقع؟
default:My Organization
القيمة الفعلية: -
ما اسم المشروع؟
default:MY PROJECT
القيمة الفعلية: -
ما تاريخ إصدار نسخة المشروع؟
default:01012027
القيمة الفعلية: -
ما هو نطاق المستوى الأعلى (TLD)؟
default:example.com
القيمة الفعلية: -
ما هو النطاق الفرعي؟
default:app.
القيمة الفعلية: -
ما عنوان البريد الإلكتروني لمستخدم(ي) العميل؟
default:user@example.com
القيمة الفعلية: -
أين يوجد محرك USB للنقل؟
default:/dev/sd1i
القيمة الفعلية:
doas sh scripts/setup-ca.sh /root/ca \
"/C=US/ST=MyState/L=MyCity/O=My Organization/CN=My Organization Root CA"ينشئ /root/ca/، ويولّد مفتاح جذر 4096 بت مشفر بـ AES-256، وشهادة موقّعة ذاتيًا
صالحة لمدة 20 عامًا، وشهادة توقيع OCSP لـ CA الجذر.
doas sh scripts/create-intermediate-ca.sh MY-PROJECT 01012027 /root/ca \
"/C=US/ST=MyState/L=MyCity/O=My Organization/CN=My Organization Intermediate CA MY-PROJECT 01012027"تُنشأ الملفات في /root/ca/intermediate-MY-PROJECT-01012027/.
doas sh scripts/create-server-cert.sh MY-PROJECT 01012027 \
app.example.com \
"DNS:app.example.com,DNS:www.example.com" \
/root/caالمخرجات في مجلد CA الوسيطة:
private/app.example.com.01012027.key.pem— مفتاح خاص مشفرcerts/app.example.com.01012027.cert.pem— شهادة موقّعةcerts/app.example.com.01012027.server.full.pfx— حزمة PKCS#12
doas sh scripts/create-client-cert.sh MY-PROJECT 01012027 \
user@example.com /root/caكرّر لكل مستخدم. انقل كل حزمة .full.pfx إلى المستخدم المعني عبر قناة آمنة.
doas sh scripts/revoke-cert.sh MY-PROJECT 01012027 \
certs/client-user@example.com.01012027.cert.pem \
keyCompromise /root/caلتجديد CRL دون إلغاء أي شهادة (مثلًا بشكل دوري):
doas sh scripts/revoke-cert.sh MY-PROJECT 01012027 --crl-only /root/caأدخل محرك USB بصيغة FAT32. تأكد من الجهاز:
dmesg | tail -20 # ابحث عن أسطر "sd1 at ..."
disklabel sd1 # حدد قسم FAT32 (عادةً 'i')ثم صدّر:
doas sh scripts/export-to-usb.sh MY-PROJECT 01012027 /root/ca /dev/sd1iتكتب السكريبت ملف بيان SHA256 وتفصل المحرك بأمان. انقل محرك USB ماديًا إلى جهاز خادم OCSP.
dmesg | tail -20 # تأكد من اسم جهاز USB
disklabel sd1
doas sh scripts/import-from-usb.sh /dev/sd1i /etc/ocsp ocspserverتتحقق السكريبت من المجاميع الاختبارية، وتنسخ الملفات المحدّثة إلى /etc/ocsp/،
وتعيد تحميل الخدمة ocspserver عبر rcctl. إذا كان EnableIndexTxtWatch يساوي
true في appsettings.json، سيلتقط خادم OCSP أيضًا تغييرات index.txt تلقائيًا
دون الحاجة لإعادة تحميل.
openssl ocsp \
-issuer /etc/ocsp/intermediate-MY-PROJECT-01012027/ca-chain.cert.pem \
-cert /path/to/cert.pem \
-url http://localhost:2560 \
-resp_text| الملف | النمط |
|---|---|
| مفتاح CA الوسيطة | intermediate-PROJECT-DATE.key.pem |
| شهادة CA الوسيطة | intermediate-PROJECT-DATE.cert.pem |
| سلسلة الشهادات | ca-chain-PROJECT-DATE.cert.pem |
| شهادة الخادم | SERVER_DOMAIN.DATE.cert.pem |
| PKCS#12 الخادم | SERVER_DOMAIN.DATE.server.full.pfx |
| شهادة العميل | client-USER_EMAIL.DATE.cert.pem |
| PKCS#12 العميل | client-USER_EMAIL.DATE.full.pfx |
| CRL | intermediate.crl.pem / intermediate.crl.der |
| شهادة توقيع OCSP | INTER_NAME-ocsp.cert.pem |
- يجب عدم توصيل جهاز CA غير المتصل بأي شبكة أبدًا.
- مفاتيح الجذر والوسيطة مشفرة بـ AES-256. خزّن عبارات المرور في رمز أجهزة أو خزينة مادية، بعيدًا عن المفاتيح.
- تحقق دائمًا من مجاميع USB الاختبارية قبل الاستيراد — تفعل
import-from-usb.shذلك تلقائيًا باستخدامsha256 -Cمن OpenBSD. - تنتهي صلاحية CRL بعد 30 يومًا افتراضيًا. جدوّل تجديدًا دوريًا:
doas sh scripts/revoke-cert.sh MY-PROJECT DATE --crl-only # ثم export-to-usb + import-from-usb - تنتهي صلاحية شهادات توقيع OCSP بعد 375 يومًا. جدّدها بإعادة تشغيل
create-intermediate-ca.shبنفس الوسائط؛ يتخطى الخطوات المكتملة ويولّد شهادة OCSP جديدة فقط عند الحاجة.