Sådan aktiveres HTTPS for Varnish Cache ved hjælp af Hitch på CentOS-RHEL 8


Varnish Cache mangler native support til SSL/TLS og andre protokoller, der er forbundet med port 443. Hvis du bruger Varnish Cache til at øge din webapplikations ydeevne, skal du installere og konfigurere et andet stykke software kaldet en SSL/TLS-afsluttende proxy, for at arbejde sammen med Varnish Cache for at aktivere HTTPS.

Hitch er en gratis open source, libev-baseret og skalerbar SSL/TLS-proxy designet til Varnish Cache, som i øjeblikket fungerer på Linux, OpenBSD, FreeBSD og MacOSX. Det afslutter TLS/SSL-forbindelser ved at lytte på port 443 (standardporten til HTTPS-forbindelser) og videresender den ukrypterede trafik til Varnish Cache, men den skal også fungere med andre backends.

Det understøtter TLS1.2 og TLS1.3 og ældre TLS 1.0/1.1, understøtter ALPN (Application-Layer Protocol Negotiation) og NPN (Next Protocol Negotiation) til HTTP/2, en PROXY-protokol til signalering af klientens IP/port til en backend , UNIX-domænesokkelforbindelser til oprindelsen, SNI (servernavnindikation), med og uden jokertegncertifikater. Derudover fungerer det godt til store installationer, der kræver op til 15.000 lyttestik og 500.000 certifikater.

Som en fortsættelse af vores to tidligere artikler om installation af Varnish Cache til Nginx og Apache HTTP-servere viser denne guide at aktivere HTTPS til Varnish Cache ved hjælp af Hitch TLS Proxy på CentOS/RHEL 8.

Denne vejledning forudsætter, at du har installeret Varnish til Nginx eller Apache-webserver, ellers se:

  • Sådan installeres Varnish Cache 6 til Nginx-webserver på CentOS/RHEL 8
  • Sådan installeres Varnish Cache 6 til Apache-webserver på CentOS/RHEL 8

Trin 1: Installer Hitch på CentOS/RHEL 8

1. Hitch-pakken findes i EPEL-arkivet (Extra Packages for Enterprise Linux). For at installere det skal du først aktivere EPEL på dit system og derefter installere pakken derefter. Hvis du ikke har OpenSSL-pakke installeret, skal du også installere den.

# dnf install epel-release
# dnf install hitch openssl

2. Når pakkeinstallationen er afsluttet, skal du konfigurere Varnish Cache til at fungere Hitch. Du skal også konfigurere Hitch til at bruge dine SSL/TLS-certifikater og Varnish som en backend. Hitch's hovedkonfigurationsfil findes på /etc/hitch/hitch.conf, som forklares nedenfor.

Trin 2: Konfiguration af lakcache til Hitch

3. Dernæst gør det muligt for Varnish at lytte til en ekstra port (8443 i vores tilfælde) ved hjælp af PROXY-protokolunderstøttelsen til kommunikation med Hitch.

Så åbn Varnish systemd-servicefilen til redigering.

# systemctl edit --full varnish

Se efter linjen ExecStart, og tilføj et ekstra -a -flag med værdien 127.0.0.1:8443,proxy. Brug af en værdi på 127.0.0.1:8443 betyder, at Varnish kun accepterer den interne forbindelse (fra processer, der kører på den samme server, dvs. hitch i dette tilfælde), men ikke eksterne forbindelser.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Gem filen, og genstart derefter Varnish-tjenesten for at anvende de seneste ændringer.

# systemctl restart varnish

Trin 3: Modtagelse af SSL/TLS-certifikater

4. I dette afsnit forklarer vi, hvordan du opretter SSL/TLS-certifikatbunten, der skal bruges under Hitch. I denne vejledning forklarer vi de forskellige muligheder for, hvordan man bruger et selvsigneret certifikat, et kommercielt certifikat eller et fra Let's Encrypt.

For at oprette et selvsigneret certifikat (som du kun skal bruge i et lokalt testmiljø) kan du bruge OpenSSL-værktøjet.

# mkdir /etc/ssl/tecmint.lan
# cd /etc/ssl/tecmint.lan/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Opret derefter et bundt af certifikatet og nøglen som følger.

# cat tecmint.crt tecmint.key >tecmint.pem

Bemærk: Til produktionsbrug kan du enten købe et certifikat fra en kommerciel Certificate Authority (CA) eller få fat i et gratis, automatiseret og fuldt anerkendt certifikat fra Let’s Encrypt. Opret derefter en PEM-pakke.

Hvis du har købt et certifikat fra en kommerciel CA, skal du flette den private nøgle, certifikatet og CA-pakken som vist.

# cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

For Lad os kryptere gemmes certifikatet, den private nøgle og den fulde kæde under /etc/letsencrypt/live/example.com/, så opret pakken som vist.

# cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Trin 4: Konfiguration og start af træk

