وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Nginx را با Let’s Encrypt در CentOS 8 ایمن کنید

0 3
زمان لازم برای مطالعه: 4 دقیقه



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 را به فایل موقت می دهد تا تأیید کند که دامنه درخواستی به سروری که ربات در آن اجرا می شود حل می شود.

پیشنهاد می‌کنیم بخوانید:  روش نصب فایل های RPM (بسته ها) در CentOS Linux

برای ساده‌تر کردن آن، می‌خواهیم تمام درخواست‌های HTTP را برای آنها ترسیم کنیم .well-known/acme-challenge به یک دایرکتوری واحد، /var/lib/letsencrypt.

دستورات زیر دایرکتوری را ایجاد کرده و آن را برای سرور Nginx قابل نوشتن می کند.

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp nginx /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

برای جلوگیری از تکرار کد، دو قطعه زیر را ایجاد کنید که در تمام فایل های بلوک سرور Nginx گنجانده می شود:

sudo mkdir /etc/nginx/snippets
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}
/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 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 قطعه، همانطور که در زیر نشان داده شده است:

/etc/nginx/conf.d/example.com.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

اکنون که فایل های گواهی را دارید، می توانید بلوک سرور دامنه خود را به صورت زیر ویرایش کنید:

/etc/nginx/conf.d/example.com.conf
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 هدایت می کنیم.

پیشنهاد می‌کنیم بخوانید:  روش نصب پایتون 3 روی CentOS 7

در نهایت، برای اعمال تغییرات، سرویس Nginx را دوباره بارگیری کنید:

sudo systemctl reload nginx

اکنون، وب سایت خود را با استفاده از آن باز کنید https://و یک نماد قفل سبز رنگ را مشاهده خواهید کرد.

اگر دامنه خود را با استفاده از تست سرور SSL Labs
، شما یک دریافت خواهید کرد A+ نمره، همانطور که در تصویر زیر نشان داده شده است:

تست SSLLABS

تمدید خودکار گواهینامه 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.

اگر سوال یا بازخوردی دارید، در کامنت بگذارید.

nginx centos بیایید certbot ssl را رمزگذاری کنیم
برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-27 11:18:02

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید