Android

Secure nginx sa pag-encrypt natin sa ubuntu 16.04

Установка бесплатного SSL-сертификата (A-grade) Let's Encrypt на nginx (Ubuntu 16.04)

Установка бесплатного SSL-сертификата (A-grade) Let's Encrypt на nginx (Ubuntu 16.04)

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, bibigyan kami ng isang hakbang sa pamamagitan ng mga tagubilin sa hakbang tungkol sa kung paano ma-secure ang iyong Nginx gamit ang Let's Encrypt gamit ang sertbot tool sa Ubuntu 16.04.

Mga kinakailangan

Tiyaking nakilala mo ang sumusunod na mga kinakailangan bago magpatuloy sa tutorial na ito:

  • Mayroon kang isang domain name na tumuturo sa iyong public server IP. Sa tutorial na ito gagamitin namin ang example.com .May naka-install ka ng Nginx sa pamamagitan ng pagsunod sa Paano Paano I-install ang Nginx sa Ubuntu 16.04.

I-install ang Certbot

Ang Certbot ay isang utility na nakasulat sa python na maaaring awtomatiko ang mga gawain para sa pagkuha at pag-renew ng Mga sertipiko ng SSL at pag-configure ng mga web server.

Una i-install ang software-properties-common package na nagbibigay ng add-apt-repository tool na kinakailangan para sa pagdaragdag ng mga karagdagang PPA.

I-update ang index ng mga pakete at i software-properties-common install ang mga pag software-properties-common install ng software-properties-common sa:

sudo apt update sudo apt install software-properties-common

Kapag nakumpleto ang pag-install, idagdag ang repository ng PPA ng sertbot sa iyong system gamit ang sumusunod na utos:

sudo add-apt-repository ppa:certbot/certbot

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. Bumuo ng isang bagong hanay ng mga 2048 bit na mga parameter ng DH 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.

Upang gawing mas simple ay i-map namin ang lahat ng mga kahilingan sa 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 namin sa lahat ng aming mga file ng block ng Nginx server.

/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: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;

Kasama sa snippet sa itaas ang rekomendasyon ng tsinelas ni Mozilla, pinapayagan ang OCSP Stapling, HTTP Strict Transport Security (HSTS) at ipinatupad ang ilang seguridad ‑ na nakatuon ang mga header ng

Kapag nilikha ang mga snippet, buksan ang bloke ng server ng domain at isama ang letsencrypt.conf snippet tulad ng ipinakita sa ibaba:

/etc/nginx/sites-available/example.com.conf

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

Isaaktibo ang server block sa pamamagitan ng paglikha ng isang simbolikong link mula sa mga sites-available sa mga sites-enabled :

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

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

sudo systemctl reload nginx

Patakbuhin ang script ng sertbot gamit ang plugin ng webroot at makuha ang mga file ng sertipiko ng SSL:

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

Kung matagumpay na nakuha ang sertipiko ng SSL, i-print ng sertbot ang sumusunod na mensahe:

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-04-23. 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" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Ngayon na mayroon kaming mga file ng sertipiko, i-edit ang block ng domain server tulad ng sumusunod:

/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 }

Gamit ang pagsasaayos sa itaas ay pinipilit natin ang HTTPS at muling pag-redirect sa bersyon ng domain ng domain sa non www bersyon ng non www .

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

sudo systemctl reload nginx

Pag-renew ng auto ng 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 sertipikong package ay lumilikha ng isang cronjob na tatakbo nang dalawang beses sa isang araw at awtomatikong mai-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. Upang magawa ito ay --renew-hook "systemctl reload nginx" sa /etc/cron.d/certbot file na tulad nito:

/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"

Upang masubukan ang proseso ng pag-renew, gamitin ang switch ng certbot --dry-run :

sudo certbot renew --dry-run

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

Konklusyon

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

nginx ubuntu sabihin encrypt ang sertbot ssl