5. Konfigurer derefter Varnish som en backend til Hitch, og angiv de SSL/TLS-certifikatfiler, der skal bruges til HTTPS. Åbn den i Hitch-hovedkonfigurationsfilen til redigering.

# vi /etc/hitch/hitch.conf

Frontend-sektionen definerer IP-adresserne, og porten Hitch vil lytte til. Standardkonfigurationen er at lytte på alle IPv4- og IPv6-grænseflader, der er knyttet til serveren og kører på port 443 og håndtere indgående HTTPS-anmodninger og aflevere dem til Varnish.

Skift standard backend-proxyport fra 6086 til 8443 (den port, der bruges til at videresende anmodninger til Varnish) i Hitch-konfigurationsfilen ved hjælp af backend-parameteren. Angiv også certifikatfilen ved hjælp af pem-filparameteren som vist.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Gem filen, og luk den.

6. Start nu hitch-tjenesten, og aktivér, at den automatisk starter ved systemstart. Bemærk, at - nu -kontakten, når den bruges med aktivering, også starter en systemd-tjeneste og derefter kontrollerer status for at se, om den er i gang som følger.

# systemctl enable --now hitch
# systemctl status hitch

7. Før du fortsætter med at teste, om dit websted/din applikation nu kører på HTTPS, skal du tillade HTTPS-serviceport 443 i firewallen for at tillade anmodninger, der er bestemt til den port på serveren, at passere gennem firewallen.

# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

Trin 5: Test af SSL/TLS-opsigelse med Varnish Cache-Hitch Setup

8. Det er nu tid til at teste opsætningen af Varnish Cache-Hitch. Åbn en webbrowser, og brug dit domænes eller servers IP til at navigere over HTTPS.

https://www.example.com
OR
https://SERVER_IP/

Når indekssiden for din webapplikation er indlæst, skal du kontrollere HTTP-overskrifterne for at bekræfte, at indholdet vises via Varnish Cache.

For at gøre det skal du højreklikke på den indlæste webside, vælge Inspicer på listen over muligheder for at åbne udviklerværktøjerne. Klik derefter på fanen Netværk, og genindlæs siden, og vælg derefter en anmodning om at få vist HTTP-overskrifter, som fremhævet i følgende skærmbillede.

Trin 6: Omdiriger HTTP til HTTPS i Varnish Cache

9. For kun at køre dit websted på HTTPS, skal du omdirigere al HTTP-trafik til HTTPS. Du kan gøre dette ved at tilføje følgende konfiguration i din Hitch-konfigurationsfil.

# vi /etc/hitch/hitch.conf 

Først skal du tilføje linieimport std; lige under vlc 4.0; derefter kigge efter vlc_recv-underrutinen, som er den første VCL-subrutine, der udføres umiddelbart efter, at Varnish Cache har parset klientanmodningen i sin grundlæggende datastruktur. Det er her, vi kan ændre anmodningsoverskrifterne og udføre en synth for at omdirigere klientanmodninger.

Rediger det for at se sådan ud.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Bemærk, at PROXY-protokollen gør det muligt for Varnish at se Hitchs lytteport 443 fra server.ip-variablen. Så linjen std.port (server.ip) returnerer det portnummer, som klientforbindelsen blev modtaget på.

Hvis porten ikke er 443 for HTTPS (som kontrolleret af (std.port (server.ip)! = 443)), vil subrutinen indstille anmodningen HTTP Location header (sæt req.http.location) til en sikker anmodning (“ https:/”+ req.http.host + req.url) beder simpelthen webbrowseren om at indlæse en HTTPS-version af websiden (dvs. URL-omdirigering).

Placeringsoverskriften sendes til vcl_synth-underrutinen (som kaldes ved hjælp af return (synth (301))) med en HTTP-statuskode på 301 (flyttes permanent).

10. Dernæst tilføj følgende vcl_synth subrutine (en af dens mange anvendelsessager er omdirigering af brugere) for at behandle synth ovenfor.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Det kontrollerer, om svarets status er 301, HTTP-placeringsoverskriften i svaret er indstillet til HTTP-placeringsoverskriften i anmodningen, som faktisk er en omdirigering til HTTPS og udfører en leveringshandling.

Leveringshandlingen bygger et svar med svaret fra backend, gemmer svaret i cachen og sender det til klienten.

Gem filen, og luk den.

11. Anvend endnu en gang de nye ændringer i Varnish-konfigurationen ved at genstarte tjenesten. Brug derefter curl-kommandolinjeværktøjet til at bekræfte omdirigering fra HTTP til HTTPS.

# systemctl restart varnish
# curl -I http://eaxmple.com/

Fra browseren er svaret også det samme som vist i det følgende skærmbillede.

Vi håber, at alt har fungeret fint indtil nu. Hvis ikke, send en kommentar eller spørgsmål via feedbackformularen nedenfor. For eventuelle avancerede konfigurationsindstillinger skal du gå til Varnish Cache-dokumentationen og Hitch-dokumentationen.