تنظیم کردن ssl روی nginx با certbot در زمان قطعی اینترنت
در این نوشته با روش DNS-01 قصد داریم روش اضافه کردن ssl با کمک lets encrypt را به شما آموزش دهیم. در این روش ما در یک دستگاه لوکال که به اینترنت بین الملل متصل است نیاز داریم تا بعد از تولید ssl آن را به سروری که به دلیل قطع اینترنت دسترسی به اینترنت بینالملل ندارد را منتقل کنیم.
تنظیم کردن ssl با روش DNS-01 روی nginx با certbot
ابتدا روی سیستم خود که اینترنت دارد پکیج acme.sh را نصب کنید. سپس برای بررسی اینکه آیا acme.sh نصب شده است از دستور زیر استفاده کنید:
acme.sh --version
سپس ایمیل خود را روی acme.sh ست کنید:
acme.sh --register-account -m info@test.ir
سپس مشخص کنید که گواهی ssl جدیدی که میخواهید از نوع letsencrypt باشد:
acme.sh --set-default-ca --server letsencrypt
سپس درخواست ایجاد dns برای ssl خود را بدهید:
acme.sh --issue --dns -d test.ir -d www.test.ir --yes-I-know-dns-manual-mode-enough-go-ahead-please --debug
پس از اجرای دستور بالا خروجی این دستور دو رکورد txt به شما میدهد با عنوان _acme-challenge.test.ir و _acme-challenge.www.test.ir که باید روی dns server خود ست کنید. سپس برای اطمینان از ست شدن این دو رکورد txt پس از ۵ دقیقه این دو دستور را اجرا کنید:
dig TXT _acme-challenge.test.ir dig TXT _acme-challenge.www.test.ir
بعد از موفقیت آمیز بودن مراحل بالا برای verify کردن از کد زیر استفاده کنید:
acme.sh --renew --force -d test.ir --yes-I-know-dns-manual-mode-enough-go-ahead-please
سپس وارد مسیر زیر شوید و صحت ساخت کلیدها را مطمئن شوید:
cd /Users/my_user/.acme.sh/test.ir_ecc/
در دستور بالا my_user اسم کاربر شما در سیستم لوکال شما میباشد و test.ir با توجه به دامنهی شما است.
پس از موفقیت آمیز بودن مراحل بالا حالا باید کلیدها را به سرور خود منتقل کنید:
scp -i privatekey.pem ~/.acme.sh/test.ir_ecc/fullchain.cer ~/.acme.sh/test.ir_ecc/test.ir.key root@ipserver:~/ ssh -i privatekey.pem root@ipserver "sudo mv ~/fullchain.cer ~/test.ir.key /etc/ssl/test/"
حالا کافیست کد مربوط به کانفیگ nginx را ویرایش کنید:
server {
listen 443 ssl;
server_name test.ir www.test.ir;
ssl_certificate /etc/ssl/test/fullchain.cer;
ssl_certificate_key /etc/ssl/test/test.ir.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
و در مرحلهی آخر nginx را ریست کنید:
sudo systemctl reload nginx
پایان.!
اگر سوالی دارید در بخش نظرات این نوشته برای ما بنویسید.



















دستور dig TXT برای چه چیزی است؟
برای بررسی اینکه رکوردهای TXT بهدرستی روی DNS ست شدهاند یا نه.
رکوردهای TXT که acme.sh میدهد چه کاربردی دارند؟
این رکوردها برای اثبات مالکیت دامنه استفاده میشوند و باید روی DNS سرور تنظیم شوند.
برای این روش حتما باید به اینترنت بینالملل باشه؟
برای صدور اولیه گواهی بله، اما بعد از تولید، میشود فایلها را به سرور بدون اینترنت بینالملل منتقل کرد.
acme.sh چه نقشی در این فرایند دارد؟
acme.sh برای گرفتن و مدیریت گواهی SSL از Let’s Encrypt استفاده میشود و در این مقاله جایگزین خوبی برای صدور دستی گواهی است.
چرا در این روش از DNS-01 استفاده شده؟
چون وقتی اینترنت بینالملل قطع است، تایید دامنه از طریق رکورد DNS سادهتر و قابلاعتمادتر از روشهای معمول است.