Förutsättningar
- En server med statisk offentlig IP. Det är här Nginx körs.
- Backend-servrar med den avsedda webbplatsen som körs över HTTP
- Ett registrerat domännamn. Jag kommer att använda ranvirslog.com som mitt primära domännamn och de två webbplatserna finns på FQDNs - ww1.ranvirslog.com och ww2ranvirslog.com
Uppstart
Så IP-adresserna har ändrats sedan förra gången, eftersom jag gör den här inställningen igen. Här är de nya IP-adresserna och värdnamnen.
VM / värdnamn | Offentlig IP | Privat IP | Roll / funktion |
ReverseProxy | 68.183.214.151 | 10.135.127.136 | TLS avslutningspunkt och omvänd proxyserver |
webb1 | Ej tillämpligt | 10.135.126.102 | Hosting ww1.ranvirslog.com webbplats över port 80 HTTP |
web2 | Ej tillämpligt | 10.135.126.187 | Hosting ww2.ranvirslog.com webbplats över port 80 HTTP |
DNS-posterna är inställda så att båda webbplatserna (olika underdomäner) pekar på samma statiska offentliga IP. Detta råkar vara vår Nginx omvända proxys IP-adress:
En skiva | Värde |
ww1.ranvirslog.com | 68.183.214.151 |
ww2.ranvirslog.com | 68.183.214.151 |
För att få vår omvända DNS att fungera över okrypterad HTTP skapade vi två filer i / etc / conf.d / heter ww1.conf och ww2.conf var och en med följande konfiguration:
/ etc / conf.d / ww1.konf
serverlyssna 80;
lyssna [::]: 80;
server_namn ww1.ranvirslog.com;
plats /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
/ etc / conf.d / ww2.konf
serverlyssna 80;
lyssna [::]: 80;
server_namn ww2.ranvirslog.com;
plats /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Operativsystemet vi använder är Ubuntu 18.04 LTS och vi har tog bort filen / etc / nginx / sites-enabled / default så att Nginx kan fungera som en omvänd DNS med hjälp av konfigurationerna som visas ovan.
Mål
Med omvänd DNS (och backendwebbplatserna) redan igång är vårt mål att installera ett enda TLS-certifikat för båda FQDN: erna (det är ww1.ranvirslog.com och ww2.ranvirslog.com) på vår Nginx omvänd proxy.
Trafiken mellan vilken klient som helst och den omvända proxyn kommer att krypteras men trafiken mellan den omvända proxyn och backend-servrarna krypteras inte. Detta är dock fortfarande ett oändligt säkrare alternativ än att inte ha HTTPS alls. För fall där den omvända proxyn och de olika webbservrarna är på samma värd, säg om du använder Docker-behållare för att vara värd för alla på samma VPS, så till och med denna okrypterade trafik finns på en enda värd.
Installera Certbot
Certbot är ett klientprogram som körs på vår omvända proxyserver och förhandlar om ett TLS-certifikat med LetsEncrypt. Det kommer att bevisa för LetsEncrypt att servern faktiskt har kontroll över FQDN: erna som den påstår sig ha kontroll över. Vi kommer inte att oroa oss för hur Certbot gör det.
Traditionellt kan du använda Certbot som en fristående programvara som bara kommer att få certifikaten (som i grunden bara är långa kryptografiska nycklar) och spara det på servern. Men tack och lov, för de flesta operativsystem finns anpassade plugins för Nginx, Apache och andra programvaror. Vi installerar Certbot med Nginx-plugin. Detta konfigurerar Nginx automatiskt för att använda nycklarna och bli av med osäkra regler som att lyssna på HTTP på port 80.
Om du använder Debian-baserade system, som i mitt fall använder jag Ubuntu 18.04 LTS, då är installationen en lek.
$ sudo apt uppdatering$ sudo apt installera programvaruegenskaper-gemensamma
$ sudo add-apt-repository-universum
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt uppdatering
$ sudo apt installera python-certbot-nginx
Andra operativsystem, din RedHat, Gentoo, Fedora kan följa de officiella instruktionerna som anges här.
När du har installerat Certbot med Nginx Plugin för din kombination av operativsystem kan vi komma igång.
Få TLS-certifikat
För att få TLS-certifikatet för första gången kör du följande kommando:
$ sudo certbot --nginxDetta kommer att gå igenom en serie interaktiva frågor, som visas nedan:
- Skriv in din e-postadress
Sparar felsökningslogg till / var / log / letsencrypt / letsencrypt.logga
Insticksprogram valda: Authenticator nginx, Installer nginx
Ange e-postadress (används för brådskande förnyelse och säkerhetsmeddelanden) (Ange 'c' för att avbryta): [e-postskyddad]
- Håller med TOS
Läs användarvillkoren på https: // letsencrypt.org / dokument / LE-SA-v1.2 november-15-2017.pdf. Du måste godkänna för att registrera dig hos ACME-servern på https: // acme-v02.api.letsencrypt.org / katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
- Valfritt nyhetsbrev
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Skulle du vara villig att dela din e-postadress med Electronic Frontier Foundation, en grundare av Let's Encrypt-projektet och den ideella organisationen som utvecklar Certbot? Vi vill skicka e-post om vårt arbete med att kryptera nätet, EFF-nyheter, kampanjer och sätt att stödja digital frihet.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y
- Det kommer då att upptäcka domännamnen på din server, och om du vill välja alla domäner trycker du helt enkelt på
Vilka namn vill du aktivera HTTPS för?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Välj lämpliga siffror åtskilda av komma och / eller mellanslag, eller lämna inmatningen tom för att välja alla alternativ som visas (Ange 'c' för att avbryta):
- Omdirigera allt till TLS. Jag valde alternativ 2 för att omdirigera allt till SSL men ditt användningsfall kan skilja sig åt. För nya backendinstallationer är det säkert att välja alternativ 2.
Välj om du vill omdirigera HTTP-trafik till HTTPS eller ta bort HTTP-åtkomst.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Ingen omdirigering - Gör inga ytterligare ändringar i webbserverns konfiguration.
2: omdirigering - Gör alla begäranden omdirigera för att säkerställa HTTPS-åtkomst. Välj detta för nya webbplatser, eller om du är säker på att din webbplats fungerar på HTTPS. Du kan ångra denna ändring genom att redigera din webbservers konfiguration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Välj lämpligt nummer [1-2] och sedan [enter] (tryck på 'c' för att avbryta): 2
Om allt gick bra kommer det att visa dig det här meddelandet, bara för dina domännamn istället.
Grattis! Du har aktiverat https: // ww1.ranvirslog.com och https: // ww2.ranvirslog.com Du kan besöka FQDN: erna och märka att webbplatserna nu har hänglåsskylt som tyder på att allt är krypterat.
Titta på konfigurationsfilerna
Om du visar konfigurationsfilerna vi skapade tidigare, nämligen / etc / conf.d / ww1.conf och / etc / conf.d / ww2.conf, kommer du att märka att alla "Lyssna 80" -reglerna har försvunnit och några nya rader har lagts till berättar för servern att kommunikationen måste krypteras och platsen för certifikaten och nycklarna för att utföra nämnda kryptering.
Jag rekommenderar starkt att du tittar igenom konfigurationsfilerna, eftersom det också kan lära dig hur du korrekt installerar certifikat och skriver konfigurationsfiler.
Förnyelse av certifiering
Typiska LetsEncrypt-certifikat är giltiga i 90 dagar och innan de går ut måste du förnya dem. Du kan använda Certbot för att först köra förnyelsen genom att köra kommandot:
$ sudo certbot förnya - torrkörningOm åtgärden lyckas ser du följande meddelande:
Grattis, alla förnyelser lyckades. Följande certifikat har förnyats:
/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (framgång)** DRY RUN: simulering av "certbot förnyelse" nära cert utgång
** (Testcertifikaten ovan har inte sparats.)
Nu kan du lägga till ett Cron-jobb som kommer att försöka förnyas varje vecka eller så. Certbot förnyar inte certsna om de inte beror på det, så du behöver inte oroa dig. Kommandot för faktisk förnyelse är:
$ certbot förnyaLägg till det i root's cron-jobb genom att använda:
$ sudo crontab -eI följande fråga väljer du din favoritredigerare (Välj Nano om du är osäker) och lägg till följande rader i slutet av den nu öppnade filen:
..# Du kan till exempel köra en säkerhetskopia av alla dina användarkonton
# vid 5 a.m varje vecka med:
# 0 5 * * 1 tjära -zcf / var / säkerhetskopior / hem.tgz / hem /
#
# För mer information, se manualsidorna för crontab (5) och cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 certbot förnyas
Detta kör certbot-förnyelsekommandot klockan 2 på morgonen vid vilken slumpmässig minut som helst, den andra dagen i varje vecka.
Slutsats
Om du inte är ny på TLS-certifikat kan det vara riskabelt att experimentera med saker som HSTS. Eftersom dessa förändringar är oåterkalleliga. Men om du vill gå ner i kaninhålet av säkerhet kan jag starkt rekommendera Troy Hunts blogg som är en av huvudinspirationerna bakom denna skrivning.