Android

Veilige nginx met laten we coderen op centos 8

Nginx без downtime на продакшн системе / Nginx hot reload

Nginx без downtime на продакшн системе / Nginx hot reload

Inhoudsopgave:

Anonim

Let's Encrypt is een gratis, geautomatiseerde en open certificaatautoriteit ontwikkeld door de Internet Security Research Group (ISRG) die gratis SSL-certificaten levert.

Certificaten uitgegeven door Let's Encrypt worden vertrouwd door alle belangrijke browsers en zijn 90 dagen geldig vanaf de uitgiftedatum.

In deze zelfstudie geven we stapsgewijze instructies over het installeren van een gratis Let's Encrypt SSL-certificaat op CentOS 8 met Nginx als webserver. We zullen ook laten zien hoe Nginx moet worden geconfigureerd om het SSL-certificaat te gebruiken en HTTP / 2 in te schakelen.

voorwaarden

Controleer voordat u doorgaat of aan de volgende voorwaarden is voldaan:

  • U hebt een domeinnaam die verwijst naar uw openbare IP. We gebruiken example.com . Nginx is geïnstalleerd op uw CentOS-server. Uw firewall is geconfigureerd om verbindingen op poorten 80 en 443 te accepteren.

Certbot installeren

Certbot is een gratis opdrachtregelprogramma dat het proces vereenvoudigt voor het verkrijgen en vernieuwen van Let's Encrypt SSL-certificaten van en het automatisch inschakelen van HTTPS op uw server.

Het certbot-pakket is niet inbegrepen in de standaard CentOS 8-opslagplaatsen, maar kan worden gedownload van de website van de leverancier.

Voer de volgende wget opdracht uit als root- of sudo-gebruiker om het certbot-script te downloaden naar de map /usr/local/bin :

sudo wget -P /usr/local/bin

Nadat de download is voltooid, maakt u het bestand uitvoerbaar:

sudo chmod +x /usr/local/bin/certbot-auto

Genereren van Strong Dh (Diffie-Hellman) Groep

Diffie-Hellman-sleuteluitwisseling (DH) is een methode voor het veilig uitwisselen van cryptografische sleutels via een onbeveiligd communicatiekanaal.

Genereer een nieuwe set 2048 bit DH-parameters door de volgende opdracht te typen:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Het verkrijgen van een Let's Encrypt SSL-certificaat

Om een ​​SSL-certificaat voor het domein te verkrijgen, gaan we de Webroot-plug-in gebruiken die werkt door een tijdelijk bestand te maken voor het valideren van het gevraagde domein in de ${webroot-path}/.well-known/acme-challenge . De Let's Encrypt-server doet HTTP-aanvragen bij het tijdelijke bestand om te valideren dat het aangevraagde domein wordt opgelost naar de server waarop certbot wordt uitgevoerd.

Om het eenvoudiger te maken, gaan we alle HTTP-aanvragen voor .well-known/acme-challenge /var/lib/letsencrypt aan een enkele map, /var/lib/letsencrypt .

De volgende opdrachten maken de map en maken deze beschrijfbaar voor de Nginx-server.

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

Om dubbele code te voorkomen, maakt u de volgende twee fragmenten die worden opgenomen in alle Nginx-serverblokbestanden:

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: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 off; 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=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Bovenstaand fragment bevat de door Mozilla aanbevolen chippers, maakt OCSP nieten, HTTP Strict Transport Security (HSTS) mogelijk en dwingt weinig op beveiliging gerichte HTTP-headers af.

Nadat de fragmenten zijn gemaakt, opent u het domeinserverblok en neemt u het letsencrypt.conf fragment op, zoals hieronder wordt weergegeven:

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

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

Laad de Nginx-configuratie opnieuw om de wijzigingen door te voeren:

sudo systemctl reload nginx

Voer de certbot-tool uit met de webroot-plug-in om de SSL-certificaatbestanden voor uw domein te verkrijgen:

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

Als dit de eerste keer is dat u certbot , installeert het hulpprogramma de ontbrekende afhankelijkheden.

Nadat het SSL-certificaat met succes is verkregen, zal certbot het volgende bericht afdrukken:

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-03-12. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto 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 u de certificaatbestanden hebt, kunt u uw domein-serverblok als volgt bewerken:

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

Met de bovenstaande configuratie dwingen we HTTPS en sturen we de www-versie om naar een niet-www-versie.

Laad ten slotte de Nginx-service opnieuw om de wijzigingen door te voeren:

sudo systemctl reload nginx

Open nu uw website met https:// en u ziet een groen slotpictogram.

Automatisch vernieuwen Let's Encrypt SSL-certificaat

De certificaten van Let's Encrypt zijn 90 dagen geldig. Als u de certificaten automatisch wilt verlengen voordat ze verlopen, maakt u een cronjob die twee keer per dag wordt uitgevoerd en wordt elk certificaat 30 dagen voor het verlopen automatisch verlengd.

Gebruik de opdracht crontab om een ​​nieuwe cronjob te maken:

sudo crontab -e

Plak de volgende regel:

0 */12 * * * root test -x /usr/local/bin/certbot-auto -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && /usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"

Sla het bestand op en sluit het.

Om het vernieuwingsproces te testen, kunt u de certbot-opdracht gebruiken, gevolgd door de --dry-run schakelaar:

sudo certbot renew --dry-run

Als er geen fouten zijn, betekent dit dat het testvernieuwingsproces succesvol was.

Conclusie

In deze tutorial hebben we u laten zien hoe u de Let's Encrypt-client, certbot, kunt gebruiken om SSL-certificaten voor uw domein te downloaden. We hebben ook Nginx-fragmenten gemaakt om dubbele code te voorkomen en Nginx geconfigureerd om de certificaten te gebruiken. Aan het einde van de zelfstudie hebben we een cronjob ingesteld voor automatische certificaatverlenging.

Bezoek de documentatiepagina voor meer informatie over Certbot.

nginx centos laten we certbot ssl coderen