از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Nginx را با Let’s Encrypt در CentOS 8 ایمن کنید
سرفصلهای مطلب
Let’s Encrypt یک مرجع گواهی رایگان، خودکار و باز است که توسط گروه تحقیقاتی امنیت اینترنت (ISRG) توسعه یافته و گواهینامه های SSL رایگان ارائه می دهد.
گواهیهای صادر شده توسط Let’s Encrypt مورد اعتماد همه مرورگرهای اصلی هستند و 90 روز از تاریخ صدور اعتبار دارند.
در این آموزش، دستورالعمل های گام به گام در مورد روش نصب گواهینامه رایگان Let’s Encrypt SSL بر روی CentOS 8 که Nginx را به عنوان یک وب سرور اجرا می کند، ارائه خواهیم داد. همچنین روش پیکربندی Nginx برای استفاده از گواهی SSL و فعال کردن HTTP/2 را نشان خواهیم داد.
پیش نیازها
قبل از ادامه، مطمئن شوید که پیش نیازهای زیر را برآورده کرده اید:
- شما یک نام دامنه دارید که به IP عمومی شما اشاره دارد. استفاده خواهیم کرد
example.com
. - شما Nginx را روی سرور CentOS خود نصب کرده اید.
- فایروال شما برای پذیرش اتصالات در پورت های 80 و 443 پیکربندی شده است.
نصب Certbot
Certbot رایگان است command-line ابزاری که کار را ساده می کند process برای به دست آوردن و تمدید گواهینامه های SSL از و فعال کردن خودکار HTTPS در سرور شما.
بسته certbot در مخازن استاندارد CentOS 8 موجود نیست، اما می توان آن را از وب سایت فروشنده دانلود کرد.
زیر را اجرا کنید wget
دستور به عنوان کاربر root یا sudo برای دانلود اسکریپت certbot در /usr/local/bin
فهرست راهنما:
sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto
پس از اتمام دانلود، فایل را قابل اجرا کنید:
sudo chmod +x /usr/local/bin/certbot-auto
تولید گروه Strong Dh (Diffie-Hellman).
تبادل کلید دیفی-هلمن (DH) روشی برای تبادل امن کلیدهای رمزنگاری از طریق یک کانال ارتباطی ناامن است.
با تایپ دستور زیر مجموعه جدیدی از پارامترهای DH 2048 بیتی ایجاد کنید:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
اگر بخواهید می توانید طول کلید را تا 4096 بیت تغییر دهید، اما تولید ممکن است بیش از 30 دقیقه طول بکشد، بسته به آنتروپی سیستم.
دریافت گواهینامه Let’s Encrypt SSL
برای دریافت گواهی SSL برای دامنه، از افزونه Webroot استفاده می کنیم که با ایجاد یک فایل موقت برای اعتبارسنجی دامنه درخواستی در ${webroot-path}/.well-known/acme-challenge
فهرست راهنما. سرور Let’s Encrypt درخواست های HTTP را به فایل موقت می دهد تا تأیید کند که دامنه درخواستی به سروری که ربات در آن اجرا می شود حل می شود.
برای سادهتر کردن آن، میخواهیم تمام درخواستهای HTTP را برای آنها ترسیم کنیم .well-known/acme-challenge
به یک دایرکتوری واحد، /var/lib/letsencrypt
.
دستورات زیر دایرکتوری را ایجاد کرده و آن را برای سرور Nginx قابل نوشتن می کند.
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
برای جلوگیری از تکرار کد، دو قطعه زیر را ایجاد کنید که در تمام فایل های بلوک سرور Nginx گنجانده می شود:
sudo mkdir /etc/nginx/snippets
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
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 off;
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=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
قطعه بالا شامل تراشه های توصیه شده توسط موزیلا
، OCSP Stapling، HTTP Strict Transport Security (HSTS) را فعال می کند و تعداد کمی هدر HTTP متمرکز بر امنیت را اعمال می کند.
پس از ایجاد اسنیپت ها، بلوک سرور دامنه را باز کنید و آن را وارد کنید letsencrypt.conf
قطعه، همانطور که در زیر نشان داده شده است:
server {
listen 80;
server_name example.com www.example.com;
include snippets/letsencrypt.conf;
}
برای اعمال تغییرات، پیکربندی Nginx را دوباره بارگیری کنید:
sudo systemctl reload nginx
ابزار certbot را با افزونه webroot اجرا کنید تا فایل های گواهی SSL را برای دامنه خود دریافت کنید:
sudo /usr/local/bin/certbot-auto certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
اگر این اولین بار است که فراخوانی می کنید certbot
، ابزار وابستگی های از دست رفته را نصب می کند.
هنگامی که گواهی SSL با موفقیت به دست آمد، certbot پیام زیر را چاپ می کند:
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 2020-03-12. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto 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
اکنون که فایل های گواهی را دارید، می توانید بلوک سرور دامنه خود را به صورت زیر ویرایش کنید:
server {
listen 80;
server_name www.example.com example.com;
include snippets/letsencrypt.conf;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
# . . . other code
}
با پیکربندی بالا، HTTPS را مجبور می کنیم و www را به نسخه غیر www هدایت می کنیم.
در نهایت، برای اعمال تغییرات، سرویس Nginx را دوباره بارگیری کنید:
sudo systemctl reload nginx
اکنون، وب سایت خود را با استفاده از آن باز کنید https://
و یک نماد قفل سبز رنگ را مشاهده خواهید کرد.
اگر دامنه خود را با استفاده از تست سرور SSL Labs
، شما یک دریافت خواهید کرد A+
نمره، همانطور که در تصویر زیر نشان داده شده است:
تمدید خودکار گواهینامه Let’s Encrypt SSL
گواهینامه های Let’s Encrypt به مدت 90 روز معتبر هستند. برای تمدید خودکار گواهی ها قبل از انقضا، یک cronjob ایجاد کنید که دو بار در روز اجرا می شود و به طور خودکار هر گواهی را 30 روز قبل از انقضا تمدید می کند.
استفاده کنید crontab
دستور ایجاد یک cronjob جدید:
sudo crontab -e
خط زیر را بچسبانید:
0 */12 * * * root test -x /usr/local/bin/certbot-auto -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && /usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"
ذخیره کنید و فایل را ببندید.
برای تست تمدید process، می توانید از دستور certbot به دنبال آن استفاده کنید --dry-run
تعویض:
sudo ./certbot-auto renew --dry-run
اگر خطایی وجود نداشته باشد، به این معنی است که آزمون تمدید می شود process موفقیت آمیز بود.
نتیجه
در این آموزش، ما به شما نشان دادیم که چگونه از سرویس گیرنده Let’s Encrypt، certbot برای دانلود گواهینامه های SSL برای دامنه خود استفاده کنید. ما همچنین قطعههای Nginx را برای جلوگیری از تکرار کد ایجاد کردهایم و Nginx را برای استفاده از گواهیها پیکربندی کردهایم. در پایان آموزش، ما یک cronjob برای تمدید خودکار گواهی راه اندازی کرده ایم.
برای کسب اطلاعات بیشتر در مورد Certbot، مراجعه کنید مستندات آنها
page.
اگر سوال یا بازخوردی دارید، در کامنت بگذارید.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-27 11:18:02