Encrypt یک مجوز آزاد و باز است که توسط گروه تحقیقاتی امنیت اینترنت (ISRG) تهیه شده است. امروزه تقریباً همه مرورگرها توسط Encrypt قابل اعتماد هستند. در این مقاله ، ما مراحل چگونگی ایمن سازی Nginx خود را با Let’s Encrypt با استفاده از ابزار certbot در اوبونتو ۱۸٫۰۴ ارائه خواهیم کرد. با ما در شتابان هاست همراه باشيد.
قبل از ادامه این مقاله اطمینان حاصل کنید که پیش نیازهای زیر را رعایت کرده اید:
Certbot ابزاری کاملاً برجسته و آسان برای استفاده است که می تواند برای به دست آوردن و تمدید گواهی نامه SSL رمزگذاری کند و سرورهای وب را برای استفاده از گواهی نامه ها رمزگذاری کند. بسته certbot در مخازن پیش فرض اوبونتو گنجانده شده است.
لیست بسته ها را به روز کنید و بسته 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}/.well-known/acme-challenge سرور رمزگذاری شده اجازه می دهد تا درخواست HTTP را به پرونده موقتی تأیید کند تا اعتبار دامنه درخواست شده را به سرور محل اجرای Certbot تأیید کند.
برای ساده تر کردن آن ، می خواهیم همه درخواست های HTTP را برای آنها ترسیم کنیم. well-known/acme-challenge یک فهرست مستقیم /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:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 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=15768000; includeSubdomains; preload"; 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; }
برای فعال کردن پرونده بلاک سرور جدید ، باید یک پیوند نمادین از پرونده به فهرست دایرکتوری سایت ها فعال کنیم ، که توسط Nginx هنگام راه اندازی خوانده می شود:
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 2018-07-28. 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
اجازه دهید گواهینامه های رمزگذاری شده به مدت ۹۰ روز معتبر باشند. برای تجدید خودکار گواهینامه ها قبل از انقضا ، بسته certbot cronjob ایجاد می کند که دو بار در روز اجرا می شود و به طور خودکار ۳۰ روز قبل از انقضا هر گواهی را تمدید می کند.
از آنجا که ما پس از تمدید گواهینامه ، از افزونه certbot webroot استفاده می کنیم ، مجبوریم سرویس nginx را بارگیری کنیم. ضمیمه کردن –ren-hook “systemctl reload nginx” به پرونده /etc/cron.d/certbot كه به نظر می رسد:
sudo nano /etc/cron.d/certbot
۰ */۱۲ * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"
برای آزمایش فرایند تجدید ، می توانید از دستور certbot –dry run استفاده کنید:
sudo certbot renew --dry-run
اگر خطایی وجود نداشته باشد ، به این معنی است که روند تجدید موفقیت آمیز بوده است.
در این مقاله ، شما از سرویس دهنده Let’s Encrypt ، certbot برای بارگیری گواهی های SSL برای دامنه خود استفاده کرده اید. شما همچنین برای جلوگیری از کپی کردن از کد ، قطعه های Nginx ایجاد کرده اید و Nginx را برای استفاده از گواهی ها پیکربندی کرده است همچنين شما آموختيد كه چگونه Nginx را با Let’s Encrypt در اوبونتو ۱۸٫۰۴ امن کنید؛ ما را در شتابان هاست دنبال كنيد.