Installer Lad os kryptere og sikre Nginx med SSL / TLS i Debian 9

Denne vejledning viser dig, hvordan du installerer og sikrer en Nginx-webserver på Debian 9 med et TLS-certifikat, der er udstedt gratis af Let's Encrypt Certificate Authority. Desuden vil vi konfigurere automatisk fornyelse af Lets 'Encrypt TLS-certifikater ved hjælp af et cron-job, inden certifikaterne udløber.

TLS, også kendt som Transport Layer Security, er en netværksprotokol, der bruger SSL-certifikater til at kryptere netværkstrafikken, der strømmer mellem en server og en klient eller mellem en webserver, såsom Nginx-server og en browser. Alle data, der udveksles mellem disse to enheder, er sikret, og forbindelsen kan ikke dekrypteres, selvom den opfanges ved hjælp af en teknik, som f.eks. Af en mand i midterangreb eller pakkesnuffning. Det certbot Pakke-software er det officielle klientværktøj, der leveres af Let's Encrypt CA, der kan bruges i processen med at generere og downloade gratis Lad os kryptere certifikater i Debian.

Krav

  • Installer LEMP Stack i Debian 9.
  • Et offentligt registreret domænenavn med korrekte DNS-poster (A-poster eller CNAME-poster for underdomæner).
  • Direkte adgang til serverens konsol eller fjernadgang til SSH til server.
  • En brugerkonto med root privilegier eller direkte adgang til root-konto.

Installer Certbot Client Utility

For at installere Lad os kryptere cerbot klientværktøj i Debian 9 fra Debians officielle arkiver, åbner en terminal og udsteder følgende kommando med root privilegier, som illustreret i det følgende skærmbillede.

apt-get install certbot

Installer Certbot på Debian 9

Debian apt hjælpeprogrammet, som er kommandolinjegrænsefladen til Debians hovedpakkechef, spørger dig efter nogle forudgående kontrol, om du accepterer at fortsætte med at installere certbot-pakken og alle de nødvendige afhængigheder. At acceptere processen med at installere software svaret med Ja (y) i serverens konsolprompt.

Få Lad os kryptere certifikatet

For at generere og downloade Lad os kryptere certifikater for et domæne, skal du først sørge for at Nginx webserver er i gang og i det mindste port 80 er tilgængelig fra internettet. For at kontrollere, om Nginx kører, udfør følgende kommandoer med root privilegier.

sudo systemctl status nginx

Hvis serveren ikke kører allerede, skal du starte Nginx-dæmon med kommandoen nedenfor.

sudo systemctl start nginx

Hvis du har en fælles firewall installeret i Debian, f.eks. UFW-firewall, som blokerer alle indgående forbindelser på port 80 og 443, skal du udstede nedenstående kommandoer for at åbne HTTP AMD HTTPS-porten i systemet.

sudo ufw tillade 80 / tcp

sudo ufw tillade 443 / tcp

For at opnå certifikater for dit domæne skal du udføre cerbot kommando i konsol med følgende parametre og flag som forklaret nedenfor. Kør kommandoen med root privilegier og lever dit domænenavn og alle andre underdomæner, du ønsker at få certifikater for ved at bruge -d flag. Også levere -standalone mulighed for at certbot ikke forstyrrer Nginx konfigurationsfiler. Nginx-serveren skal stoppes, mens du udsteder certifikater ved hjælp af denne indstilling.

Cerbot-kommandosyntaxen:

sudo certbot certonly -standalone -d dindomæne.com -d www.yourdomain.com

Når du først kører certbot-kommando og opnår certifikatet, bliver du bedt om at tilføje din email-adresse og acceptere Lad os kryptere servicevilkår. Skriv 'aat "acceptere servicevilkårene"ingen' at ikke dele din email-adresse med Let's Encrypt-partnere. Endelig, efter at du har fået certifikatet for dit domæne, skal du læse footer noterne for at finde certifikat systemsti og datoen de udløber.

Alternativ måde at få en Lad os kryptere SSL-certifikat

For at få et Let's Encrypt-certifikat via "Webroot"Plugin bruger nedenstående syntaks. Tilføj Nginx web root directory, som som standard er placeret i / Var / www / html / systemsti, mens du udsteder certbot-kommando med -webroot og -w flag. Sørg også for, at Nginx har fuld skrive tilladelser til web root directory for at oprette /.Kendt mappe.

Den -webrot mulighed for cerbot vil også bede dig tilføje din e-mail-adresse for certifikat fornyelse og sikkerhedsmeddelelser. Certbot klienten har indbygget kode, der kan registrere en falsk e-mail-adresse. Du skal angive en offentligt tilgængelig e-mail-adresse for at fortsætte med at få et certifikat.

