یک گواهی وایلدکارد در واقع، یک گواهی SSL است که میتواند امنیت هر تعداد از سابدامین یا زیردامنهها را با یک گواهی پوشش دهد. کاربرد این نوع گواهیها در زمانی است که چند سابدامین در اختیار داشته باشید و به دلایلی، نخواهید که برا هر کدام از آنها تنظیمات گواهی SSL را به صورت جداگانه انجام دهید.
Let’s Encrypt یک مرجع گواهی SSL است گواهیها را به صورت رایگان از طریق یک API خودکار در اختیار قرار میدهد. در این آموزش به تولید گواهی وایلدکار Let’s Encrypt با طی مراحل زیر خواهیم پرداخت:
- اطمینان از تنظیمات صحیح DNS
- نصب پلاگینهای موردنیاز Certbot برای تکمیل چالشهای DNS
- تنظیم Certbot برای دسترسی به پروایدر DNS
- استخراج گواهیها
این اطلاعات برای هر نوع توزیع لینوکس و هر نرمافزار سروری مفید خواهند بود. با این وجود، ممکن است در برخی موارد به برخی راهنماهای ویژه هر توزیع یا نرمافزار احتیاج پیدا کنید.
پیشنیازها
در ادامه این مطلب، فرض بر این است که شما موارد زیر را در اختیار دارید.
- نصب نسخه 22.0 یا بالاتر از ابزار Certbot. میتوانید به مطالب قبلی ما در این زمینه مراجعه کنید و اطلاعات بیشتری کسب کنید.
- یک نام دامین و یک پروایدر DNS که توسط Certbot پشتیبانی شود. در اینجا میتوانید لیست از پروایدرهای پشتیبانیشونده توسط پلاگین را مشاهده کنید.
با تنظیم و آزمایش رکوردهای DNS کار را آغاز میکنیم.
گام ۱) تنظیم وایلدکارد DNS
قبل از اینکه گواهی وایلدکارد SSL خود را استخراج کنیم، باید ابتدا مطمئن شویم که سرور ما بهخوبی به درخواستهای سابدامینهای چندگانه پاسخ میدهد. این موضوع با تنظیم یک رکورد وایلدکارد DNS محقق خواهد شد.
*.example.com. 3600 IN A 203.0.113.1
علامت وایلدکارد * به عنوان ورودی برای هر عنوان هاستی محسوب میشود. این رکورد نمونه DNS با آدرسهای one.example.com و two.example.com مطابقت خواهد داشت. بنابراین، مطابقتی با آدرسهای نمونه example.com یا one.two.example.com نخواهد بود؛ چرا که وایلدکارد * تنها به یک سطح از عناوین هاست اختصاص یافته است.
به علاوه، یک رکورد وایلدکارد DNS تنها میتواند یک کاراکتر وایلدکارد داشته باشد. بر این اساس، اجازه استفاده از مواردی مانند *.*.example.com را نخواهیم داشت.
در همین حال، برای وارد کردن موارد صحیح DNS میبایست به راهنمای پروایدر خودتان مراجعه کنید. احتمالاً نیاز به اضافهکردن رکورد وایلدکارد A یا CNAME قبل از ادامه کار خواهید داشت.
برای تست عملکرد وایلدکار DNS میتوانید از فرمان host با الگوی زیر استفاده کنید.
host one.example.com
حتماً دقت کنید که عنوان دامین یا هاست خود را در فرمان بالا جایگزین کنید. همچنین به خاطر داشته باشید که گاهی ممکن است انتشار رکوردهای DNS در سیستم به زمان نیاز داشته باشد. در صورتی که پس از اضافهکردن رکورد DNS، با پیغام خطا روبرو شدید، چند دقیقه صبر کنید و دوباره امتحان کنید.
وقتی عنوان هاست ورودی مورد قبول واقع شد، با خروجیای شبیه به زیر روبرو میشوید.
one.example.com has address 203.0.113.1
در غیر این صورت، یک پیغام خطای NXDOMAIN خواهید دید.
Host one.example.com not found: 3(NXDOMAIN)
وقتی از عملکرد سابدامینها در سرور اطمینان پیدا کردید، میتوانید به مرحله بعد بروید. جایی به تنظیم Certbot برای ارتباط با پروایدر DNS خواهیم پرداخت.
گام ۲) نصب پلاگین Certbot DNS
قبل از تولید گواهیها، Let’s Encrypt بررسیهای لازم را برای اطمینان از کنترل «هاستهای مورد درخواست» انجام میدهد. در مورد گواهی وایلدکارد، باید ثابت کنیم که کنترل کل دامین را در اختیار داریم. این کار از طریق پاسخ به چالش مبتنی بر DNS صورت میگیرد. جایی که Certbot با ایجاد یک رکورد DNS ویژه در دامین هدف، به این چالش پاسخ میدهد. در نتیجه، سرورهای Let’s Encrypt این رکورد را قبل از تولید گواهی، تأیید میکنند.
به منظور اتصال به پروایدر DND، ابزار Certbot به یک پلاگین احتیاج دارد. در لیست پلاگینهای DNS برای Certbot میتوانید پلاگین مناسب برای پروایدر خود را پیدا کنید. قالب فرمان نصب به صورت زیر خواهد بود.
sudo apt install python3-certbot-dns-digitalocean
در لینوکس CentOS و سایر توزیعهای مبتنی بر RPM، فرمان نصب به صورت dnf است.
dnf install python3-certbot-dns-digitalocean
و یا با استفاده از yum:
yum install python3-certbot-dns-digitalocean
شاید هم بخواهید یک منابع بستههای اضافی را در این توزیعها نصب کنید تا به بستههای پلاگین Certbot دسترسی داشته باشید.
برای اطمینان از صحت نصب پلاگین، میتوانید از لیست پلاگینهای کنونی Certbot خروجی بگیرید.
certbot plugins
خروجی
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * dns-digitalocean Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean for DNS). Interfaces: IAuthenticator, IPlugin Entry point: dns-digitalocean = certbot_dns_digitalocean.dns_digitalocean:Authenticator * standalone Description: Spin up a temporary webserver Interfaces: IAuthenticator, IPlugin Entry point: standalone = certbot.plugins.standalone:Authenticator * webroot Description: Place files in webroot directory Interfaces: IAuthenticator, IPlugin Entry point: webroot = certbot.plugins.webroot:Authenticator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
در خروجی بالا، پلاگین dns-digitalocean در ابتدای لیست و سپس پلاگینهای standalone و webroot آمدهاند.
وقتی از نصب پلاگین موردنظر مطمئن شدیم، نوبت به مرحله بعدی و تنظیم آن میرسد.
گام ۳) تنظیم پلاگین Certbot
Certbot نیاز به ارتباط با پروایدر DNS و ایجاد رکوردهای DNS از طرف شما دارد. بنابراین، باید مجوّز لازم برای این کار را داشته باشد. این به معنای دریافت یک توکن API یا دیگر اطلاعات تأییدیه از پروایدر DNS و قرار دادن آن در یک فایل اعتباری امنیتی به منظور استفاده Certbot است.
هر کدام از پروایدرها دارای فرآیند مخصوص تأییدیه مخصوص به خود هستند و بر این اساس، حتماً میبایستی راهنمای مربوط به پلاگین Certbot DNS خود را مطالعه کنید. برای مثال در اینجا، همچنان از پلاگین dns-digitalocean استفاده میکنیم و اعتبار امنیتی خود را در فایل ~/certbot-creds.ini ذخیره میکنیم.
این فایل را با کمک ویرایشگر متنی nano ایجاد میکنیم.
nano ~/certbot-creds.ini
در نتیجه، یک فایل متنی خالی برای ما باز میشود. در اینجا باید بر اساس دستورالعملهای پروایدر، اطلاعات موردنیاز را وارد نمایید. به عنوان نمونه، در اینجا به یک توکن API احتیاج داریم و بنابراین، فایل ظاهری شبیه به زیر خواهد داشت.
dns_digitalocean_token = 235dea9d8856f5b0df87af5edc7b4491a92745ef617073f3ed8820b5a10c80d2
حتماً توکن نمونه را با اطلاعات خودتان جایگزین کنید.
فایل را ذخیره کرده و از آن خارج شوید. در صورتی که از nano استفاده میکنید، میتوانید ابتدا کلیدهای CTRL+O، ENTER و سپس CTRL+X را فشار دهید.
پس از ایجاد فایل، باید مجوّزهای آن را محدود کنید تا راز شما پیش کسی فاش نشود. فرمان chmod زیر باعث میشود که تنها کاربری شما به خواندن و نوشتن این فایل دسترسی داشته باشد.
chmod 600 ~/certbot-creds.ini
پس از تنظیم فایل اعتبار امنیتی، برای درخواست گواهی وایلدکارد آماده خواهید بود.
گام ۴) استخراج گواهی
در این مقطع، استخراج گواهی وایلدکارد Let’s Encrypt همانند گواهیهای «معمولی» خواهد بود. تغییرات عمده این فرآیند شامل مشخص کردن چالش مبتنی بر DNS و ارجاع به فایل اعتبار امنیتی DNS خواهند بود. به علاوه، از یک دامین وایلدکارد با گزینه -d استفاده خواهیم کرد.
sudo certbot certonly \ --dns-digitalocean \ --dns-digitalocean-credentials ~/certbot-creds.ini \ -d '*.example.com'
به خاطر داشته باشید که امکان استفاده از پلاگینهای –nginx یا –apache در اینجا وجود ندارد و نمیتوانید این سرورها را به صورت اتوماتیک با گواهی وایلدکارد تنظیم کنید. به جای آن، از فرمان certonly استفاده میکنیم که صرفاً گواهی را دریافت خواهد کرد.
با اجرای فرمان بالا، ممکن است با برخی پرسشها برای جوابدادن روبرو شوید. این در صورتی است که برای اولین بار از Certbot استفاده کنید. پس از جوابدادن به این سؤالها، Cerbot چالش را انجام میدهد، سرورهای Let’s Encrypt آن را تأیید میکنند و گواهی وایلدکارد جدید شما دانلود و در مسیر /etc/letsencrypt/ ذخیره میگردد. در نتیجه، باید خروجیای مشابه زیر مشاهده کنید.
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2021-09-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
در نتیجه، یک گواهی وایلدکارد SSL برای شما تولید شده است. گام بعدی شما، تنظیم اپلیکیشن سرور برای استفاده از آن خواهد بود.
جمعبندی
در این آموزش، ابزار Certbot را تنظیم کردیم و و نحوه دریافت گواهی SSL وایلدکارد را از مرجع گواهی Let’s Encrypt نشان دادیم. حالا برای تنظیم نرمافزار سرور به منظور استفاده از این گواهی امنیت ارتباطی آماده خواهید بود.