كيفية الحصول على شهادة Let’s Encrypt باستخدام التحقق من صحة DNS مع acme-dns-certbot على Ubuntu 18.04

اختار المؤلف صندوق إغاثة COVID-19 لتلقي تبرع كجزء من برنامج الكتابة من أجل التبرعات.

مقدمة

يتم إصدار معظم شهادات Let’s Encrypt باستخدام التحقق من HTTP، مما يسمح بتثبيت الشهادات بسهولة على خادم واحد. ومع ذلك، لا يكون التحقق من HTTP دائمًا مناسبًا لإصدار الشهادات للاستخدام على مواقع الويب الموزعة الأحمال، ولا يمكن استخدامه لإصدار شهادات عنوان بريد إلكتروني عام.

يتيح التحقق من DNS إمكانية التحقق من طلبات إصدار الشهادات باستخدام سجلات DNS، بدلاً من تقديم المحتوى عبر HTTP. وهذا يعني أنه يمكن إصدار الشهادات في الوقت نفسه لمجموعة من خوادم الويب التي تعمل خلف موازن الحمل، أو لنظام لا يمكن الوصول إليه مباشرة عبر الإنترنت. كما تدعم شهادات عنوان البريد الإلكتروني العام باستخدام التحقق من DNS.

يُستخدم أداة acme-dns-certbot لربط Certbot بمخزن خاص بالDNS الثالث حيث يمكن تعيين سجلات تحقيقة التوثيق التي يمكن أن يتم تعيينها تلقائيًا عن طريق ال API عندما تطلب توثيقًا. الميزة هنا هي أنك لا تحتاج إلى تكامل Certbot مباشرًا مع حسابك مع مزود ال DNS، ولا تحتاج أي تصريح للوصول غير المحدود إلى تكوينك الكامل لل DNS، وهذا يميز بالأمان.

تستخدم المناطق التعيينية لل DNS لتوجيه بحثًا لسجلات تحقيقة التوثيق إلى خدمة DNS خاصة ثالثة، لذا بمجرد إنجاز التكيف الأولي، يمكنك طلب أي توثيقًا ترغب بدون تحتوي على أي تحقيق يدوي.

إحدى المزايا الرئيسية ل acme-dns-certbot هو أنه يمكن استخدامه لتوجيه توثيقًا للخوادم الشخصية التي قد تشتغل خلف متوازي تحميل، أو غير قابلة للوصول مباشرًا عبر HTTP. لا يمكن استخدام تحقيق التوثيق التقليدي ل HTTP في هذه الحالات، إلا إذا وضعت ملفات التحقيق اليدويًا على كل خوادمك. تلك الأداة أيضًا مفيدة إذا كنت تريد إصدار توثيق للخوادم التي لا يمكن الوصول إليها عبر الإنترنت، مثل نظام داخلي أو بيئة تجريد.

في هذا الدرس، ستستخدم قفل acme-dns-certbot ل Certbot لإصدار توثيق Let’s Encrypt بواسطة تحقيق DNS.

المقاصد

لإنجاز هذا التعليمات، سيتوجب عليك:

  • خدمة Ubuntu 18.04 تم إنشاؤها بتتبع الإعداد الخدمة الأولية بUbuntu 18.04 بما في ذلك مستخدم غير رئيسي يمكن أستخدام sudo.

  • إسم منطقة تحتوي على القدرة على استلام شهادة TLS وبما في ذلك القدرة على إضافة سجلات DNS. في هذا المثال الخاص سنستخدم your-domain و subdomain.your-domain، وأيضًا *.your-domain لشهادة الإسم العام. ومع ذلك يمكن تكرار ذلك للمجالات الأخرى إذا كان ذلك من الضروري.

بمجرد تأمين هذه الأدوات ، قم بتسجيل دخول إلى خدمتك بمستخدمك الغير رئيسي للبدء في التشغيل.

خطوة 1 — Installing Certbot

في هذه الخطوة ، سوف ت Installing Certbot ، الذي هو برنامج يستخدم لإصدار وإدارة شهادات Let’s Encrypt.

Certbot متاح ضمن مستودعات ال Ubuntu Apt الرسمية ، ومع ذلك يوصل الى توصيل المستودع المرشد من قبل مطوري Certbot لأنه دائماً يمتلك أخيراً أصدقاً بالنسخ المتقدمة للبرنامج.

قم بإضافة المستودع ل Certbot:

sudo apt-add-repository ppa:certbot/certbot

سوف تحتاج لضغط ENTER لقبول التقا prompt وإضافة المستودع الجديد إلى نظامك.

