
مقدمه بیشتر گواهینامههای Let’s Encrypt با استفاده از اعتبارسنجی HTTP صادر میشوند که امکان نصب آسان گواهینامهها را روی یک سرور واحد فراهم میکند. با این حال، اعتبارسنجی HTTP همیشه برای صدور گواهینامههایی که قرار است روی وبسایتهای متعادلکننده بار (Load Balancer) استفاده شوند مناسب نیست و همچنین نمیتوان از آن برای صدور گواهینامههای وایلدکارت (Wildcard) استفاده کرد.
اعتبارسنجی DNS به جای سرو کردن محتوا از طریق HTTP، از رکوردهای DNS برای بررسی درخواستهای صدور گواهینامه استفاده میکند. این بدان معناست که گواهینامهها میتوانند به طور همزمان برای یک خوشه از وبسرورها که در پشت یک Load Balancer قرار دارند، یا برای سیستمی که به طور مستقیم از طریق اینترنت قابل دسترسی نیست، صادر شوند. گواهینامههای وایلدکارت نیز با استفاده از اعتبارسنجی DNS پشتیبانی میشوند.
ابزار acme-dns-certbot برای اتصال Certbot به یک سرور DNS شخص ثالث (Third-party) استفاده میشود، جایی که رکوردهای اعتبارسنجی گواهینامه هنگام درخواست، به صورت خودکار از طریق API تنظیم میشوند. مزیت این روش این است که نیازی ندارید Certbot را مستقیماً به حساب ارائهدهنده DNS خود متصل کنید و همچنین نیازی نیست دسترسی نامحدود به کل پیکربندی DNS خود را به آن بدهید، که این امر از نظر امنیتی بسیار مفید است.
از زونهای DNS واگذارشده (Delegated DNS Zones) برای تغییر مسیر جستجوهای مربوط به رکوردهای بررسی گواهینامه به سرویس DNS شخص ثالث استفاده میشود. بنابراین، پس از تکمیل راهاندازی اولیه، میتوانید به هر تعداد که خواستید گواهینامه درخواست کنید بدون اینکه نیاز به انجام هیچ اعتبارسنجی دستی باشد.
یکی دیگر از مزایای کلیدی acme-dns-certbot این است که میتوان از آن برای صدور گواهینامه برای سرورهای انفرادی که ممکن است در پشت یک Load Balancer قرار داشته باشند یا از طریق HTTP به طور مستقیم قابل دسترسی نیستند، استفاده کرد. در این موارد، نمیتوان از اعتبارسنجی سنتی گواهینامه HTTP استفاده کرد، مگر اینکه فایلهای اعتبارسنجی را روی تکتک سرورها تنظیم کنید. ابزار acme-dns-certbot همچنین در صورتی که بخواهید برای سروری که از طریق اینترنت قابل دسترسی نیست (مانند یک سیستم داخلی یا محیط Staging) گواهینامه صادر کنید، بسیار کاربردی است.
در این آموزش، شما از هوک (Hook) acme-dns-certbot برای Certbot استفاده میکنید تا یک گواهینامه Let’s Encrypt را با استفاده از اعتبارسنجی DNS صادر کنید.
پیشنیازها برای تکمیل این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 24.04 که طبق راهنمای راهاندازی اولیه سرور پیکربندی شده باشد (شامل یک کاربر غیر روت با دسترسی sudo).
- یک نام دامنه که بتوانید برای آن گواهینامه TLS دریافت کنید، از جمله توانایی افزودن رکوردهای DNS. در این مثال، ما از
your-domainوsubdomain.your-domainو همچنین*.your-domainبرای گواهینامه وایلدکارت استفاده خواهیم کرد. با این حال، این موارد میتوانند برای دامنهها، سابدامینها یا وایلدکارتهای دیگر نیز تنظیم شوند.
پس از آماده شدن این موارد، به عنوان کاربر غیر روت وارد سرور خود شوید تا شروع کنید.
مرحله ۱ — نصب Certbot
در این مرحله، Certbot را نصب خواهید کرد؛ برنامهای که برای صدور و مدیریت گواهینامههای Let’s Encrypt استفاده میشود.
در اوبونتو 24.04، پکیج Certbot در مخازن پیشفرض موجود است. ابتدا لیست پکیجهای خود را بهروزرسانی کنید:
سپس پکیج Certbot را نصب کنید:
پس از اتمام نصب، میتوانید بررسی کنید که Certbot با موفقیت نصب شده است:
خروجی مشابه زیر خواهد بود:
در این مرحله شما Certbot را نصب کردید. در مرحله بعد، هوک acme-dns-certbot را دانلود و نصب خواهید کرد.
مرحله ۲ — نصب acme-dns-certbot
اکنون که برنامه اصلی Certbot نصب شد، میتوانید acme-dns-certbot را دانلود و نصب کنید که به Certbot اجازه میدهد در حالت اعتبارسنجی DNS کار کند.
ابتدا یک کپی از اسکریپت دانلود کنید:
نکته: به عنوان یک روش ایمن، لطفاً قبل از اجرای آن، مخزن گیتهاب و اسکریپت را بررسی کنید. همچنین میتوانید ابتدا این مخزن را Fork کنید و سپس از اسکریپت acme-dns-auth.py استفاده کنید. این کار لایه اضافی از امنیت را فراهم میکند و تضمین میکند که اسکریپت تحت کنترل شما باقی بماند.
پس از اتمام دانلود، اسکریپت را به عنوان قابل اجرا (Executable) علامتگذاری کنید:
سپس، فایل را با ویرایشگر متن خود باز کرده و خط اول را ویرایش کنید تا مجبور شود از پایتون ۳ استفاده کند:
به انتهای خط اول یک 3 اضافه کنید:
acme-dns-auth.py
این کار برای اطمینان از اینکه اسکریپت از جدیدترین نسخه پشتیبانیشده پایتون ۳ استفاده میکند ضروری است.
پس از اتمام، فایل را ذخیره کرده و ببندید.
در نهایت، اسکریپت را به دایرکتوری Let’s Encrypt مربوط به Certbot منتقل کنید تا Certbot بتواند آن را بارگذاری کند:
در این مرحله، هوک acme-dns-certbot را دانلود و نصب کردید. اکنون میتوانید فرآیند راهاندازی را آغاز کنید و به سمت صدور اولین گواهینامه خود حرکت کنید.
مرحله ۳ — راهاندازی acme-dns-certbot
برای شروع استفاده از acme-dns-certbot، باید یک فرآیند راهاندازی اولیه را تکمیل کنید و حداقل یک گواهینامه صادر کنید.
Certbot را اجرا کنید تا مجبور شود یک گواهینامه با استفاده از اعتبارسنجی DNS صادر کند. این کار اسکریپت acme-dns-certbot را اجرا کرده و فرآیند راهاندازی اولیه را فعال میکند:
شما از آرگومان --manual برای غیرفعال کردن تمام قابلیتهای یکپارچهسازی خودکار Certbot استفاده میکنید. در این حالت، شما فقط در حال صدور یک گواهینامه خام هستید، نه نصب خودکار آن روی یک سرویس.
شما Certbot را از طریق آرگومان --manual-auth-hook پیکربندی میکنید تا از هوک acme-dns-certbot استفاده کند. آرگومان --preferred-challenges را اجرا میکنید تا Certbot به اعتبارسنجی DNS اولویت بدهد.
همچنین باید به Certbot بگویید که قبل از تلاش برای اعتبارسنجی گواهینامه مکث کند، که این کار را با آرگومان --debug-challenges انجام میدهید. این کار به شما اجازه میدهد رکوردهای CNAME مورد نیاز توسط acme-dns-certbot را تنظیم کنید. بدون آرگومان --debug-challenges، Certbot مکث نمیکرد و شما زمانی برای انجام تغییرات DNS مورد نظر نداشتید.
فراموش نکنید که هر یک از نامهای دامنهای که میخواهید استفاده کنید را با آرگومانهای -d جایگزین کنید. اگر میخواهید یک گواهینامه وایلدکارت صادر کنید، حتماً علامت ستاره (*) را با یک بکاسلش (\) فرار (Escape) دهید.
پس از طی مراحل استاندارد Certbot، در نهایت پیامی مشابه زیر به شما نمایش داده میشود:
شما باید رکورد CNAME مورد نیاز را به پیکربندی DNS دامنه خود اضافه کنید. این کار کنترل سابدامین _acme-challenge را به سرویس ACME DNS واگذار میکند، که به acme-dns-certbot اجازه میدهد رکوردهای DNS مورد نیاز برای اعتبارسنجی درخواست گواهینامه را تنظیم کند.
اگر از پارمین کلود (Parmin Cloud) به عنوان ارائهدهنده DNS خود استفاده میکنید، میتوانید رکورد DNS را در پنل مدیریت خود تنظیم کنید:
(تصویری از پنل مدیریت DNS پارمین کلود که نمونهای از یک رکورد CNAME برای ACME DNS را نشان میدهد)
توصیه میشود برای اطمینان از انتشار سریع تغییرات اعمال شده در رکورد، مقدار TTL (Time-to-Live) را روی حدود ۳۰۰ ثانیه تنظیم کنید.
پس از پیکربندی رکورد DNS، به Certbot برگردید و کلید ENTER را فشار دهید تا درخواست گواهینامه اعتبارسنجی شده و فرآیند صدور تکمیل شود.
این کار چند ثانیه طول میکشد و سپس پیامی را مشاهده خواهید کرد که تایید میکند گواهینامه صادر شده است:
شما برای اولین بار acme-dns-certbot را اجرا کردید، رکوردهای DNS مورد نیاز را تنظیم کردید و با موفقیت یک گواهینامه صادر کردید. در مرحله بعد، تمدید خودکار گواهینامه خود را تنظیم خواهید کرد.
مرحله ۴ — استفاده از acme-dns-certbot
در این مرحله نهایی، از acme-dns-certbot برای صدور گواهینامههای بیشتر و تمدید گواهینامههای موجود استفاده خواهید کرد.
اول از همه، اکنون که با موفقیت حداقل یک گواهینامه با استفاده از acme-dns-certbot صادر کردهاید، میتوانید به صدور گواهینامه برای همان نامهای DNS بدون نیاز به اضافه کردن رکورد CNAME دیگری ادامه دهید. با این حال، اگر بخواهید گواهینامهای برای یک سابدامین متفاوت یا یک نام دامنه کاملاً جدید دریافت کنید، از شما خواسته میشود رکورد CNAME دیگری اضافه کنید.
به عنوان مثال، میتوانید بدون نیاز به انجام مجدد اعتبارسنجی، یک گواهینامه وایلدکارت مستقل دیگر صادر کنید:
اما اگر بخواهید گواهینامهای برای یک سابدامین صادر کنید، از شما خواسته میشود رکورد CNAME را برای آن سابدامین اضافه کنید:
این کار خروجی مشابه راهاندازی اولیهای که در مرحله ۳ انجام دادید نشان میدهد:
اکنون که میتوانید از acme-dns-certbot برای صدور گواهینامه استفاده کنید، ارزش دارد که فرآیند تمدید (Renewal) را نیز در نظر بگیرید.
هنگامی که گواهینامههای شما نزدیک به انقضا میشوند، Certbot میتواند به طور خودکار آنها را برای شما تمدید کند:
فرآیند تمدید میتواند از ابتدا تا انتها بدون هیچ تعاملی با کاربر اجرا شود و تمام گزینههای پیکربندی که در طول راهاندازی اولیه مشخص کردهاید را به خاطر میسپارد.
برای تست اینکه این فرآیند بدون نیاز به انتظار تا نزدیک تاریخ انقضا کار میکند، میتوانید یک “Dry Run” (اجرای آزمایشی) اجرا کنید. این کار فرآیند تمدید را بدون ایجاد هیچ تغییر واقعی در پیکربندی شما شبیهسازی میکند.
میتوانید با استفاده از دستور استاندارد تمدید، اما با آرگومان --dry-run، یک اجرای آزمایشی را فعال کنید:
خروجی مشابه زیر خواهد بود که به شما اطمینان میدهد فرآیند تمدید به درستی کار میکند:
در این مرحله نهایی، شما یک گواهینامه دیگر صادر کردید و سپس فرآیند تمدید خودکار را در Certbot تست کردید.
نتیجهگیری
در این مقاله، شما Certbot را به همراه acme-dns-certbot راهاندازی کردید تا گواهینامههایی را با استفاده از اعتبارسنجی DNS صادر کنید. این کار امکان استفاده از گواهینامههای وایلدکارت و همچنین مدیریت شبکهای بزرگ از وبسرورهای مجزا که ممکن است در پشت یک Load Balancer قرار داشته باشند را فراهم میکند.
حتماً مخزن acme-dns-certbot را برای بهروزرسانیهای اسکریپت زیر نظر داشته باشید، زیرا همیشه توصیه میشود از جدیدترین نسخه پشتیبانیشده استفاده کنید.
اگر به یادگیری بیشتر درباره acme-dns-certbot علاقهمند هستید، ممکن است بخواهید مستندات پروژه acme-dns را بررسی کنید، که عنصر سمت سرور acme-dns-certbot است:
- acme-dns در GitHub
نرمافزار acme-dns همچنین میتواند به صورت Self-hosted (میزبانی شخصی) باشد، که در صورت فعالیت در محیطهای با امنیت بالا یا پیچیده ممکن است مفید باشد.
همچنین میتوانید جزئیات فنی اعتبارسنجی ACME DNS را با مرور بخش مربوطه در سند رسمی RFC بررسی کنید.




