بازگشت به مجله
گواهی SSLتیم فنی هایوهاست۱۱ دقیقه مطالعه

صدور گواهی وایلدکارت با اعتبارسنجی DNS

تنها راه گرفتن گواهی وایلدکارت، اعتبارسنجی از طریق DNS است. از روش دستی تا خودکارسازی کامل با افزونه ها و acme-dns.

اعتبارسنجی DNS

وقتی تعداد زیردامنه ها زیاد میشود، صادر کردن گواهی جداگانه برای هر کدام خسته کننده و شکننده است. گواهی وایلدکارت این مشکل را حل میکند اما Let's Encrypt آن را فقط از طریق اعتبارسنجی DNS صادر میکند. این روش برای سرورهایی که پورت ۸۰ عمومی ندارند یا پشت شبکه داخلی هستند هم تنها گزینه است.

1

چرا گاهی مجبورید سراغ DNS بروید

در اعتبارسنجی از راه HTTP، سرور Let's Encrypt باید بتواند از اینترنت به پورت ۸۰ شما وصل شود. در اعتبارسنجی DNS چنین نیازی نیست؛ کافی است یک رکورد TXT مشخص را در دامنه خود بسازید. همین تفاوت باعث میشود این روش در چند سناریو تنها راه ممکن باشد.

مراحل اعتبارسنجی DNS شامل ثبت رکورد TXT و بررسی آن توسط Let's Encrypt
در اعتبارسنجی DNS هیچ پورتی روی سرور شما باز نمیشود.
  • گواهی وایلدکارت که فقط با این روش صادر میشود.
  • سرورهای داخلی که از اینترنت قابل دسترسی نیستند.
  • سرویس هایی که پشت فایروال سازمانی یا شبکه محدود قرار دارند.
  • مواقعی که پورت ۸۰ به هر دلیلی قابل باز کردن نیست.
2

روش دستی و محدودیت جدی آن

ساده ترین شکل کار این است که Certbot یک مقدار به شما بدهد، شما آن را به عنوان رکورد TXT ثبت کنید و بعد ادامه دهید. برای یک بار امتحان کردن خوب است، اما یک مشکل اساسی دارد: هر نود روز باید همین کار را دستی تکرار کنید.

به همین دلیل روش دستی را فقط برای آزمایش پیشنهاد میکنیم. برای سرویس واقعی حتما یکی از دو روش بعدی را انتخاب کنید.

صدور دستی برای وایلدکارت و دامنه اصلی
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com
بررسی انتشار رکورد قبل از ادامه دادن
dig +short TXT _acme-challenge.example.com @1.1.1.1
3

نکته ای که زیاد فراموش میشود

گواهی وایلدکارت خود دامنه اصلی را پوشش نمیدهد. یعنی گواهی صادر شده برای example.com.* روی blog.example.com کار میکند اما روی example.com خالی کار نمیکند. اگر هر دو را لازم دارید، باید هر دو را در دستور صدور بیاورید.

همچنین وایلدکارت فقط یک سطح را پوشش میدهد. برای a.b.example.com باید وایلدکارت جداگانه b.example.com.* بگیرید.

4

روش اول: افزونه اختصاصی ارائه دهنده DNS

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

فایل اعتبارنامه حاوی کلید API است، پس دسترسی آن را حتما محدود کنید. اگر این فایل قابل خواندن برای همه باشد، عملا کنترل DNS دامنه را واگذار کرده اید.

نمونه برای کلادفلر
sudo apt install python3-certbot-dns-cloudflare
ساخت فایل اعتبارنامه و محدود کردن دسترسی
sudo mkdir -p /root/.secrets
sudo nano /root/.secrets/cloudflare.ini
sudo chmod 600 /root/.secrets/cloudflare.ini
صدور گواهی
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini --dns-cloudflare-propagation-seconds 60 -d "*.example.com" -d example.com
5

روش دوم: acme-dns برای وقتی افزونه وجود ندارد

بسیاری از ارائه دهندگان DNS، به خصوص سرویس های محلی، افزونه رسمی در Certbot ندارند. راه حل هوشمندانه acme-dns است: به جای اینکه Certbot به DNS اصلی شما دسترسی داشته باشد، فقط رکورد acme-challenge_ را با یک CNAME به یک سرویس جداگانه واگذار میکنید.

مزیت امنیتی این روش قابل توجه است. کلید API دامنه اصلی شما هیچ جا ذخیره نمیشود و اگر سرور گواهی به خطر بیفتد، مهاجم فقط به همان رکورد اعتبارسنجی دسترسی دارد نه کل دامنه.

یک نکته عملی: اسکریپت اصلی acme-dns-certbot سال ها پیش برای پایتون ۲ نوشته شده بود و روی اوبونتو و دبیان امروزی که پایتون ۲ ندارند اجرا نمیشود. حتما نسخه سازگار با پایتون ۳ را بردارید یا خط اول اسکریپت را به مفسر پایتون ۳ تغییر دهید.

  • رکورد CNAME را فقط یک بار میسازید و بعد از آن تمدیدها خودکار است.
  • اسکریپت در اولین اجرا مقدار CNAME را چاپ میکند؛ همان را در DNS ثبت کنید.
  • قبل از ادامه دادن، انتشار رکورد CNAME را با dig بررسی کنید.
6

تمدید و آزمایش نهایی

بعد از اینکه روش خودکار را راه انداختید، حتما تمدید را شبیه سازی کنید. اگر این آزمایش بدون خطا رد شد، یعنی نود روز بعد هم بدون دخالت شما کار خواهد کرد.

اگر از روش دستی استفاده کرده اید، این آزمایش شکست میخورد و این دقیقا همان چیزی است که نشان میدهد چرا روش دستی برای سرویس واقعی مناسب نیست.

شبیه سازی تمدید
sudo certbot renew --dry-run
مشاهده گواهی های نصب شده و تاریخ انقضا
sudo certbot certificates

پرسش های پرتکرار

چرا برای گواهی وایلدکارت حتما باید از اعتبارسنجی DNS استفاده کرد؟

سرویس Lets Encrypt گواهی وایلدکارت را فقط از طریق اعتبارسنجی DNS صادر میکند و روش مبتنی بر HTTP برای آن پذیرفته نیست.

آیا گواهی وایلدکارت خود دامنه اصلی را هم پوشش میدهد؟

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

اگر ارائه دهنده DNS من افزونه Certbot ندارد چه کنم؟

میتوانید با acme-dns رکورد اعتبارسنجی را با یک CNAME به سرویس جداگانه واگذار کنید. اینطور کلید API دامنه اصلی شما روی سرور ذخیره نمیشود.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه