Forutsetninger
- En server med statisk offentlig IP. Det er her Nginx kjører.
- Backend-servere med det tiltenkte nettstedet som kjører over HTTP
- Et registrert domenenavn. Jeg skal bruke ranvirslog.com som mitt primære domenenavn og de to nettstedene er på FQDNs - ww1.ranvirslog.com og ww2ranvirslog.com
Oppsett
Så IP-adressene har endret seg siden forrige gang, siden jeg gjør dette oppsettet igjen. Her er de nye IP-ene og vertsnavnene.
VM / vertsnavn | Offentlig IP | Privat IP | Rolle / funksjon |
ReverseProxy | 68.183.214.151 | 10.135.127.136 | TLS avslutningspunkt og omvendt proxy-server |
web1 | Ikke relevant | 10.135.126.102 | Hosting ww1.ranvirslog.com nettsted over port 80 HTTP |
web2 | Ikke relevant | 10.135.126.187 | Hosting WW2.ranvirslog.com nettsted over port 80 HTTP |
DNS-postene er konfigurert slik at begge nettstedene (forskjellige underdomener) peker mot samme statiske offentlige IP. Dette skjer tilfeldigvis IP-adressen til vår Nginx-omvendte proxy:
En rekord | Verdi |
ww1.ranvirslog.com | 68.183.214.151 |
WW2.ranvirslog.com | 68.183.214.151 |
For å få vårt omvendte DNS til å fungere over ukryptert HTTP, opprettet vi to filer i / etc / conf.d / kalt ww1.conf og ww2.conf hver med følgende konfigurasjon:
/ etc / conf.d / ww1.konf
serverhør 80;
hør [::]: 80;
servernavn ww1.ranvirslog.com;
plassering /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering av;
proxy_set_header X-Real-IP $ remote_addr;
/ etc / conf.d / ww2.konf
serverhør 80;
hør [::]: 80;
servernavn ww2.ranvirslog.com;
plassering /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering av;
proxy_set_header X-Real-IP $ remote_addr;
Operativsystemet vi bruker er Ubuntu 18.04 LTS og vi har fjernet filen / etc / nginx / sites-enabled / default slik at Nginx kan fungere utelukkende som en omvendt DNS ved hjelp av konfigurasjonene vist ovenfor.
Objektiv
Med omvendt DNS (og backend-nettsteder) allerede i gang, er vårt mål å installere et enkelt TLS-sertifikat for begge FQDN-ene (det er ww1.ranvirslog.com og ww2.ranvirslog.com) på vår Nginx omvendte proxy.
Trafikken mellom en hvilken som helst klient og den omvendte proxyen blir kryptert, men trafikken mellom den omvendte proxyen og backend-serverne blir ikke kryptert. Dette er imidlertid fortsatt et uendelig sikrere alternativ enn ikke å ha HTTPS i det hele tatt. For tilfeller der den omvendte proxyen og de forskjellige webserverne er på samme vert, si at hvis du bruker Docker-containere til å være vert for alle på samme VPS, så er selv denne ukrypterte trafikken inneholdt på en enkelt vert.
Installere Certbot
Certbot er et klientprogram som vil kjøre på vår omvendte proxy-server og forhandle et TLS-sertifikat med LetsEncrypt. Det vil bevise for LetsEncrypt at serveren faktisk har kontroll over FQDN-ene som den hevder å ha kontroll over. Vi vil ikke bekymre oss for hvordan Certbot gjør det.
Tradisjonelt kan du bruke Certbot som en frittstående programvare som bare vil få sertifikatene (som i utgangspunktet bare er lange kryptografiske nøkler) og lagre det på serveren. Men heldigvis er det for de fleste operativsystemer tilpassede plugins for Nginx, Apache og andre programvare. Vi installerer Certbot med Nginx-plugin. Dette vil automatisk konfigurere Nginx til å bruke de nyinnhentede nøklene og kvitte seg med usikre regler som å lytte etter HTTP på port 80.
Hvis du bruker Debian-baserte systemer, som i mitt tilfelle, bruker jeg Ubuntu 18.04 LTS, så er installasjonen en lek.
$ sudo apt oppdatering$ sudo apt installere programvare-egenskaper-vanlig
$ sudo add-apt-repository universet
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt oppdatering
$ sudo apt installere python-certbot-nginx
Andre operativsystemer, din RedHat, Gentoo, Fedora kan følge de offisielle instruksjonene som er oppført her.
Når du har installert Certbot med Nginx Plugin for din kombinasjon av operativsystem kan vi komme i gang.
Få TLS-sertifikater
For å få TLS-sertifikatet for første gang, kjør følgende kommando:
$ sudo certbot --nginxDette kommer til å gå gjennom en rekke interaktive spørsmål, som vist nedenfor:
- Skriv inn epostadressen din
Lagrer feilsøkingslogg til / var / log / letsencrypt / letsencrypt.Logg
Plugins valgt: Authenticator nginx, Installer nginx
Skriv inn e-postadresse (brukes til pressemeldinger om fornyelse og sikkerhet) (Angi 'c' for å avbryte): [e-postbeskyttet]
- Godta vilkårene
Les vilkårene for bruk på https: // letsencrypt.org / dokumenter / LE-SA-v1.2. november-15-2017.pdf. Du må godta å registrere deg hos ACME-serveren på https: // acme-v02.api.letsencrypt.org / katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
- Valgfritt nyhetsbrev
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ville du være villig til å dele e-postadressen din med Electronic Frontier Foundation, en av grunnleggerne av Let's Encrypt-prosjektet og den ideelle organisasjonen som utvikler Certbot? Vi vil gjerne sende deg e-post om arbeidet vårt med å kryptere nettet, EFF-nyheter, kampanjer og måter å støtte digital frihet på.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y
- Det vil da oppdage domenenavnene på serveren din, og hvis du vil velge alle domenene, trykker du bare
Hvilke navn vil du aktivere HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Velg de aktuelle tallene atskilt med komma og / eller mellomrom, eller la inntastingen være tom for å velge alle alternativene som vises (Angi 'c' for å avbryte):
- Omdiriger alt til TLS. Jeg valgte alternativ 2 for å omdirigere alt til SSL, men brukssaken din kan variere. For nye backend-installasjoner er det trygt å velge alternativ 2.
Velg om du vil omdirigere HTTP-trafikk til HTTPS, og fjern HTTP-tilgang eller ikke.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Ingen omdirigering - Gjør ingen ytterligere endringer i webserverkonfigurasjonen.
2: Viderekobling - Gjør alle forespørsler viderekobling for å sikre HTTPS-tilgang. Velg dette for nye nettsteder, eller hvis du er sikker på at nettstedet ditt fungerer på HTTPS. Du kan angre denne endringen ved å redigere webserverens konfigurasjon.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Velg riktig nummer [1-2] og deretter [enter] (trykk 'c' for å avbryte): 2
Hvis alt gikk bra, vil det vise deg denne meldingen, bare for domenenavnene dine i stedet.
Gratulerer! Du har aktivert https: // ww1.ranvirslog.com og https: // ww2.ranvirslog.com Du kan besøke FQDNs og legge merke til at nettstedene nå har hengelåstegnet som antyder at alt er kryptert.
Se på konfigurasjonsfilene
Hvis du ser på konfigurasjonsfilene vi opprettet tidligere, nemlig / etc / conf.d / ww1.conf og / etc / conf.d / ww2.conf, vil du legge merke til at alle "Listen 80" -reglene har forsvunnet, og noen få nye linjer er lagt til, forteller serveren at kommunikasjonen må krypteres og plasseringen av sertifikatene og nøklene for å utføre den nevnte krypteringen.
Jeg anbefaler på det sterkeste å se gjennom konfigurasjonsfilene, siden det også kan lære deg hvordan du installerer serier og skriver konfigurasjonsfiler riktig.
Sertifisering fornyelse
Typiske LetsEncrypt-sertifikater er gyldige i 90 dager, og før de utløper, må du fornye dem. Du kan bruke Certbot til å tørke fornyelsen ved å kjøre kommandoen:
$ sudo certbot fornye - tørkHvis operasjonen lykkes, vil du se følgende melding:
Gratulerer, alle fornyelser lyktes. Følgende serier er fornyet:
/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (suksess)** TØRR KJØRING: simulering av 'certbot fornye' nær sertifikatutløpet
** (Testsertifikatene ovenfor er ikke lagret.)
Nå kan du legge til en Cron-jobb som vil forsøke fornyelse hver uke eller så. Certbot vil ikke fornye certene med mindre de virkelig skyldes det, så du trenger ikke å bekymre deg. Kommandoen for faktisk fornyelse er:
$ certbot fornyeLegg det til root's cron-jobb ved å bruke:
$ sudo crontab -eI den følgende ledeteksten velger du favorittredigeringsprogrammet ditt (Velg Nano hvis du er usikker) og legger til følgende linjer på slutten av den nå åpnede filen:
..# Du kan for eksempel kjøre en sikkerhetskopi av alle brukerkontoer
# ved 5 a.m hver uke med:
# 0 5 * * 1 tjære -zcf / var / sikkerhetskopier / hjem.tgz / hjem /
#
# For mer informasjon, se manualsidene til crontab (5) og cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 certbot fornye
Dette vil kjøre certbot fornye-kommandoen 2 om morgenen når som helst tilfeldig, den andre dagen i hver uke.
Konklusjon
Hvis du ikke er kjent med TLS-sertifikater, kan det være risikabelt å eksperimentere med ting som HSTS. Siden disse endringene er irreversible. Imidlertid, hvis du vil gå ned i kaninhullet til sikkerhet, kan jeg anbefale Troy Hunts blogg, som er en av hovedinspirasjonene bak denne oppskriften.