Android

Beveilig nginx met laten we coderen op centos 7

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

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

Inhoudsopgave:

Anonim

Let's Encrypt is een gratis en open certificaatautoriteit ontwikkeld door de Internet Security Research Group (ISRG). Certificaten uitgegeven door Let's Encrypt worden tegenwoordig door bijna alle browsers vertrouwd.

In deze zelfstudie geven we stapsgewijze instructies over hoe u uw Nginx kunt beveiligen met Let's Encrypt met behulp van de certbot-tool op CentOS 7.

voorwaarden

Zorg ervoor dat u aan de volgende voorwaarden hebt voldaan voordat u doorgaat met deze zelfstudie:

  • U hebt een domeinnaam die verwijst naar het IP-adres van uw openbare server. In deze tutorial zullen we example.com . U hebt de EPEL-repository ingeschakeld en Nginx geïnstalleerd door Nginx te volgen op CentOS 7.

Certbot installeren

Certbot is een eenvoudig te gebruiken hulpmiddel dat de taken voor het verkrijgen en vernieuwen van Let's Encrypt SSL-certificaten en het configureren van webservers kan automatiseren.

Om het certbot-pakket van de EPEL-repositoryrun te installeren:

sudo yum install certbot

Genereer Strong Dh (Diffie-Hellman) Group

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 Als u wilt, kunt u de grootte wijzigen tot 4096 bits, maar in dat geval kan het genereren meer dan 30 minuten duren, afhankelijk van de entropie van het systeem.

Het verkrijgen van een Let's Encrypt SSL-certificaat

Om een ​​SSL-certificaat voor ons domein te verkrijgen, gaan we de Webroot-plug-in gebruiken die werkt door een tijdelijk bestand te maken voor het valideren van het aangevraagde 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 we in al onze Nginx-serverblokbestanden zullen opnemen:

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;

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

U kunt Certbot nu uitvoeren met de webroot-plug-in en de SSL-certificaatbestanden voor uw domein verkrijgen door het volgende uit te geven:

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

Als 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 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 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

Automatisch vernieuwen Let's Encrypt SSL-certificaat

De certificaten van Let's Encrypt zijn 90 dagen geldig. Om de certificaten automatisch te verlengen voordat ze verlopen, maken we een cronjob die twee keer per dag wordt uitgevoerd en 30 dagen voor het verlopen automatisch elk certificaat vernieuwt.

Voer de opdracht crontab uit om een ​​nieuwe cronjob te maken:

sudo crontab -e

Plak de volgende regels:

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"

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 zelfstudie hebt u de Let's Encrypt-client, certbot gebruikt om SSL-certificaten voor uw domein te downloaden. U hebt ook Nginx-fragmenten gemaakt om dubbele code te voorkomen en Nginx geconfigureerd om de certificaten te gebruiken. Aan het einde van de zelfstudie hebt u een cronjob ingesteld voor automatische certificaatverlenging.

nginx centos laten we certbot ssl coderen

Dit bericht maakt deel uit van de Install LEMP Stack op CentOS 7-serie.

Andere berichten in deze serie:

• Hoe Nginx op CentOS 7 te installeren • Beveiligde Nginx met Let's Encrypt op CentOS 7 • MariaDB op CentOS 7 installeren • PHP 7 op CentOS 7 installeren • Nginx serverblokken op CentOS 7 instellen