certbot certonly -webroot -w / var / www / html / -d dindomæne.com -d www.yourdomain.com

Gemmer debug log til /var/log/letsencrypt/letsencrypt.log

Indtast e-mail-adresse (bruges til akut fornyelse og sikkerhedsmeddelelser) (Indtast 'c' til

annullere): [email protected] #En falsk e-mail-adresse vil blive opdaget

Der synes at være problemer med denne adresse. Indtast e-mail-adresse (bruges til

hastende fornyelse og sikkerhedsmeddelelser) Hvis du virkelig ønsker at springe over dette, kan du

Kør klienten med -register-usikret-uden-email, men sørg for det

backup din konto nøgle fra / etc / letsencrypt / accounts (Indtast 'c' for at annullere): [email protected]

---------------------------

Læs venligst Servicevilkårene på

https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree

for at kunne registrere sig hos ACME serveren på

https://acme-v01.api.letsencrypt.org/directory

---------------------------

(A) gree / (C) ancel: a

---------------------------

Vil du være villig til at dele din e-mail-adresse med Electronic Frontier

Foundation, en grundlægger af Let's Encrypt-projektet og non-profit

organisation der udvikler Certbot? Vi vil gerne sende dig en email om EFF og

vores arbejde med at kryptere internettet, beskytte brugerne og forsvare digitale rettigheder.

---------------------------

(Ja Nej: n

Indhentning af nyt certifikat

Udfører følgende udfordringer:

http-xnumx udfordring for www.domain.com

Brug af webroot-stien / var / www / html / for alle uovertruffen domæner.

Venter på bekræftelse ...

Rengøring af udfordringer

VIGTIGE BEMÆRKNINGER:

- Tillykke! Dit certifikat og kæde er blevet gemt på

/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Din

cert udløber på 2017-12-28. For at få en ny eller finjusteret version

af dette certifikat i fremtiden, skal du blot køre certbot igen. Til

ikke-interaktivt forny * alle * af dine certifikater, kør "certbot

forny"

- Dine kontooplysninger er gemt i din Certbot

konfigurationskatalog på / etc / letsencrypt. Du burde

lav en sikker backup af denne mappe nu. Denne konfiguration

bibliotek vil også indeholde certifikater og private nøgler opnået

af Certbot er det derfor ideelt at lave regelmæssige sikkerhedskopier af denne mappe.

- Hvis du kan lide Certbot, bedes du overveje at støtte vores arbejde ved at:

Donere til ISRG / Lad os kryptere: https://letsencrypt.org/donate

Donation til EFF: https://eff.org/donate-le

Få et SSL-certifikat med Certbot

Konfigurer Nginx til TLS (SSL)

En Nginx-fuld standard TLS-konfigurationsfil for et domæne skal se ud i nedenstående filuddrag.

/ Etc / nginx / sites-aktiverede / default-ssl filprøve:

    server {
                    lyt 443 ssl default_server;
                    lyt [::]: 443 ssl default_server;
       
                servernavn www.yourdomain.com yourdomain.com;
                #server navn _;
                                
                root / var / www / html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
               
               #SSL-certifikater
                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
                ssl_certificate_key "/ etc / letsencrypt / live / www. yourdomain.com/privkey.pem";
                ssl_dhparam /etc/nginx/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache delt: SSL: 1m;
               ssl_session_timeout 10m;
                ssl_ciphers HIGH:! aNULL:! MD5;
                ssl_prefer_server_ciphers on;
                
                add_header Strict-Transport-Security "max-age = 31536000;
                #includeSubDomains "altid;
 
                placering /
                    indeks index.php index.html index.htm;
                    try_files $ uri $ uri / /index.php?$args $ uri / = 404;
                                }

 
                
                indstil $ cache_uri $ request_uri;
                
                placering ~ /.bevisst {
                tillade alle;
                                                                }

               
                                #

                # # Med php-fpm (eller andre unix sockets):
                                fastcgi_pass unix: /var/run/php/php7.0-fpm.sock;
                # # Med php-cgi (eller andre tcp sockets):
                # fastcgi_pass 127.0.0.1: 9000;
                                }


# benægt adgangen til .htaccess-filer, hvis Apaches dokumentrot
                # stemmer overens med nginx's
                                #

                #location ~ /.ht {
                # benægte alt
                                #}

                
        }

Kodelinjerne til behandling af PHP-scripts via FastCGI Process Manager kan også findes i dette uddrag og er repræsenteret af følgende linjer.

placering ~ .php $ {
                                inkludere uddrag / fastcgi-php.conf;
fastcgi_pass unix: /var/run/php/php7.0-fpm.sock;
                                }