من ثم قم بتنصيب حزمة Certbot:

sudo apt install certbot

بمجرد تنصيب التأكيد ، يمكنك أن تتحقق من تنصيب Certbot بنجاح:

certbot --version

هذا سيتم إخراج شيء مماثل للتالي:

Output
certbot 0.31.0

في هذه الخطوة قمت بتنصيب Certbot. بعد ذلك سوف ت下载 وتنصيب acme-dns-certbot اللوح.

خطوة 2 — تنصيب acme-dns-certbot

ومع تم تنصيب برنامج Certbot الأساسي بالإضافة إلى تحميل وتنصيب acme-dns-certbot الذي سيسمح ل Certbot بالعمل في وضعية تحقيق التوافر الخاصة بال DNS.

بدء بتحميل نسخة من ال脚本:

ملاحظة: وكأفضل ممارسة، يجب أن تتأكد من مراجعة هذا المجلد القائم على Github والscript قبل تشغيله. يمكنك أيضًا أولاً توزيع هذا المجلد ومن ثم استخدام الscript acme-dns-certbot.py. يوفر هذا التوزيع طبقة extra من الأمان، متأكدًا من أن الscript يبقى تحت سيطرتنا وأقل معروفًا لتغيرات غير مؤكدة.

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

حينما تنتهي التحميل، وضع الscript كمؤلف قابل للتنفيذ:

chmod +x acme-dns-auth.py

ثم، قم بتحرير الملف بواسطة محرر النصوص المفضل لك وتكرار السطر الأول لتجذب استخدام Python 3:

nano acme-dns-auth.py

أضف تقرير 3 إلى نهاية السطر الأول:

acme-dns-certbot.py
#!/usr/bin/env python3
. . .

وهذا من المطلوب لضمان أن الscript يستخدم أحدث نسخة مدعومة للPython 3 بدلاً من نسخة الPython 2 التاريخية.

بمجان، حفظ وغلق الملف.

أخيرًا، حرك الscript إلى داخل داخل مجلد Certbot Let’s Encrypt حتى يتم تحميله من قبل Certbot:

sudo mv acme-dns-auth.py /etc/letsencrypt/

في هذه الخطوة، قمت بتحميل وتثبيت المعالجة acme-dns-certbot. من ثم، يمكنك بدء الإعدادات والمحاولة لتوزيع أول شهادة.

خطوة 3 — إعداد acme-dns-certbot

بحيث تبدأ باستخدام acme-dns-certbot، سيتوجب عليك إنجاز عملية إعداد أولية وإصدار عقد شهادة واحد على الأقل.

بدء بتشغيل Certbot لتجبره على إصدار شهادة بواسطة توثيق ال DNS. سيجري 脚本 acme-dns-certbot وتنبيه بعملية تكييف البدء:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

يمكنك استخدام الماركET --manual لتعطيل جميع خصائص التكامل التلقائي ل Certbot. في هذه الحالة ، أنت تقوم بإصدار شهادة خام بدلاً من تثبيتها تلقائيًا في خدمة.

يمكنك تكوين Certbot لاستخدام مربع acme-dns-certbot من خلال ماركET --manual-auth-hook . أنت تشغل الماركET --preferred-challenges لتحدد توثيق ال DNS.

يجب أيضًا إخبار Certbot بتوقف قبل محاولة توثيق الشهادة، ويفعلون ذلك مع ماركET --debug-challenges . هذا لتسمح لك بإعداد ال DNS CNAME رقم (رقم) المطلوب من acme-dns-certbot، والذي يوضح في خطوة هذه. بدون ماركET --debug-challenges ، لن يتوقف Certbot ، لذا لن يتوفر وقت لإجراء تغيير DNS المطلوب.

تذكر أن تستبدل كل من أسماء الأحقوات التي ترغب في استخدامها باستخدام الماركات الخاصة -d. إذا كنت تريد إصدار شهادة مفاعلة، تأكد من تخليص النقاط الأخرى (*) باستخدام السكين (\).

بعد تتبع خطوات قيام بها Certbot الاعتيادية، سوف تتم إلتقاء مع رسالة مشابهة لما يلي:

Output
... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

سيتوجب عليك إضافة سجل الـCNAME المتطلب لتكوينات DNS لإسم الموقع الخاص بك. هذا يدعم السيطرة على قسم الموقع _acme-challenge على خدمة DNS ACME، ويسمح ل acme-dns-certbot بضبط سجلات DNS المتطلبة لتتبعة طلب الشهادة.

