Android

Säkra nginx med låt oss kryptera på centos 7

NGINX за пределами nginx: njs, nginMesh, Unit... / Николай Шадрин (NGINX)

NGINX за пределами nginx: njs, nginMesh, Unit... / Николай Шадрин (NGINX)

Innehållsförteckning:

Anonim

Let's Encrypt är en fri och öppen certifikatutfärdare utvecklad av Internet Security Research Group (ISRG). Certifikat som utfärdas av Let's Encrypt litar på nästan alla webbläsare idag.

I den här tutorialen kommer vi att ge steg för steg instruktioner om hur du säkra din Nginx med Let's Encrypt med certbot-verktyget på CentOS 7.

förutsättningar

Se till att du har uppfyllt följande förutsättningar innan du fortsätter med denna handledning:

  • Du har ett domännamn som pekar på din offentliga server-IP. I den här tutorialen kommer vi att använda example.com Du har aktiverat EPEL-förvaret och installerat Nginx genom att följa Hur du installerar Nginx på CentOS 7.

Installera Certbot

Certbot är ett lättanvänt verktyg som kan automatisera uppgifterna för att få och förnya Let's Encrypt SSL-certifikat och konfigurera webbservrar.

Så här installerar du certbot-paketet från EPEL-arkivet:

sudo yum install certbot

Generera Strong Dh (Diffie-Hellman) -gruppen

Diffie – Hellman nyckelutbyte (DH) är en metod för att säkert utbyta kryptografiska nycklar över en osäker kommunikationskanal.

Generera en ny uppsättning 2048-bitars DH-parametrar genom att skriva följande kommando:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Om du vill kan du ändra storleken upp till 4096 bitar, men i så fall kan generationen ta mer än 30 minuter beroende på systemets entropi.

Få ett SSL-certifikat för Let's Encrypt

För att få ett SSL-certifikat för vår domän kommer vi att använda Webroot-plugin som fungerar genom att skapa en tillfällig fil för validering av den begärda domänen i ${webroot-path}/.well-known/acme-challenge katalogen. Let's Encrypt-servern gör HTTP-förfrågningar till den tillfälliga filen för att bekräfta att den begärda domänen löses till servern där certbot körs.

För att göra det enklare kommer vi att kartlägga alla HTTP-begäranden för .well-known/acme-challenge till en enda katalog, /var/lib/letsencrypt .

Följande kommandon skapar katalogen och gör den skrivbar för Nginx-servern.

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

För att undvika duplicering av kod skapar du följande två utdrag som vi kommer att inkludera i alla våra Nginx-serverblockfiler:

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

Utdraget ovan innehåller de flishuggare som rekommenderas av Mozilla, möjliggör OCSP-häftning, HTTP Strict Transport Security (HSTS) och upprätthåller få säkerhetsfokuserade

När utdragen har skapats öppnar du domänserverns block och inkluderar letsencrypt.conf som visas nedan:

/etc/nginx/conf.d/example.com.conf

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

Ladda om Nginx-konfigurationen så att ändringar träder i kraft:

sudo systemctl reload nginx

Du kan nu köra Certbot med webroot-plugin och skaffa SSL-certifikatfiler för din domän genom att utfärda:

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

Om SSL-certifikatet erhålls framgångsrikt kommer certbot att skriva ut följande meddelande:

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-06-11. 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:

Nu när du har certifikatfilerna kan du redigera ditt domänserverblock enligt följande:

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

Med konfigurationen ovan tvingar vi HTTPS och omdirigerar versionen www till non www.

Ladda slutligen Nginx-tjänsten för att ändringarna ska träda i kraft:

sudo systemctl reload nginx

Automatisk förnyelse av Let's Encrypt SSL-certifikat

Let's Encrypts certifikat är giltiga i 90 dagar. För att automatiskt förnya certifikaten innan de löper ut, skapar vi en cronjob som körs två gånger om dagen och automatiskt förnyar alla certifikat 30 dagar innan det löper ut.

Kör crontab kommandot för att skapa en ny cronjob:

sudo crontab -e

Klistra in följande rader:

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"

Spara och stäng filen.

För att testa förnyelseprocessen kan du använda certbot-kommandot följt av - --dry-run omkopplaren:

sudo certbot renew --dry-run

Om det inte finns några fel betyder det att testförnyelseprocessen var framgångsrik.

Slutsats

I den här tutorialen använde du Let's Encrypt-klienten, certbot för att ladda ner SSL-certifikat för din domän. Du har också skapat Nginx-kodavsnitt för att undvika kopiering av kod och konfigurerat Nginx för att använda certifikaten. I slutet av självstudien har du skapat en cronjob för automatisk förnyelse av certifikat.

nginx centos låt oss kryptera certbot ssl

Det här inlägget är en del av Install LEMP Stack i CentOS 7-serien.

Andra inlägg i denna serie:

• Hur man installerar Nginx på CentOS 7 • Säkra Nginx med Let's Encrypt på CentOS 7 • Installera MariaDB på CentOS 7 • Installera PHP 7 på CentOS 7 • Hur man installerar Nginx-serverblock på CentOS 7