Installer Lad os kryptere certifikater i Nginx

Lad os kryptere certifikater og nøgler gemmes i /etc/letsencrypt/live/www.yourdomain.com/ bibliotek i Debian. Det ls Kommando over ovenstående mappe vil afsløre alle certifikatkomponenter, såsom kædefilen, fuldfilen, den private nøgle og certifikatfilen.

ls /etc/letsencrypt/live/www.yourdomain.com/

For at installere Let's Encrypt-certifikatet i Nginx webserver TLS-konfigurationsfil, skal du åbne Nginx standard-ssl fil og opdater nedenstående linjer for at afspejle Lad os kryptere certifikatfilstier til dit domæne, som vist i nedenstående uddrag.

nano / etc / nginx / sites-enabled / default-ssl

Skift følgende linjer som nedenfor:

                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem"; ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";

Set Lets kryptere certifikatstier

Også, hvis ssl_dhparam erklæring er til stede i Nginx SSL-konfiguration, skal du generere en ny 2048 bit Diffie-Hellman-nøgle ved at udstede følgende kommando. Diffie-Hellman nøgleparametre generation bør tage et stykke tid afhængigt af dit system tilfældighed eller entropi.

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Endelig skal du først kontrollere Nginx-konfigurationer for potentielle syntaksfejl, inden du aktiverer Nginx TLS-konfiguration ved at genstarte Nginx-dæmonen for at afspejle ændringer. Derefter, hvis Nginx-konfigurationsfiltest er vellykket, skal du genstarte Nginx-dæmonen for at indlæse den nye konfiguration sammen med Lad os kryptere certifikater ved at udstede nedenstående kommandoer.

nginx -t

service nginx genstart

Genstart Nginx

For at kontrollere, om nginx-tjenesten ejer en åbnet stikkontakt i lyttetilstand på port 443, skal du udføre netstat kommando som vist i nedenstående uddrag.

netstat -tulpn | grep -e 443 -e LISTEN

Du skal også åbne en browser og navigere til dit domænenavn via HTTPS-protokollen. Hvis Lad os kryptere certifikater anvendes med succes i Nginx, skal SSL-håndtrykket fungere glat uden at kaste fejl.

https://www.yourdomain.com

Force webtrafik til HTTPS

For at tvinge dine domænebesøgere til at gennemse din hjemmeside kun via HTTPS-protokollen, skal du åbne Nginx-sites-aktiverede standardkonfigurationsfil og tilføje den følgende linje, som tvinger alle anmodninger, der rammer port 80, til omdirigering med en 301-statuskode (permanent flyttet) til port 443.

nano / etc / nginx / sites-enabled / default

Omdirigeringer skal se ud som vist i nedenstående uddrag.

server navn www.yourdomain.com yourdomain.com;
returnere 301 https: // $ server_name $ request_uri;

Force HTTPS

Derefter genstart Nginx daemon for at anvende ændringen ved at udstede nedenstående kommando.

service nginx genstart

Afsluttende checks

For yderligere at undersøge certifikaterne genereret af Let's Encrypt CA, kan du bruge en moderne webbrowser, som f.eks. Chrome. Besøg dit domæne fra Chrome-browseren, og tryk på F12-funktionstasten for at åbne Developer Tools. Gå til fanen Sikkerhed og tryk på Se certifikat knappen for at åbne certifikatet, som vist i de følgende skærmbilleder.

Bekræft SSL-certifikat

SSL-certifikatoplysninger vises i Chrome-browseren

Et andet nyttigt værktøj til at undersøge SSL-certifikater viser sig at være openssl kommandolinjeværktøj. For at vise ekstra information til et Let's Encrypt CA-certifikat, udfør nedenstående kommando i en Linux-konsol.

openssl s_client -connect www.yourdomain.com:443

Tjek SSL cert med OpenSSL kommando

Auto Renew Lad os kryptere certifikat

For at automatisk forny et certifikat udstedt af Lad os kryptere CA før udløbsdatoen, planlæg et crontabjob til at køre en gang om dagen på 2: 00 AM ved at udstede følgende kommando. Udgangen af ​​det udførte cron job vil blive rettet til en logfil, gemt i /var/log/letsencrypt.log

crontab -e

Cron job for at forny certifikatet.

0 2 * * * certbot forny >> /var/log/letsencrypt.log

Det er alt! For andre mere avancerede konfigurationer vedrørende Lad os kryptere certifikater og hjælpeprogram besøg officiel dokumentation på følgende internetadresse https://certbot.eff.org/docs/.

Kilde

Spred kærligheden

Giv en kommentar

Din e-mail adresse vil ikke blive offentliggjort. Krævede felter er markeret *