نحوه امن سازی Nginx از طریق Let’s Encrypt SSL

امن کردن سایت خود با Let’s Encrypt SSL
Let’s Encrypt یک مرجع صدور گواهی کاملا رایگان و اتوماتیک است که توسط گروه ISRG یا Internet Security Group برای ارایه گواهیهای رایگان SSL ایجاد شده است
گواهیهایی که توسط Let’s Encrypt صادر میشود برای همه مروگرها تا 90 از زمان صدورشان معتبر میباشند.

نصب SSL از Let’s Encrypt
در این قسمت نحوه نصب و راه اندازی گواهی SSL از Let’s Encrypt بر روی Ubuntu 20.04 جهت امنسازی وب سرور Nginx آموزش داده میشود. همچنین نحوه تنظیم Nginx برای استفاده از گواهی SSL و نحوه فعال سازی HTTP/2 نیز نشان داده شده است.
نیازمندیها
قبل از شروع حتما از وجود نیازمندیهای زیر مطمئن شوید.
- استفاده از دامنهای معتبر. ما در اینجا از دامنه qradar.ir استفاده میکنیم.
- اطمینان از نصب و فعال بودن وب سرور Nginx
- تنظیم بودن فایروال برای عبور ترافیک بر روی پورتهای 80 و 443 بر روی Firewall سرور Ububtu
نصب Certbot
ما در اینجا از Certbot برای دریافت و تمدید گواهی استفاده خواهیم کرد.
Certbot یک ابزار ساده و کامل برای اتوماتیک کردن کار دریافت و تمدید گواهیهای SSL از Let’s Encrypt و تنظیم سرورها برای استفاده از گواهی SSL میباشد.
پکیج Certbot به صورت پیشفرض در Repositoryهای Ubuntu وجود دارد. برای نصب آن کافیست دستورات زیر را اجرا نمایید.
sudo apt update $
sudo apt install certbot $
ایجاد یک گروه diffe-Hellman قدرتمند
Deffi-Hellman Key exchange یک متد امن برای تبادل کلیدهای رمزنگاری، تحت یک کانال ارتباطی ناامن میباشد. برای ایجاد گروه DH جدید با طول کلید 2048 بیت از دستور زیر استفاده کنید.
sudo openssl dhgroup -out /etc/ssl/certs/dhparam.pem 2048 $
شما میتوانید از طول کلید 4096 بیت نیز استفاده کنید، اما ایجاد این کلید ممکن است بیش از 30 دقیقه طول بکشد.
دریافت گواهی Let’s Encrypt SSL
برای دریافت گواهی برای نام دامنه qradar.ir از افزونه Webroot استفاده خواهیم کرد که با ایجاد یک فایل Temp برای اعتبارسنجی دامنه درخواست شده در مسیر webroot-patch}/.well-known/acme-challenge} $ کار میکند. سرور Let’s Encrypt یک درخواست HTTP به فایل Temp را برای تایید این که نام دامنه درخواستی بر روی سروری که Certbot نصب شده است، ارسال میکند.
برای سادگی بیشتر همه درخواستهای HTTP برای well-known/acme-challenge را فقط به یک دایرکتوری، /var/lib/letsencrypt مسیردهی می کنیم.
sudo makdir -p /va/lib/letsencrypt/.well-known $
sudo chgrp www-data /var/lib/letsencrypt $
sudo chmod g+s /var/lib/letsencrypt $
برای جلوگیری از کدهای تکراری، در اینجا دو قطعه کد ایجاد و در کلیه بلاکهای مربوط به تنظیمات سرورهای Nginx از آنها استفاده خواهیم کرد.
sudo /etc/nginx/snippets/letsencrypt.conf $
} location ^~ /.well-known/acme-challenge/
;allow all
;root /var/lib/letsecnrypt/
;default_type “text/plain”
{
در ادامه قطعه کد دوم یعنی ssl.conf را که شامل مجموعه اگوریتمهای رمزنگاری پیشنهادی Mozilla، تنظیمات برای فعال سازی OCSP و HTTP Script Transport Security و اعمال کمی نظارت امنیتی بر روی Headerهای HTTP میباشد را ایجاد میکنیم.
sudo nano /etc/nginx/snippets/ssl.conf $
;ssl_dhparam /etc/ssl/certs/dhparam.pem
;ssl_session_timeout 1d
;ssl_session_cache shared:SSL:10m
;ssl_session_tickets off
;ssl_protocols TLSv1.2 TLSv1.3
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM- SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
;ssl_prefer_server_ciphers on
;ssl_stapling on
;ssl_stapling_verify on
;resolver 8.8.8.8 8.8.4.4 valid=300s
;resolver_timeout 30s
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always
;add_header X-Frame-Options SAMEORIGIN
;add_header X-Content-Type-Options nosniff
بعد از ایجاد این دو قطعه نوبت اضافه کردن آنها به تنظیمات فایل سرور میباشد.
sudo nano /etc/nginx/site-available/qradar.ir
} server
;lisetn 80
;server_name qradar.ir www.qradar.ir
;include snippets/letsencrypt.conf
{
برای فعال سازی بلاک جدید سرور، یک لینک Symbolic از فایل به دتیرکتوری sites-enables ایجاد میکنیم.
/sudo ln -s /etc/nginx/sites-available/qradar.ir /etc/nginx/sites-enabled
سرویس Nginx را ریستارت میکنیم تا تغییرات اعمال شود.
sudo systemctl restart nginx
الان میتوانیم Certbot را به همراه webroot اجرا و گواهی SSL را برای Qradar.ir دریافت نماییم.
sudo certbot certonly –agree-tos –email [email protected] –webroot -w /var/lib/letsencrypt/ -d qradar.ir -d www.qradar.ir
اگر گواهی به درستی صادر شود، Certbot پیغامی شبیه به پیغام زیر را چاب خواهد کرد.

در حال حاضر میتوانیم از گواهی دریافتی برای سایت qradar.ir استفاده کنیم. برای این کار کافی است فایل مربوط به بلاک سرور را ویرایش و کدهای زیر را اضافه کنید.
sudo nano /etc/nginx/sites-available/qradar.ir
} server
;listen 80
;server_name www.qradar.ir qradar.ir
;include snippets/letsencrypt.conf
;return 301 https://$host$request_uri
{
} server
;listen 443 ssl http2
;server_name www.qradar.ir
;ssl_certificate /etc/letsencrypt/live/qradar.ir/fullchain.pem
;ssl_certificate_key /etc/letsencrypt/live/qradar.ir/privkey.pem
;ssl_trusted_certificate /etc/letsencrypt/live/qradar.ir/chain.pem
;include snippets/ssl.conf
;include snippets/letsencrypt.conf
;return 301 https://qradar.ir$request_uri
{
} server
;listen 443 ssl http2
;server_name qradar.ir
;ssl_certificate /etc/letsencrypt/live/qradar.ir/fullchain.pem
;ssl_certificate_key /etc/letsencrypt/live/qradar.ir/privkey.pem
;ssl_trusted_certificate /etc/letsencrypt/live/qradar.ir/chain.pem
;include snippets/ssl.conf
;include snippets/letsencrypt.conf
. . . other code #
{
با تنظیمات بالا در واقع استفاده از HTTPS را اجباری و درخواستهای wwwدار را به ورژن بدون www هدایت میکنیم.
کافی است یک بار سرویس Nginx را ریستارت نماییم تا تغییرات اعمال شود.
sudo systemctl reload nginx
برای تصدیق نصب صحیح گواهی SSL با مرورگر خود به آدرس https://qradar.ir بروید. بایستی در کنار نام دامنه علامت قفل سبز رنگ را مشاهده کنید.
در صورتی که دامنه خود را با SSL Labs Server Test تست نماید، حتما گرید A دریافت خواهید کرد.
دیدگاهتان را بنویسید