عن المشروع

Boulder هو تنفيذ لسلطة إصدار شهادات (CA) مبنية على ACME، وهو البرنامج الذي يشغّل Let's Encrypt. يتيح بروتوكول ACME لسلطة الإصدار التحقق تلقائيًا من أن مقدّم طلب الشهادة يتحكم فعليًا في معرّف ما، ويتيح للمشتركين إصدار الشهادات وإبطالها للمعرّفات التي يتحكمون بها. البنية المعمارية ينقسم Boulder إلى مكوّنات مفصولة حسب السياق الأمني: - واجهات الويب الأمامية (واحدة لكل إصدار من واجهة برمجة التطبيقات) - سلطة التسجيل - سلطة التحقق - سلطة إصدار الشهادات - سلطة التخزين - الناشر - محدّث قوائم الإبطال (CRL) تحتاج واجهة الويب الأمامية وسلطة التحقق ومخزّن قوائم الإبطال والناشر إلى الوصول إلى الإنترنت، وبالتالي فهي أكثر عرضة لخطر الاختراق. يمكن لسلطة التسجيل العمل دون اتصال بالإنترنت لكنها تتواصل مع واجهة الويب الأمامية وسلطة التحقق. تستقبل سلطة إصدار الشهادات التعليمات من سلطة التسجيل فقط. تستخدم جميع المكوّنات سلطة التخزين للحفظ الدائم، وتدعمها MariaDB. تتواصل المكوّنات عبر gRPC؛ وتُنشأ المكوّنات البعيدة كأزواج عميل/خادم، حيث ينفّذ العميل واجهة Go الخاصة بالمكوّن ويحتفظ الخادم بالمنطق الفعلي. داخليًا، يُنظَّم النظام حول خمسة أنواع من الكائنات تقابل موارد ACME مباشرة: الحسابات، والتفويضات، والتحديات، والطلبات، والشهادات. تنشئ الطلبات الواردة من عملاء ACME كائنات جديدة وتعدّل الكائنات القائمة، وتحتفظ سلطة التخزين بنسخ دائمة من مجموعة الكائنات الحالية. إعداد التطوير يأتي Boulder مع Dockerfile ويستخدم Docker Compose لتثبيت جميع الاعتماديات وتهيئتها. هذه هي الطريقة التي يوصي بها المشرفون لتشغيله لأغراض التطوير والتجريب، وهي غير مناسبة صراحةً كبيئة إنتاج. يقترح المشروع Pebble، وهو نسخة مصغّرة من Boulder، للتكامل المستمر والتجريب السريع من قِبل مطوّري عملاء ACME. سير العمل النموذجي: - استنسخ المستودع وتأكد من تثبيت Docker Engine 1.13.0+ وDocker Compose 1.10.0+؛ يُنصح بتوفير 2 غيغابايت من الذاكرة على الأقل لمضيف Docker. - شغّل ./t.sh لتشغيل المجموعة القياسية من فحوصات الجودة واختبارات الوحدة والتكامل؛ و./t.sh -u لاختبارات الوحدة، و./t.sh -i لاختبارات التكامل، و./tn.sh لإعداد "config-next" الذي يمثل حالة مستقبلية محتملة. - شغّل docker compose run bsetup مرة واحدة لكتابة الشهادات في test/certs، ثم docker compose up لتشغيل Boulder. - يثبّت ملف docker-compose.yml نسخة العمل في /boulder بحيث تنعكس تعديلات المضيف فورًا داخل الحاويات. يستخدم Boulder افتراضيًا محلل DNS وهميًا يحل جميع أسماء المضيفين إلى 127.0.0.1، وهو ما يناسب اختبارات التكامل داخل الحاوية. للسماح لعميل يعمل على المضيف بالتواصل مع Boulder، ابحث عن عنوان Docker IP الخاص بالمضيف واضبط متغير البيئة FAKE_DNS وفقًا لذلك؛ عندها يجيب المحلل المزوّد (sd-test-srv) على جميع استعلامات A بهذا العنوان. يجب أن تسمح جدران الحماية على المضيف بالاتصالات من نسخة Docker إلى المضيف على منافذ التحقق المطلوبة. العمل مع عملاء ACME عند تشغيل بيئة التطوير، تُعرض نقاط نهاية ACME للمضيف على http://localhost:4001/directory (ACME v2 عبر HTTP) وhttps://localhost:4431/directory (ACME v2 عبر HTTPS). يتطلب استخدام نقاط النهاية عبر HTTPS تهيئة العميل بمخزن ثقة يحتوي على شهادة CA الموجودة في test/certs/ipki/minica.pem. نظرًا لأن المحلل الوهمي يعيد 127.0.0.1 لأي استعلام، يمكن إصدار شهادات لأي نطاق كما لو كان يحل إلى localhost؛ ويؤدي تغيير FAKE_DNS إلى تغيير العنوان المُعاد، وغالبًا ما يُضبط ليكون الجهاز المضيف الذي يشغّل عميل ACME. يعرض ملف README تشغيل Certbot ضد Boulder محلي باستخدام متغير بيئة SERVER مخصص والخيار --standalone. ملاحظات للإنتاج يذكر المشروع أن Boulder صُمم خصيصًا لـ Let's Encrypt ويُقصد به دعم Web PKI والمتطلبات الأساسية لمنتدى CA/Browser فقط. ويشير إلى أن Boulder غالبًا ليس الخيار المناسب للمؤسسات التي تقيّمه للاستخدام الإنتاجي، وأن البنية التحتية للمفاتيح العامة المُدارة مركزيًا دون تفويض نطاقات عبر ACME تكون عادةً خيارًا أفضل. يُقدَّم دليل نشر وتنفيذ يصف العمل المطلوب والاعتبارات الأمنية. بيئة التطوير المعتمدة على Docker غير مناسبة صراحةً للإنتاج: فهي تستخدم مواد مفاتيح خاصة متاحة للعموم، وتكشف منافذ تصحيح الأخطاء، وهي هشّة أمام تعطل المكوّنات. يعطي الدعم والتطوير الأولوية لمهمة Let's Encrypt، لذا قد لا يُقبل الدعم في الوقت المناسب أو طلبات السحب التي تنحرف بشكل كبير عن الأهداف الأساسية. المساهمة والترخيص توجد إرشادات المساهمة وعملية مراجعة الكود ومدونة السلوك ونصائح أخرى في CONTRIBUTING.md؛ وتُشار إلى مدونة سلوك المجتمع في منتدى مجتمع Let's Encrypt. المشروع مرخّص بموجب Mozilla Public License 2.0.