Android

Secure nginx sa pag-encrypt natin sa debian 9

Как получить и настроить LetsEncrypt SSL сертификат для сайта?

Как получить и настроить LetsEncrypt SSL сертификат для сайта?

Talaan ng mga Nilalaman:

Anonim

Tayo ay Encrypt ay isang libre at bukas na awtoridad ng sertipiko na binuo ng Internet Security Research Group (ISRG). Ang mga sertipiko na inisyu ng Let Encrypt ay pinagkakatiwalaan ng halos lahat ng mga browser ngayon.

Sa tutorial na ito, ipapaliwanag namin kung paano gamitin ang tool ng Certbot upang makakuha ng isang libreng sertipiko ng SSL para sa Nginx sa Debian 9. Ipapakita din namin kung paano i-configure ang Nginx upang magamit ang SSL certificate at paganahin ang HTTP / 2.

Mga kinakailangan

Tiyakin na ang mga sumusunod na kinakailangan ay natutugunan bago magpatuloy sa tutorial na ito:

  • Naka-log in bilang isang gumagamit na may mga pribilehiyo ng sudo.Maaari ang isang domain name na tumuturo sa iyong public server IP. Gagamitin namin ang example.com .Mga naka-install na Nginx sa pamamagitan ng pagsunod sa mga tagubilingMay isang block ng server para sa iyong domain. Maaari mong sundin ang mga tagubiling ito para sa mga detalye sa kung paano lumikha ng isa.

I-install ang Certbot

Ang Certbot ay isang ganap na itinampok at madaling gamitin na tool na maaaring awtomatiko ang mga gawain para sa pagkuha at pag-update ng Mga sertipiko ng SSL at pag-configure ng mga web server upang magamit ang mga sertipiko. Ang sertipikong pakete ay kasama sa default na mga repositibong Debian.

I-update ang listahan ng mga pakete at i-install ang package ng certbot:

sudo apt update sudo apt install certbot

Bumuo ng Malakas na Dh (Diffie-Hellman) Grupo

Ang diffie-Hellman key exchange (DH) ay isang paraan ng ligtas na pagpapalitan ng mga key ng cryptographic sa isang hindi ligtas na channel ng komunikasyon. Kami ay bubuo ng isang bagong hanay ng mga 2048 bit DH mga parameter upang palakasin ang seguridad:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Kung gusto mo maaari mong baguhin ang laki ng hanggang sa 4096 bit, ngunit sa kasong iyon, ang henerasyon ay maaaring tumagal ng higit sa 30 minuto depende sa entropy ng system.

Pagkuha ng isang I-encrypt na SSL sertipiko

Upang makakuha ng isang SSL sertipiko para sa aming domain ay gagamitin namin ang plugin ng Webroot na gumagana sa pamamagitan ng paglikha ng isang pansamantalang file para sa pagpapatunay ng hiniling na domain sa ${webroot-path}/.well-known/acme-challenge . Ginagawa ng server ng Let's Encrypt ang mga kahilingan ng HTTP sa pansamantalang file upang mapatunayan na ang hiniling na domain ay nagpasiya sa server kung saan tumatakbo ang sertbot.

/var/lib/letsencrypt namin ang lahat ng mga kahilingan ng HTTP para sa .well-known/acme-challenge sa isang solong direktoryo, /var/lib/letsencrypt .

Ang sumusunod na mga utos ay lilikha ng direktoryo at gagawin itong mai-sulat para sa server ng Nginx.

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

Upang maiwasan ang pagdoble ng code lumikha ng sumusunod na dalawang snippet na isasama sa lahat ng aming mga file ng block ng Nginx server.

Buksan ang iyong text editor at lumikha ng unang snippet, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

Lumikha ng pangalawang snippet ssl.conf na kinabibilangan ng mga ssl.conf na inirerekomenda ni Mozilla, nagbibigay-daan sa OCSP Stapling, HTTP Strict Transport Security (HSTS), at nagpapatupad ng kaunting seguridad na nakatuon sa mga header ng

sudo nano /etc/nginx/snippets/ssl.conf /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;

Kapag tapos na, buksan ang file ng bloke ng domain server at isama ang letsencrypt.conf snippet tulad ng ipinakita sa ibaba:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/site-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Paganahin ang bagong bloke ng server sa pamamagitan ng paglikha ng isang simbolikong link sa direktoryo na sites-enabled ng mga sites-enabled :

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

I-restart ang serbisyo ng Nginx para sa mga pagbabago na magkakabisa:

sudo systemctl restart nginx

Maaari mo na ngayong patakbuhin ang Certbot gamit ang plugin ng webroot at makuha ang mga file ng sertipiko ng SSL sa pamamagitan ng pagpapalabas:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Kung matagumpay na makuha ang sertipiko ng SSL, ang sumusunod na mensahe ay mai-print sa iyong terminal:

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:

Susunod, i-edit ang block ng domain server tulad ng sumusunod:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/site-available/example.com

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 }

Gamit ang pagsasaayos sa itaas ay pinipilit natin ang HTTPS at pag-redirect mula sa www hanggang sa di-www na bersyon.

Reload ang serbisyo ng Nginx para sa mga pagbabago na magkakabisa:

sudo systemctl reload nginx

Pag-update ng Auto I-encrypt ang SSL certificate

Ang mga sertipiko ng Encrypt ay may bisa sa loob ng 90 araw. Upang awtomatikong i-renew ang mga sertipiko bago mag-expire, ang package ng certbot ay lumilikha ng isang cronjob na tumatakbo nang dalawang beses sa isang araw at awtomatikong i-renew ang anumang sertipiko 30 araw bago ito mag-expire.

Dahil gumagamit kami ng sertbot ng webbot na naka-plug sa isang beses na na-renew ang sertipiko mayroon din tayong i-reload ang serbisyo nginx. Idagdag ang --renew-hook "systemctl reload nginx" sa /etc/cron.d/certbot file kaya ganito ang hitsura:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * 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"

Subukan ang awtomatikong proseso ng pag-renew, sa pamamagitan ng pagpapatakbo ng utos na ito:

sudo certbot renew --dry-run

Kung walang mga pagkakamali, nangangahulugan ito na matagumpay ang proseso ng pag-update.

Konklusyon

Ang pagkakaroon ng isang SSL sertipiko ay dapat na ngayon. Tinitiyak nito ang iyong website, pinatataas ang posisyon ng ranggo ng SERP, at pinapayagan kang paganahin ang HTTP / 2 sa iyong web server.

Sa tutorial na ito, ginamit mo ang client ng Let Encrypt, sertbot upang makabuo ng mga sertipiko ng SSL para sa iyong domain. Nilikha mo rin ang mga snippet ng Nginx upang maiwasan ang pagdoble ng code at na-configure ang Nginx upang magamit ang mga sertipiko. Sa pagtatapos ng tutorial na naka-set up ka ng isang cronjob para sa pag-renew ng awtomatikong sertipiko.

nginx debian hayaan nating i-encrypt ang certbot ssl

Ang post na ito ay isang bahagi ng Paano Mag-install ng LEMP Stack sa Debian 9 series.

Iba pang mga post sa seryeng ito:

• Paano I-install ang MariaDB sa Ubuntu 18.04 • Paano Mag-install ng Nginx sa Debian 9 • Paano Mag-install ng PHP sa Debian 9 • Paano Mag-set up ng Nginx Server Blocks sa Debian 9 • Secure Nginx sa Pag-encrypt Natin sa Debian 9