گواهی های SSL وایلدکارد Let’s Encrypt با استفاده از اعتبارسنجی کلودفلیر روی CentOS 7
Let’s Encrypt یک مرجع گواهی (CA) است که گواهیهای امنیتی رایگانی برای رمزنگاری امنیت لایه انتقال (TLS) ارائه میدهد. این بنیاد یک کلاینت نرمافزاری به نام Certbot دارد که فرایند ایجاد، تأیید، امضا، نصب و تجدید گواهیها را تسهیل میکند.
Let’s Encrypt اینک از گواهیهای وایلدکارد (Wildcard) نیز پشتیبانی میکند. با استفاده از این نوع گواهیها میتوانید همه زیردامنههای یک دامنه را تنها با یک گواهی به حالت امن دربیاورید. این وضعیت در صورتی که بخواهید از چندین سرویس مانند رابط وب، API ها و دیگر سایتها با استفاده از یک سرور منفرد میزبانی کنید، مفید خواهد بود.
برای به دست آوردن یک گواهی وایلدکارد از Let’s Encrypt باید از یکی از افزونههای DNS Certbot استفاده کنید که شامل موارد زیر است:
- certbot-dns-cloudflare
- certbot-dns-route53
- certbot-dns-google
- certbot-dns-digitalocean
افزونهای که انتخاب میکنید به سرویسهایی که رکوردهای DNS شما میزبانی میکنند بستگی دارد. در این راهنما یک گواهی وایلدکارد برای دامنه خود با استفاده از اعتبارسنجی CloudFlare تنظیم میکنیم. این کار به کمک Certbot و بر روی یک سیستم لینوکس سنتوس 7 صورت خواهد گرفت. سپس گواهی را طوری پیکربندی میکنیم که هر زمان منقضی شد، به طور خودکار تجدید شود.
پیشنیازها
برای تکمیل کردن این راهنما باید موارد زیر را داشته باشید:
- یک سرور CentOS 7 که میتوانید به کمک این آموزش فرادرس آن را راهاندازی کنید. این سرور باید یک کاربر غیر root با مجوز دسترسی sudo و یک فایروال داشته باشد.
- ما به یک نام دامنه کاملاً ثبت شده هم نیاز داریم. شما میتوانید نام دامنه را به طور رایگان از Freenom یا از هر یکی از شرکتهای دیگر ثبت دامنه تهیه کنید.
- به یک حساب Cloudflare هم نیاز داریم.
- یک رکورد DNS برای دامنه خود در DNS کلودفلیر به همراه مجموعه زیردامنهها تنظیم میکنیم. میتوانید از راهنمای کلودفلیر در مورد راهاندازی وبسایت برای پیکربندی این وضعیت استفاده کنید.
مرحله 1: نصب Certbot
بسته Certbot به طور پیشفرض در نرمافزار مدیریت بسته CentOS وجود ندارد. باید ریپازیتوری EPEL را فعال کنید تا بتوانید certbot و افزونههای آن را نصب کنید. برای افزودن ریپازیتوری EPEL به CentOS 7 دستور زیر را اجرا کنید:
sudo yum install -y epel-release
زمانی که نصب پایان یافت، میتوانید certbot را نصب کنید:
sudo yum install -y certbot
سپس افزونه کلودفلیر را برای سپس افزونه کلودفلیر را برای certbot نصب کنید:
sudo yum install -y python2-cloudflare python2-certbot-dns-cloudflare
اگر از سرویس DNS دیگری استفاده میکنید، میتوانید افزونه مربوطه را با استفاده از دستور yum search بیابید:
yum search python2-certbot-dns
اینک آماده هستیم که گواهی سرور خود را به دست آوریم. ابتدا باید API کلودفلیر را دریافت کنیم.
مرحله 2: دریافت API کلودفلیر
برای این که certbot بتواند گواهیهای امنیتی وایلدکارد را به طور خودکار تجدید کند، باید اطلاعات ورود به حساب کلودفلیر و کلید API را در اختیار آن قرار دهید. بدین منظور وارد حساب کلودفلیر خود شوید و به صفحه پروفایل بروید. در خط Global API Key بر روی دکمه View کلیک کنید.
به دلایل امنیتی از شما خواسته میشود که رمز حساب کلودفلیر خود را مجدداً وارد کنید. آن را وارد کرده و CAPTCHA را اعتبار سنجی نمایید. سپس مجدداً بر روی دکمه View کلیک کنید. کلید API را ببینید:
این کلید را کپی کنید چون در مرحله بعد از آن استفاده خواهیم کرد. اینک به سرور بازگشته و فرایند به دست آوردن گواهی را ادامه دهید.
مرحله 3: پیکربندی certbot
اینک شما همه اطلاعات مورد نیاز برای این که certbot بداند چگونه باید از کلودفلیر استفاده کند را در اختیار دارید، اما باید آنها را در فایلی بنویسیم تا Certbot بتواند به طور خودکار از آنها استفاده کند.
ابتدا دستور certbot را بدون هیچ پارامتری وارد کنید تا یک فایل پیکربندی اولیه ایجاد شود:
sudo certbot
سپس یک فایل پیکربندی در دایرکتوری /etc/letsencrypt ایجاد کنید که شامل ایمیل و کلید API کلودفلیر خواهد بود:
sudo vi /etc/letsencrypt/cloudflareapi.cfg
اطلاعات زیر را در فایل وارد کنید و به جای عبارتهای سمت راست تساوی، اطلاعاتی را که در مرحله قبل به دست آوردید جایگزین کنید:
dns_cloudflare_email = your_cloudflare_login dns_cloudflare_api_key = your_cloudflare_api_key
فایل را ذخیره کنید و از ویرایشگر خارج شوید. اکنون که کلید API کلودفلیر را در اختیار دارید، میتوانید همان کارهایی را که در رابط کاربری کلودفلیر انجام میدادید، از خط فرمان سرور نیز انجام دهید. بنابراین برای این که حساب خود را حفاظت کنید مطمئن شوید که فایل پیکربندی تنها قابل خواندن از سوی مالکش است و هیچ کس دیگری نمیتواند اطلاعات آن را به دست آورد:
sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg
زمانی که کار نوشتن فایل پیکربندی به پایان رسید، آماده دریافت گواهی هستیم.
مرحله 4: دریافت گواهی
برای دریافت گواهی امنیتی از دستور certbot استفاده میکنیم و افزونه مورد نظر خود، فایل حاوی اطلاعات رمز عبور و سروری که برای مدیریت درخواست استفاده میکنیم را بیان خواهیم کرد. به طور پیشفرض certbot از سرورهای تولید Let’s Encrypt استفاده میکند که از نسخه 1 ACME API بهره میگیرند؛ اما certbot از پروتکل دیگری برای دریافت گواهیهای وایلدکارد استفاده میکند و از این رو باید یک نقطه نهایی نسخه 2 ACME برای آن تعیین کنید.
دستور زیر را وارد کنید تا یک گواهی وایلدکارد برای دامنه خود دریافت کنید:
sudo certbot certonly --cert-name your_domain --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.your_domain" -d your_domain
از شما خواسته میشود که آدرس ایمیلی را در این مرحله وارد نمایید. این آدرس ایمیل برای دریافت اعلانهای ضروری تجدید گواهی و موارد امنیتی استفاده میشود:
Output ... Plugins selected: Authenticator dns-cloudflare, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): your email
سپس از شما خواسته میشود با شرایط و مقررات این سرویس موافقت خود را اعلام کنید:
Output ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: A
در این مرحله از شما خواسته میشود که آدرس ایمیل را با بنیاد مرزهای الکترونیک (Electronic Frontier Foundation) به اشتراک بگذارید:
Output ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: N
سپس certbot گواهیهای شما را دریافت میکند. در این مرحله پیام زیر را مشاهده میکنید:
Output IMPORTANT NOTES: - 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 Your cert will expire on 2018-07-31. 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" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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
اینک گواهی وایلدکارد در اختیار شما است. در ادامه آنچه certbot برای شما دانلود کرده است را بررسی میکنیم. از دستور ls برای دیدن محتوای دایرکتوری که کلید API و اطلاعات نام کاربری و رمز عبور شما را نگهداری میکند استفاده کنید:
sudo ls /etc/letsencrypt/live/your_domain
Output cert.pem chain.pem fullchain.pem privkey.pem README
فایل README شامل اطلاعاتی در مورد این فایلها است:
$ cat /etc/letsencrypt/live/your_domain/README
خروجی این دستور به صورت زیر خواهد بود:
This directory contains your keys and certificates. `privkey.pem`: the private key for your certificate. `fullchain.pem`: the certificate file used in most server software. `chain.pem`: used for OCSP stapling in Nginx >=1.3.7. `cert.pem`: will break many server configurations, and should not be used without reading further documentation (see link below). We recommend not moving these files. For more information, see the Certbot User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.
در این بخش میتوانید سرورهای خود را با گواهیهای وایلدکارد پیکربندی کنید. معمولاً تنها به دو مورد از این فایلها نیاز خواهید داشت: fullchain.pem و privkey.pem.
برای مثال، میتوانید چندین سرویس مبتنی بر وب را پیکربندی کنید:
- wwww.example.com
- api.example.com
- mail.example.com
بدین منظور به یک وبسرور مانند آپاچی (Apache) یا انجینایکس (Nginx) نیاز دارید. توضیح مراحل نصب و پیکربندی این سرورها فراتر از حیطه این مقاله است. برای تجدید گواهی امنیتی وبسایت خود میتوانید از مرحله بعد کمک بگیرید.
مرحله 5: تجدید گواهیها
Let’s Encrypt گواهیهای کوتاهمدتی صادر میکند که به مدت 90 روز اعتبار دارند. ما باید یک وظیفه cron راهاندازی کنیم تا زمان منقضی شدن گواهیها را بررسی کند و آنها را در زمان مشخص و به طور خودکار تجدید کند. در ادامه یک وظیفه cron ایجاد میکنیم که بررسی تجدید گواهی را به صورت روزانه بررسی میکند. از دستور زیر برای باز کردن فایل crontab برای ویرایش آن استفاده کنید:
sudo crontab -e
خط کد زیر را که به صورت روزانه تلاش میکند تا گواهی را تجدید کند، به فایل اضافه کنید:
30 2 * * * certbot renew --noninteractive
در خط کد فوق هر یک از بخشها کار مشخصی دارند که در ادامه توضیح دادهایم:
- بخش نخست یعنی « این دستور را در ساعت 02:30 نیمه شب به طور روزانه اجرا کن.»
- دستور certbot renew به بررسی همه گواهیهای نصب شده روی سیستم میپردازد و آنها را که در کمتر از سی روز دیگر منقضی میشوند تجدید میکند.
- noninteractive-- به certbot میگوید که منتظر ورودی کاربر نماند.
پس از بهروزرسانی گواهیها باید وبسرور مجدداً راهاندازی شود. دستور renew شامل هوکهایی برای اجرای دستورات یا اسکریپتهایی پیش و پس از تجدید گواهی است. شما میتوانید این هوک را نیز در فایل پیکربندی تجدید گواهی برای دامنه مورد نظر خود تنظیم کنید.
برای مثال، برای بارگذاری مجدد سرور انجینایکس باید فایل پیکربندی تجدید گواهی را باز کنید:
sudo vi /etc/letsencrypt/renewal/your_domain.conf
سپس خط زیر را در زیر بخش [renewalparams] اضافه کنید:
renew_hook = systemctl reload nginx
نتیجهگیری
در این راهنما مراحل نصب کلاینت certbot، دریافت گواهی وایلدکارد با استفاده از اعتبارسنجی DNS و فعالسازی تجدید خودکار را با هم مرور کردیم. بدین ترتیب شما میتوانید از یک گواهی منفرد برای زیردامنه های مختلف وبسایت استفاده کنید و سرویسهای وب مختلف خود را به صورت امن درآورید.
اگر این نوشته مورد توجه شما قرار گرفته است، پیشنهاد میکنیم موارد زیر را نیز بررسی کنید:
- ۷ دلیل برای این که از گواهی امنیتی SSL برای وبسایت خود استفاده کنید
- گواهی امنیتی یک وبسایت چیست و چرا باید به آن توجه کنیم؟
- آموزش های شبکه های کامپیوتری
- OWASP Juice Shop — یک راهنمای عملی برای هک رایجترین آسیبپذیریهای وب
- ابزارها و راهکارهای مدیریت وبسایتها
==