# شهادات TLS في Webship: CA المدمج ACME
شهادة TLS تقوم بوظيفتين: فهي تساعد في تشفير الاتصال وتخبر العميل بهوية الجهة التي يتواصل معها. يمكن أن يكون التشفير قوياً بينما يكون قرار الثقة خاطئًا بالنسبة للجمهور. لذلك يجب أن تبدأ أتمتة الشهادات بسؤال واحد: من يجب أن يثق بهذا الموقع؟
Webship 1.4.0 يتخذ هذا الخيار بشكل مستقل لكل موقع مُكوَّن. يمكن لموقع عام استخدام شهادة ACME موثوقة من المتصفح، ويمكن لخدمة داخلية استخدام سلطة الشهادات الخاصة المدمجة في Webship، ويمكن لموقع يمتلك PKI موجود الاحتفاظ بملفات الشهادات التي يديرها المشغل. يمكنهم جميعًا مشاركة عملية Webship واحدة دون مشاركة مفتاح خاص واحد أو حدود ثقة واحدة.
أربعة أوضاع شهادات تلقائية، يتم اختيارها حسب الموقع
حقل certificate_mode ينتمي إلى كل إدخال من إدخالات [[sites]]. إنه ليس مفتاحًا عامًا.
| الوضع | مصدر موثوق | الأنسب | مسار التحقق | | --- | --- | --- | --- | | لكل موقع | مخازن الثقة العامة للمتصفح ونظام التشغيل | موقع عام باسم مضيف واحد بالضبط | ACME عام مع TLS-ALPN-01 | | الأسطول | متاجر الثقة في المتصفح العام ونظام التشغيل | مجموعات كبيرة من الأسماء من المستوى الثالث والرابع تحت النطاقات المسجلة صراحة | ACME العامة مع DNS-01 وشرائح الشهادات المستقرة | | مدمج | جذر خاص Webship تم تثبيته بواسطة المشغل | الخدمات الداخلية، الأجهزة المُدارة، الأساطيل الخاصة، وبيئات الاختبار | الإصدار أثناء العملية؛ لا توجد تحديات خارجية | | مشترك | متاجر الثقة للمتصفح ونظام التشغيل العامة | عمليات النشر القديمة التي تستخدم عن قصد مجموعة واحدة متعددة الأسماء العامة | ACME العامة مع TLS-ALPN-01 |
الإعداد الافتراضي هو لكل موقع. يقوم بطلب شهادة عامة واحدة لاسم الموقع بالضبط. وضع الأسطول هو الخيار العام القابل للتوسع للعديد من النطاقات الفرعية العميقة. الوضع المدمج يستخدم CA الخاص داخل العملية الخاص بـ Webship. يظل الوضع المشترك متاحًا للتوافق، لكنه ليس الإعداد الافتراضي.
شهادة ومفتاح كاملان تحت [sites.tls] لهما دائمًا الأسبقية على الإصدار التلقائي لذلك الموقع.
ما معنى “ACME CA المدمج”
قسم التكوين يُسمى [acme_ca]، لكن سلطة الشهادة المدمجة ليست خدمة ACME عامة أو متاحة عبر الشبكة. فهي لا توفر أي نقطة نهاية للدليل، ولا تقبل التسجيل عن بُعد، ولا تستدعي أي واجهة برمجة تطبيقات للمسجل، ولا تنفذ أي تحدي لإثبات السيطرة.
بدلاً من ذلك، Webship يحتفظ بمسار الإصدار الخاص الكامل في عملية واحدة:
- يقوم الموقع باختيار certificate_mode = "مضمن".
- Webship يقوم بتحميل أو إنشاء الهوية الجذرية الخاصة في دليل الحالة المُكوَّن.
- Webship يُنشئ مفتاحًا خاصًا جديدًا للموقع.
- الجذر المضمن يوقع شهادة ورقية لذلك الاسم بالضبط.
- Webship يتحقق من الهوية المكتملة قبل تثبيتها في محلل TLS الحي.
- ثم يكون الشهادة متاحة لكل بروتوكول مفعل لذلك الموقع.
تحدي الشبكة على طراز ACME سيثبت فقط Webship لنفسه، لذلك المسار المضمن عمداً لا يحتوي على بروتوكول شبكي. قسم [acme_ca] هو حالة PKI خاصة: يحدد مكان وجود الجذر ومدة صلاحية شهادات الأوراق الصادرة.
تكوين شهادة مدمجة لموقع واحد
هذا هو الشكل الأدنى لموقع خاص:
~~~تومل استمع = "0.0.0.0:443"
[tls] unknown_sni = "رفض"
[_tls_التلقائي] ممكّن = صحيح cache_dir = "/var/lib/webship/acme"
[acme_ca] state_dir = "/var/lib/webship/acme-ca" صلاحية_الورقة_بالأيام = 90
[[المواقع]] النطاق = "service.internal.example" root = "/srv/service" certificate_mode = "مضمن"
[المواقع.البروتوكولات] h1 = صحيح h2 = صحيح h3 = صحيح ~~~
يتم إنشاء الهوية الجذرية بشكل كسول عندما يحتاج موقع مضمن إليها لأول مرة. Webship يحافظ على مفتاح الجذر بصلاحيات مقيدة في state_dir. شهادة الجذر لها عمر افتراضي لمدة عشر سنوات؛ مدة صلاحية الأوراق يحددها leaf_validity_days.
عامل كلا الموقعين للتخزين كحالة إنتاج:
- تحتوي ذاكرة التخزين المؤقت ACME على هويات الموقع المُدارة تلقائيًا.
- يحتفظ دليل حالة CA المدمج بالهوية الجذرية الخاصة.
- حساب الخدمة يحتاج إلى الوصول، لكن مستخدمي التطبيق لا يحتاجون ذلك.
- يجب أن تحافظ النسخ الاحتياطية على السرية وأذونات الملفات.
- يجب أن تستخدم الإنتاج والتطوير والاختبار جذورًا ودلائل منفصلة.
حذف الدليل الجذر لا "يعيد ضبط TLS." إنه ينشئ مرساة ثقة جديدة. العملاء الذين يثقون بالجذر القديم سيرفضون الشهادات الصادرة عن البديل حتى يتم تحديث مخازن الثقة الخاصة بهم.
الثقة الخاصة مقصودة
الشهادات من سلطة التصديق المدمجة لا يتم الوثوق بها تلقائيًا من قبل المتصفحات العامة أو أنظمة التشغيل. تصبح موثوقة فقط بعد أن يقوم المشغل بتثبيت شهادة الجذر Webship المُصدرة في مخزن الثقة للعميل.
هذا يجعل وضع التضمين مناسبًا لـ:
- أجهزة الكمبيوتر المحمولة والهواتف التي تديرها الشركة والمسجلة من خلال إدارة الأجهزة؛
- حركة المرور الداخلية من خدمة إلى خدمة مع حزمة شهادات CA صريحة؛
- الأجهزة الخاصة والأساطيل الحافة المُتحكم فيها؛
- بيئات التطوير والاختبار التي يجب أن تمارس السلوك الفعلي لـ TLS;
- الشبكات المنفصلة التي لا يمكن أن تعتمد على سلطة شهادات عامة.
ليس هذا الوضع مناسبًا لموقع ويب عام عادي يستخدم زواره متصفحات غير مُدارة. استخدم الإصدار العام لكل موقع لاسم عام محدد، أو إصدار الأسطول لمجموعات النطاقات الفرعية العامة الكبيرة، أو الاستخدام المشترك فقط لنشر متعدد SAN متعمد قديم، أو ملفات يدوية من PKI موثوق بالفعل.
وزع شهادة الجذر فقط على العملاء. لا توزع أبداً المفتاح الخاص بالجذر. امتلاك هذا المفتاح يعطي حامله سلطة إصدار الهويات الموثوقة من قبل كل عميل مسجل.
يمكن للشهادات العامة والخاصة أن تتعايش
Webship 1.4.0 يمكنه مزج استراتيجيات الشهادة على نفس المستمع:
~~~تومل استمع = "0.0.0.0:443"
[tls] unknown_sni = "رفض"
[_tls_التلقائي] ممكّن = صحيح directory_url = "https://acme-v02.api.letsencrypt.org/directory" cache_dir = "/var/lib/webship/acme" جهات الاتصال = ["mailto:ops@example.com"] قبول_شروط_الخدمة = صحيح
[acme_ca] state_dir = "/var/lib/webship/acme-ca" مدة صلاحية الورقة = 90 يوم
[[المواقع]] النطاق = "www.example.com" root = "/srv/public" certificate_mode = "لكل_موقع"
[[المواقع]] النطاق = "control.internal.example" root = "/srv/control" certificate_mode = "مضمن"
[[المواقع]] النطاق = "payments.example.com" الجذر = "/srv/payments"
[المواقع.tls] شهادة = "/etc/webship/payments-fullchain.pem" المفتاح = "/etc/webship/payments-private-key.pem" ~~~
هنا، يحصل www.example.com على شهادة ACME عامة خاصة به. يحصل control.internal.example على شهادة خاصة من CA المدمج. يبقى payments.example.com تحت PKI الخارجي للمشغل لأن ملفاته الصريحة لها الأولوية.
يتم تجاهل دليل ACME العام من قبل المواقع المضمنة. لا يوقع الجذر المضمن أبدًا على الموقع العام. لا يتم تسجيل الموقع اليدوي بصمت في أي من سير العمل التلقائي.
محلل شهادة واحد لـ H1 و H2 و H3 و WebTransport
يحدث اختيار الشهادة أثناء مصافحة TLS، قبل وجود طلب HTTP. يستخدم Webship اسم الخادم في ClientHello لاختيار هوية الموقع ثم يتفاوض على بروتوكول التطبيق.
- HTTP/1.1 و HTTP/2 يستخدمان TLS عبر TCP.
- HTTP/3 و WebTransport يستخدمان TLS داخل QUIC عبر UDP.
- يمكن لهوية موقع صالحة واحدة أن تخدم كل بروتوكول مُمكّن.
- HTTP/3 يتطلب أيضًا إمكانية الوصول عبر بروتوكول UDP؛ يستخدم كل من H1 و H2 مسار TCP.
- يمكن لخدمة Alt-Svc الإعلان عن H3 مع الحفاظ على العودة إلى TCP.
يستخدم كل من TCP و TLS و QUIC نفس نموذج الهوية المخصص للموقع. الأسماء الدقيقة لها الأولوية، والفاصل الأطول الصحيح للرموز البديلة هو الفائز حيث يتم تكوين شهادات الرموز البديلة، ويمكن رفض SNI ذات الاسم غير المعروف بدلاً من استلام شهادة افتراضية غير ذات صلة.
استخدم unknown_sni = "reject" على مستمع متعدد المواقع عندما يجب أن تفشل أسماء المضيف غير المعروفة بالإغلاق. قم باختبار الأسماء المعروفة، والأسماء غير المعروفة، وسلوكك المتوقع بدون SNI قبل نشر الإنتاج.
قم بتدوير الهويات المضمنة بدون فجوة في الخدمة
Webship يكشف حالة الشهادة والتحولات المحكومة من خلال خادم MCP المصادق عليه والمرتبط بالحلقة المحلية:
- webship.tls.get_status يُبلغ عن محلل الشهادات النشط وحالة التجديد.
- يقوم webship.tls.reissue_certificate بإعادة إصدار شهادة مُدارة تلقائيًا لموقع ما فورًا فقط عندما يستخدم ذلك الموقع الوضع المدمج.
- webship.tls.reload يعيد تحميل حالة الشهادة من خلال مسار TLS المحمي العادي.
- تقارير webship.acme_ca.status ما إذا كانت الشهادة الخاصة CA مختارة، ودليل حالتها، وعمر الشهادة الفرعية، وعدد الإصدارات، وعدد الإلغاءات، وعينة النطاق الأخيرة.
- webship.sites.apply يضيف أو يزيل المواقع مقابل إصدار التكوين المثبت.
بالنسبة لإعادة الإصدار المدمج، يقوم Webship بإنشاء واستيعاب البديل قبل تبديله في الخدمة. تواصل الهوية الحالية الصالحة العمل حتى تكون الهوية الجديدة جاهزة. يتم تسجيل الهوية المتقاعدة فقط بعد تركيب البديل.
عملية إعادة الإصدار الفورية ترفض عن قصد شهادات الموقع العامة. يجب أن تظل التجديدات العامة داخل دورة حياة ACME العامة بدلاً من الخلط بينها وبين التوقيع الخاص أثناء المعالجة. كما أن عضوية الوضع المشترك مجمدة عند إعادة التشغيل لأن تغيير مجموعة متعددة الأسماء البديلة (multi-SAN) يعيد بناء حدود الهوية.
MCP هو سطح تحكم متميز. احتفظ به على حلقة العودة، واطلب TLS ورمز حامل قوي، واستخدم نفقًا مصدقًا للإدارة عن بُعد، وقم بمراجعة كل تعديل.
حدود الفشل التي تهم
يجب أن يفشل نظام الشهادات الآمن في الاتجاه الصحيح.
- الموقع المدمج الذي تم تكوينه حديثًا لا يستلم هوية موقع آخر أثناء انتظار الإصدار.
- لا يتم تثبيت استبدال غير صالح فوق شهادة عاملة.
- الملفات اليدوية الصريحة تمنع الملكية التلقائية لذلك الموقع.
- يمكن رفض SNI غير المعروف قبل توجيه HTTP.
- تظل شهادة السلطة المدمجة خاصة ولا تحتوي على نقطة تسجيل عن بُعد.
- تستخدم الهويات العامة والمضمَّنة مسارات ذاكرة مخبأ منفصلة داخل حالة TLS التلقائي.
تحذير بأن شهادة CA المدمجة غير مهيأة يعني أن Webship لم يتمكن من تجهيز دليل الحالة المكون. قم بإصلاح الملكية، الأذونات، الاستمرارية، أو توفر التخزين قبل إرسال الحركة إلى الموقع المتأثر. لا تحاول تجاوز الخطأ عن طريق نسخ مفتاح الجذر من بيئة أخرى.
قائمة التحقق من الإنتاج
قبل تمكين الوضع المدمج:
- حدد كل شريحة من العملاء التي يجب أن تثق بالموقع.
- إنشاء عملية مضبوطة لتصدير وتثبيت الشهادة الجذرية.
- استخدم حالة جذر منفصلة للإنتاج، والتطوير، والاختبار.
- استمر وحمِ مجلد حالة الشهادة المدمجة وذاكرة التخزين المؤقت لـ TLS التلقائي.
- قم بتشغيل Webship تحت حساب خدمة مخصص له حق الوصول فقط إلى المواد الأساسية المطلوبة.
- اختر certificate_mode في كل موقع يجب أن يكون حد الثقة فيه صريحًا.
- قم بتعيين واختبار سياسة SNI غير المعروفة.
- تمكين H1 و H2 و H3 عن قصد والتحقق من كل من مسارات TCP و UDP.
- ممارسة إعادة الإصدار، وإعادة التشغيل، والنسخ الاحتياطي، والاستعادة، والتحقق من ثقة العميل خارج الإنتاج.
- شغل webship --check-config قبل الإطلاق، ثم تحقق من المصدر، والأسماء، والصلاحية، والسلسلة، والبروتوكولات المتفاوض عليها من عميل حقيقي.
اختر الثقة أولًا، والأتمتة ثانيًا
تقوم شهادة الاعتماد المدمجة بإزالة الاعتماد على خدمة الشهادات الخارجية للبنية التحتية الخاصة. لكنها لا تجعل الجذر الخاص موثوقًا عالميًا، ولا ترفع عن المشغل مسؤولياته المتعلقة بالبنية التحتية للمفتاح العام (PKI).
Webship يُؤتمت إنشاء المفاتيح، والتوقيع، والتحقق، والتثبيت، والتدوير، واختيار الشهادات عبر البروتوكول. لا يزال المشغل يمتلك المسؤولية الجذرية، وتسجيل العملاء، وفصل البيئة، والنسخ الاحتياطي، والاستعادة، وقرار استخدام مسار الثقة العام أو الخاص.
هذا الفصل هو الميزة. يمكن لخادم مستقل أن يقوم بأتمتة TLS الخاص دون التظاهر بأنه سلطة شهادات عامة — ولا تزال المواقع العامة قادرة على استخدام إصدار لكل موقع أو للأسطول موثوق به من المتصفح في نفس العملية.
اقرأ الوثائق ذات الإصدارات Webship 1.4.0 documentation قبل النشر. يحدد RFC 5280 ملفات تعريف الشهادات والتحقق منها، يحدد RFC 6066 الإشارة إلى اسم خادم TLS، يحدد RFC 8446 TLS 1.3، يحدد RFC 8555 ACME العامة، ويحدد RFC 9525 التحقق من هوية الخدمة.