اوبنتوسرورلینوکس

آموزش دریافت گواهینامه Let’s Encrypt با استفاده از اعتبارسنجی DNS و ابزار acme-dns-certbot در اوبونتو 24.04

مقدمه بیشتر گواهینامه‌های 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 در مخازن پیش‌فرض موجود است. ابتدا لیست پکیج‌های خود را به‌روزرسانی کنید:

bash
sudo apt update

سپس پکیج Certbot را نصب کنید:

bash
sudo apt install certbot

پس از اتمام نصب، می‌توانید بررسی کنید که Certbot با موفقیت نصب شده است:

bash
certbot –version

خروجی مشابه زیر خواهد بود:

text
Output
certbot 2.9.0

در این مرحله شما Certbot را نصب کردید. در مرحله بعد، هوک acme-dns-certbot را دانلود و نصب خواهید کرد.


مرحله ۲ — نصب acme-dns-certbot

اکنون که برنامه اصلی Certbot نصب شد، می‌توانید acme-dns-certbot را دانلود و نصب کنید که به Certbot اجازه می‌دهد در حالت اعتبارسنجی DNS کار کند.

ابتدا یک کپی از اسکریپت دانلود کنید:

نکته: به عنوان یک روش ایمن، لطفاً قبل از اجرای آن، مخزن گیت‌هاب و اسکریپت را بررسی کنید. همچنین می‌توانید ابتدا این مخزن را Fork کنید و سپس از اسکریپت acme-dns-auth.py استفاده کنید. این کار لایه اضافی از امنیت را فراهم می‌کند و تضمین می‌کند که اسکریپت تحت کنترل شما باقی بماند.

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

پس از اتمام دانلود، اسکریپت را به عنوان قابل اجرا (Executable) علامت‌گذاری کنید:

bash
chmod +x acme-dns-auth.py

سپس، فایل را با ویرایشگر متن خود باز کرده و خط اول را ویرایش کنید تا مجبور شود از پایتون ۳ استفاده کند:

bash
nano acme-dns-auth.py

به انتهای خط اول یک 3 اضافه کنید:

acme-dns-auth.py

python
#!/usr/bin/env python3
. . .

این کار برای اطمینان از اینکه اسکریپت از جدیدترین نسخه پشتیبانی‌شده پایتون ۳ استفاده می‌کند ضروری است.

پس از اتمام، فایل را ذخیره کرده و ببندید.

در نهایت، اسکریپت را به دایرکتوری Let’s Encrypt مربوط به Certbot منتقل کنید تا Certbot بتواند آن را بارگذاری کند:

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

در این مرحله، هوک acme-dns-certbot را دانلود و نصب کردید. اکنون می‌توانید فرآیند راه‌اندازی را آغاز کنید و به سمت صدور اولین گواهینامه خود حرکت کنید.


مرحله ۳ — راه‌اندازی acme-dns-certbot

برای شروع استفاده از acme-dns-certbot، باید یک فرآیند راه‌اندازی اولیه را تکمیل کنید و حداقل یک گواهینامه صادر کنید.

Certbot را اجرا کنید تا مجبور شود یک گواهینامه با استفاده از اعتبارسنجی DNS صادر کند. این کار اسکریپت acme-dns-certbot را اجرا کرده و فرآیند راه‌اندازی اولیه را فعال می‌کند:

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

شما از آرگومان --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، در نهایت پیامی مشابه زیر به شما نمایش داده می‌شود:

text
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 را به سرویس ACME DNS واگذار می‌کند، که به acme-dns-certbot اجازه می‌دهد رکوردهای DNS مورد نیاز برای اعتبارسنجی درخواست گواهینامه را تنظیم کند.

اگر از پارمین کلود (Parmin Cloud) به عنوان ارائه‌دهنده DNS خود استفاده می‌کنید، می‌توانید رکورد DNS را در پنل مدیریت خود تنظیم کنید:

(تصویری از پنل مدیریت DNS پارمین کلود که نمونه‌ای از یک رکورد CNAME برای ACME DNS را نشان می‌دهد)

توصیه می‌شود برای اطمینان از انتشار سریع تغییرات اعمال شده در رکورد، مقدار TTL (Time-to-Live) را روی حدود ۳۰۰ ثانیه تنظیم کنید.

پس از پیکربندی رکورد DNS، به Certbot برگردید و کلید ENTER را فشار دهید تا درخواست گواهینامه اعتبارسنجی شده و فرآیند صدور تکمیل شود.

این کار چند ثانیه طول می‌کشد و سپس پیامی را مشاهده خواهید کرد که تایید می‌کند گواهینامه صادر شده است:

text
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 مورد نیاز را تنظیم کردید و با موفقیت یک گواهینامه صادر کردید. در مرحله بعد، تمدید خودکار گواهینامه خود را تنظیم خواهید کرد.


مرحله ۴ — استفاده از acme-dns-certbot

در این مرحله نهایی، از acme-dns-certbot برای صدور گواهینامه‌های بیشتر و تمدید گواهینامه‌های موجود استفاده خواهید کرد.

اول از همه، اکنون که با موفقیت حداقل یک گواهینامه با استفاده از acme-dns-certbot صادر کرده‌اید، می‌توانید به صدور گواهینامه برای همان نام‌های DNS بدون نیاز به اضافه کردن رکورد CNAME دیگری ادامه دهید. با این حال، اگر بخواهید گواهینامه‌ای برای یک ساب‌دامین متفاوت یا یک نام دامنه کاملاً جدید دریافت کنید، از شما خواسته می‌شود رکورد CNAME دیگری اضافه کنید.

به عنوان مثال، می‌توانید بدون نیاز به انجام مجدد اعتبارسنجی، یک گواهینامه وایلدکارت مستقل دیگر صادر کنید:

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

اما اگر بخواهید گواهینامه‌ای برای یک ساب‌دامین صادر کنید، از شما خواسته می‌شود رکورد CNAME را برای آن ساب‌دامین اضافه کنید:

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

این کار خروجی مشابه راه‌اندازی اولیه‌ای که در مرحله ۳ انجام دادید نشان می‌دهد:

text
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 برای صدور گواهینامه استفاده کنید، ارزش دارد که فرآیند تمدید (Renewal) را نیز در نظر بگیرید.

هنگامی که گواهینامه‌های شما نزدیک به انقضا می‌شوند، Certbot می‌تواند به طور خودکار آن‌ها را برای شما تمدید کند:

bash
sudo certbot renew

فرآیند تمدید می‌تواند از ابتدا تا انتها بدون هیچ تعاملی با کاربر اجرا شود و تمام گزینه‌های پیکربندی که در طول راه‌اندازی اولیه مشخص کرده‌اید را به خاطر می‌سپارد.

برای تست اینکه این فرآیند بدون نیاز به انتظار تا نزدیک تاریخ انقضا کار می‌کند، می‌توانید یک “Dry Run” (اجرای آزمایشی) اجرا کنید. این کار فرآیند تمدید را بدون ایجاد هیچ تغییر واقعی در پیکربندی شما شبیه‌سازی می‌کند.

می‌توانید با استفاده از دستور استاندارد تمدید، اما با آرگومان --dry-run، یک اجرای آزمایشی را فعال کنید:

bash
sudo certbot renew –dry-run

خروجی مشابه زیر خواهد بود که به شما اطمینان می‌دهد فرآیند تمدید به درستی کار می‌کند:

text
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

در این مرحله نهایی، شما یک گواهینامه دیگر صادر کردید و سپس فرآیند تمدید خودکار را در 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 بررسی کنید.

از همراهی شما با پارمین کلود سپاسگزاریم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا