Let’s Encrypt یک مجوز رایگان ، خودکار و باز است که توسط گروه تحقیقاتی امنیت اینترنت (ISRG) تهیه شده و گواهینامه های SSL رایگان ارائه می دهد. به گواهینامه های صادر شده توسط Let’s Encrypt توسط همه مرورگرهای اصلی قابل اعتماد است و به مدت ۹۰ روز از تاریخ انتشار معتبر است. در این مقاله ، نحوه نصب Let’s Encrypt در Ubuntu 20.04 ، اجرای Nginx به عنوان سرور وب توضیح داده شده است. ما همچنین نحوه پیکربندی Nginx را برای استفاده از گواهی SSL و فعال کردن HTTP / 2 نشان خواهیم داد. با ما در شتابان هاست همراه باشيد.
قبل از اقدام ، اطمینان حاصل کنید که پیش شرط های زیر را رعایت کرده اید:
برای به دست آوردن و تمدید گواهینامه ها از Certbot استفاده خواهیم کرد. Certbot ابزاری کاملاً برجسته و آسان برای استفاده است که وظایف را برای به دست آوردن و تجدید مجوزهای Let’s Encrypt SSL و پیکربندی سرورهای وب برای استفاده از گواهینامه ها ، خودکار عمل می کند.
بسته certbot در مخازن پیش فرض اوبونتو گنجانده شده است. برای نصب آن دستورات زیر را اجرا کنید:
sudo apt update
sudo apt install certbot
تبادل کلید (Diffie-Hellman (DH روشی برای تبادل ایمن کلیدهای رمزنگاری بر روی کانال ارتباطی ناامن است.
با تایپ دستور زیر مجموعه جدیدی از پارامترهای DH 2048 بیتی را تولید کنید:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
همچنین می توانید از طول کلید تا ۴۰۹۶ بیت استفاده کنید ، اما بسته به آنتروپی سیستم ممکن است تولید بیش از ۳۰ دقیقه طول بکشد.
برای به دست آوردن گواهینامه SSL برای دامنه ، ما می خواهیم از افزونه Webroot استفاده کنیم که با ایجاد یک پرونده موقت برای اعتبارسنجی دامنه درخواست شده در فهرست webroot-path. /. معروف یا دایرکتوری Acme-Challenge کار می کند. سرور Let’s Encrypt درخواست HTTP را به پرونده موقت تأیید مي کند تا صحت دامنه درخواست شده در سرور محل اجرای آن را بررسی کند.
برای ساده تر کردن این ، می خواهیم همه درخواست های HTTP را برای چالش های خوب و شناخته شده / acme در یک فهرست راهنما ، / var / lib / letsencrypt ، ترسیم کنیم.
دستورات زیر دایرکتوری ایجاد کرده و آن را برای سرور Nginx قابل نگارش درآورده است:
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
برای جلوگیری از کپی کردن کد ، دو قطعه ایجاد خواهیم کرد و آنها را در کلیه فایل های بلاک سرور Nginx مي گنجانيم.
ویرایشگر متن خود را باز کنید و اولین قطعه ، letsencrypt.conf را ایجاد کنید:
sudo nano /etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
در مرحله بعد ، قطعه دوم را ایجاد کنید ، ssl.conf ، که شامل تراشه های پیشنهادی موزیلا است ، OCSP Stapling ، HTTP Strict Transport Security (HSTS) را فعال کرده و چند هدر 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;
پس از ایجاد قطعه ، پرونده بلاک سرور دامنه را باز کنید و قطعه letsencrypt.conf را مانند شکل زیر وارد کنید:
sudo nano /etc/nginx/sites-available/example.com.conf
server { listen 80; server_name example.com www.example.com;
include snippets/letsencrypt.conf; }
برای فعال کردن بلاک سرور جدید ، یک پیوند نمادین از پرونده به فهرست دایرکتوری سایتها ایجاد کنید:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
سرویس Nginx را مجدداً اجرا کنید تا تغییرات به مرحله اجرا درآیند:
sudo systemctl restart nginx
اکنون می توانید Certbot را با افزونه webroot اجرا کرده و با صدور پرونده های گواهینامه SSL:
sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
اگر گواهی 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-10-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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
اکنون که پرونده های گواهی نامه را دارید ، می توانید بلاک سرور دامنه خود را به شرح زیر ویرایش کنید:
sudo nano /etc/nginx/sites-available/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 هدایت می شویم.
سرویس Nginx را برای اعمال تغییرات بارگیری مجدد کنید:
sudo systemctl reload nginx
برای تأیید اینکه گواهی SSL با موفقیت نصب شده است ، وب سایت خود را با استفاده از https: // باز کنید و یک نماد قفل سبز را مشاهده خواهيد كرد. اگر دامنه خود را با استفاده از SSL Labs Server Test آزمایش کنید ، مطابق تصویر زیر درجه A + دریافت خواهید کرد:
اجازه دهید گواهینامه های Let’s Encrypt به مدت ۹۰ روز معتبر باشند. برای تمدید خودکار گواهینامه ها قبل از انقضا ، بسته certbot یک cronjob و یک تایمر سیستمی ایجاد می کند. تایمر ۳۰ روز قبل از انقضا به طور خودکار گواهینامه ها را تمدید می کند.
با تمدید گواهینامه ، سرویس nginx مجدداً بارگیری می شود. /etc/letsencrypt/cli.ini را باز کنید و خط زیر را اضافه کنید:
sudo nano /etc/letsencrypt/cli.ini
deploy-hook = systemctl reload nginx
برای آزمایش فرایند تجدید ، دستور certbot –dry-run را اجرا کنید:
sudo certbot renew --dry-run
اگر خطایی وجود نداشته باشد ، به این معنی است که روند تجدید موفقیت آمیز بوده است.
ما به شما نشان داده ایم که چگونه می توانید Nginx را با Let’s Encrypt در Ubuntu 20.04 امن کنید. ما را در شتابان هاست دنبال كنيد.