پروژه acme: گامی مهم در جهت صدور گواهینامههای SSL خودکار
پروژه acme (Automatic Certificate Management Environment) یک ابتکار عمل منبع باز است که با هدف سادهسازی و خودکارسازی فرآیند صدور و مدیریت گواهینامههای SSL (Secure Sockets Layer) طراحی شده است. این پروژه توسط Let’s Encrypt، یک سازمان غیرانتفاعی که به ترویج امنیت و حریم خصوصی آنلاین میپردازد، پشتیبانی میشود.
مزایای استفاده از acme برای ساخت SSL:
- خودکارسازی: acme فرآیند صدور و تمدید گواهینامههای SSL را به طور کامل خودکار میکند، و نیاز به دخالت دستی را از بین میبرد.
- سادگی: acme از یک رابط کاربری ساده و قابل فهم استفاده میکند که کار با آن را برای هرکسی آسان میکند.
- رایگان: acme یک سرویس کاملاً رایگان است و هیچ هزینهای برای صدور یا تمدید گواهینامههای SSL دریافت نمیکند.
- امنیت: acme از جدیدترین استانداردهای امنیتی برای صدور گواهینامههای SSL استفاده میکند و از حریم خصوصی کاربران محافظت میکند.
acme برای هر کسی که میخواهد وب سایت خود را با گواهینامه SSL ایمن کند، مناسب است. این پروژه به طور خاص برای وب سایتهای کوچک و متوسط که ممکن است منابع یا تخصص لازم برای مدیریت دستی گواهینامههای SSL را نداشته باشند، مفید است. با استفاده از acme، میتوانید به راحتی و به طور خودکار وب سایت خود را با گواهینامه SSL ایمن کنید و از حریم خصوصی کاربران خود محافظت کنید.
مقایسه acme و certbot: دو ابزار محبوب برای صدور و مدیریت گواهینامههای SSL
acme و certbot دو ابزار محبوب برای صدور و مدیریت گواهینامههای SSL هستند. هر دو ابزار مزایا و معایب خاص خود را دارند. هر دو ابزار acme و certbot فرآیند صدور و تمدید گواهینامههای SSL را به طور خودکار انجام میدهند.
هر دو ابزار به طور کامل رایگان هستند و هیچ هزینهای برای صدور یا تمدید گواهینامههای SSL دریافت نمیکنند. درنهایت هر دو ابزار از جدیدترین استانداردهای امنیتی برای صدور گواهینامههای SSL استفاده میکنند و از حریم خصوصی کاربران محافظت میکنند.
ساخت SSL رایگان با استفاده از acme در لینوکس
برای ساخت ssl توسط acme شما نیاز به انتخاب یک CA یا Certificate Authority دارید. دو CA محبوب و رایگان در سطح اینترنت عبارتند از Letsencrypt و ZeroSSL.
ابتدا acme را از گیت هاب با دستور زیر دانلود کرده و آن را unzip نمایید:
#wget https://github.com/acmesh-official/acme.sh/archive/refs/heads/master.zip
#unzip master.zip
صادر کردن یک ssl ساده:
(برای استفاده از این روش باید یک وب سرویس مانند nginx داشته باشید و پورت ۸۰ آن نیز باز باشد.)
#acme.sh –issue -d example.com -w /home/wwwroot/example.com
یا
#acme.sh –issue -d example.com -w /home/wwwroot/example.com -m admin@gmail.com
یا
#acme.sh –issue -d example.com -w /home/wwwroot/example.com -m admin@gmail.com –server zerossl
اگر در خط بالا از پارامتر server استفاده نکنید به صورت پیش فرض از letsencrypt استفاده میکند.
صادر کردن یک ssl برای چند دامین:
acme.sh –issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
پس از ایجاد گواهینامه، احتمالا میخواهید آن را روی سرورهای آپاچی یا Nginx یا سایر سرورهای خود نصب یا کپی کنید.باید حتما از این دستور برای کپی کردن گواهینامهها به فایلهای مقصد استفاده کنید و به هیچ وجه از فایلهای گواهینامه موجود در پوشهی ~/.acme.sh/ استفاده نکنید. این پوشه صرفا برای مصارف داخلی است و ساختار آن ممکن است در آینده تغییر کند.
Apache example:
acme.sh –install-cert -d example.com \
–cert-file /path/to/certfile/in/apache/cert.pem \
–key-file /path/to/keyfile/in/apache/key.pem \
–fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
–reloadcmd “service apache2 force-reload”
Nginx example:
acme.sh –install-cert -d example.com \
–key-file /path/to/keyfile/in/nginx/key.pem \
–fullchain-file /path/to/fullchain/nginx/cert.pem \
–reloadcmd “service nginx force-reload”
تنها دامنه الزامی است و سایر پارامترها اختیاری هستند.
اطلاعات مالکیت و سطح دسترسی فایلهای موجود حفظ میگردد. شما میتوانید برای تعیین مالکیت و سطح دسترسی، از قبل فایلها را ایجاد کنید.
گواهینامه و کلید را در مسیر نهایی (محیط عملیاتی) آپاچی یا Nginx نصب یا کپی کنید.
گواهینامه به طور پیشفرض هر ۶۰ روز تمدید میشود (این قابل تنظیم است). پس از تمدید گواهینامه، سرویس آپاچی/Nginx به طور خودکار با دستور `service apache2 force-reload` یا `service nginx force-reload` بارگذاری مجدد میشود.
توجه مهم: دستور `reloadcmd` بسیار مهم است. گواهینامه قابل تمدید خودکار است، اما بدون یک دستور `reloadcmd` صحیح، گواهینامه ممکن است در سرور شما (مانند Nginx یا Apache) بهروزرسانی نشود و در نتیجه وبسایت شما بعد از ۶۰ روز قادر به نمایش گواهینامه تمدید شده نخواهد بود.
استفاده از روش standalone در ساخت ssl
در صورتی که بر روی سرور خود وب سرویس ندارید باید از روش standalone برای ساخت ssl استفاده نمایید که خودش یک وب سرویس موقت راه اندازی میکند: (پس باید پورت ۸۰ آزاد باشد و در اختیار سرویس دیگری نباشد.)
#acme.sh –issue –standalone -d example.com -d www.example.com -d cp.example.com
صادر کردن ssl از نوع wildcard
برای اینکه بخواهیم ssl را به صورت wildcard صادر کنیم باید حتماً چالش dns را انجام دهیم. برای این کار باید رکوردهای مربوطه را در dns بسازیم.
#acme.sh –issue -d example.com -d ‘*.example.com’ –dns dns_cf
یا
#acme.sh –issue –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please -d example.com -d ‘*.example.com’ -m admin@gmail.com –server zerossl
وقتی یکبار دستور بالا را زدیم، خطایی بر میگردد که در آن میگوید این دو رکورد را در DNS بساز و اینبار دستور را با renew بزن. (رکورد باید از نوع txt ساخته شود.)
#acme.sh –issue –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please -d example.com -d ‘*.example.com’ -m admin@gmail.com –server zerossl –renew
وقتی کار شما تمام شد میتوانید اقدام به پاک کردن این رکوردها از dns نمایید.
ساخت ssl از نوع wildcard با استفاده از DNS API
ابتدا باید بدانید که جایی که dns شما در آن قرار دارد باید DNS API را پشتیبانی نماید. برای مثال در cdnهای محبوب داخلی مانند ابرآروان از این قابلیت پشتیبانی میشود. باید در پنل خود لاگین کرده و در قسمت کلیدهای API اقدام به ساخت یک key نمایید.
#export Arvan_Token=”<token>”
#acme.sh –issue –dns dns_arvan -d example.com -d *.example.com
The Arvan_Token will be saved in ~/.acme.sh/account.conf and will be reused when needed.
در صورتی که از dnsهای دیگر استفاده میکنید، میتوانید از آدرس زیر مشاهده کنید که آیا پشتیبانی میشود یا خیر. همچنین روش کار نیز در آن توضیح داده شده است.
https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_arvan
نحوه renew کردن ssl
#acme.sh –renew -d example.com
اگر هنوز زمان renew کردن نرسیده باشد میتوانیم از پارامتر force استفاده کنیم.
#acme.sh –renew -d example.com –force
بعد از renew کردن ssl باید حتماً وب سرویس مجدداً راه اندازی شود.