إذا كان لديك خدمة DigitalOcean كمزود بال DNS، يمكنك ضبط سجل ال DNS داخل لوحة محاكمك:

يوصي بضبط توافر الوقت (TTL) حول 300 ثانية لمساعدة تأكد بسرعة عن أي تغييرات في السجل.

بمجرد تكوين السجل ال DNS، عد إلى Certbot وأنقر على ENTER لتتبعة طلب الشهادة وإنهاء عملية الإصدار.

سيستغرق هذا بضع ثواني، ومن ثم سترى رسالة تؤكد أن الشهادة قد تم إصدارها:

Output
... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

لقد أجريت acme-dns-certbot لأول مرة، وقمت بضبط السجلات DNS المطلوبة، وتم إصدار الشهادة بنجاح. من ثم ستقوم بإعداد تجديدات تلقائية لشهادتك.

خطوة 4 — استخدام acme-dns-certbot

في هذه الخطوة الأخيرة، ستستخدم acme-dns-certbot لصدور تأمينات إضافية وتجديد تأمينات قائمة بالفعل.

أولاً، وبمجرد أن تم صدور تأمين واحد على الأقل بواسطة acme-dns-certbot بنجاح، يمكنك أن تستمر في صدور التأمينات للأسماء الDNS نفسها دون حاجة إلى إضافة سجل آخر للـCNAME. ومع ذلك، إذا كنت ترغب في أخذ تأمين للقطعة الفرعية المختلفة أو لإسم مجموعة جديد بالكامل، سيتم تحديد الإضافة لسجل آخر CNAME للقطعة الفرعية.

على سبيل المثال، يمكنك أن تصدر تأمين تعساء منفصل بدون حاجة إلى المرور بالتحقق مرة أخرى:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

ومع ذلك، إذا كنت تحاول صدور تأمين للقطعة الفرعية، سيتم تعذيبك لإضافة سجل CNAME للقطعة الفرعية:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

هذا سيعرض نتائج مماثلة للإعدادات الأولية التي قمت بها في الخطوة 3:

Output
... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

وبما أنك قادر على استخدام acme-dns-certbot لصدور التأمينات، يستحق أن تنظر أيضًا في عملية التجديد.

وحالما تقريب التأمينات من الانتهاء، يمكن للCertbot تجديدها لك تلقائيًا:

sudo certbot renew

وستتم إجراء تجديد التأمين من البدء إلى النهاية بدون تفاعل مع المستخدم، وسيتذكر جميع خيارات التكوين التي especified في الإعدادات الأولية.

للتحقق من أن هذا النظام يعمل بشكل صحيح قبل أو بعد تاريخ الانتهاء، يمكنك تحريك تجربة جاهزة. سيمحاكم العملية الجديدة بدون أي تغيير فعال في 配置 الخاص بك.

يمكنك تحريك تجربة جاهزة باستخدام أوامر التجديد الاستانداردية renew ، لكن مع ما يلي --dry-run:

sudo certbot renew --dry-run

سينتج عن هذا شيء مماثل لما يلي وسيوفير تأكيد أن عملية التجديد تشتغل بشكل صحيح:

Output
... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

في هذه الخطوة الأخيرة أصدرت مجددًا شهادة ومن ثم قمت بتجربة عملية التجديد الautomatic في Certbot.

الخاتم

قمت في هذا المقال بإعداد Certbot مع acme-dns-certbot لإصدار الشهادات بواسطة التحقق من التعريف التعريفي. هذا يحمل قدرة على استخدام الشهادات التواريخية أيضًا وإدارة ممتلكات كبيرة من الخوادم الويب المختلفة التي قد تقف خلف متوازن تحميل.

أنظر بعينه إلى مجلد acme-dns-certbot لأي تحديثات للscript، لأنه دائمًا من المواصلات بالإصدار الأخر المدعوم.

إذا كنت مهتمًا بالتعلم عن acme-dns-certbot أكثر، قد ترغب في نظرة إلى المساعدة لمشروع acme-dns، وهو الجزء الخارجي من acme-dns-certbot:

يمكن أيضًا توفير برنامج acme-dns بمجال الخاص، وهذا قد يكون مفيدًا إذا كنت تعمل في بيئات محمية أو معقدة.

أو يمكنك بالخيار، فهو يتمحور حول تفسير الأبعاد التقنية للتحقق من الDNS ACME بمرور نظرة إلى المقطع المتعلق من الوثيقة الرسمية RFC التي تبرمج الطريقة التي يعمل فيها العملية:

Source:
https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04