Wéi aktivéiert HTTPS fir Varnish Cache mat Hitch op CentOS-RHEL 8


Varnish Cache feelt natiirlech Ënnerstëtzung fir SSL/TLS an aner Protokoller verbonne mam Hafen 443. Wann Dir Varnish Cache benotzt fir d'Performance vun Ärer Webapplikatioun ze stäerken, musst Dir en anert Stéck Software installéieren an konfiguréieren, genannt SSL/TLS Terminatiounsproxy, fir ze schaffen nieft Varnish Cache fir HTTPS z'aktivéieren.

Den Hitch ass e gratis Open Source, libev-baséiert, a skalierbare SSL/TLS Proxy entworf fir Varnish Cache, deen am Moment op Linux, OpenBSD, FreeBSD, a MacOSX funktionnéiert. Et terminéiert TLS/SSL Verbindungen andeems Dir um Hafen 443 lauschtert (de Standardport fir HTTPS Verbindungen) a weidergeet den onverschlësselte Verkéier op Varnish Cache, awer et sollt och mat anere Backends funktionnéieren.

Et ënnerstëtzt fir TLS1.2 an TLS1.3 an legacy TLS 1.0/1.1, ënnerstëtzt ALPN (Application-Layer Protocol Negotiation) an NPN (Next Protocol Negotiation) fir HTTP/2, e PROXY Protokoll fir Client IP/Port zu engem Backend ze signaliséieren , UNIX Domain Socket Verbindungen op den Urspronk, SNI (Server Name Indication), mat an ouni Wildcard Certificaten. Zousätzlech funktionnéiert et gutt fir grouss Installatiounen déi bis zu 15.000 Nolauschtersockets a 500.000 Certificaten erfuerderen.

Als Fortsetzung vun eisen zwee virdrun Artikelen iwwer d'Installatioun vun Varnish Cache fir Nginx an Apache HTTP Serveren, weist dëse Guide fir HTTPS fir Varnish Cache mat Hitch TLS Proxy op CentOS/RHEL 8 z'aktivéieren.

Dëse Guide gëtt ugeholl datt Dir Varnish fir Nginx oder Apache Webserver installéiert hutt, soss, kuckt:

  • Wéi installéiere ech Varnish Cache 6 fir Nginx Web Server op CentOS/RHEL 8
  • Wéi installéiere ech Varnish Cache 6 fir Apache Web Server op CentOS/RHEL 8

Schrëtt 1: Installéiert Hitch op CentOS/RHEL 8

1. Den Hitch Package gëtt am EPEL (Extra Packages for Enterprise Linux) Repository geliwwert. Fir et z'installéieren, aktivéiert als éischt EPEL op Ärem System an installéiert dann de Package duerno. Wann Dir kee OpenSSL Package installéiert hutt, installéiere se och.

# dnf install epel-release
# dnf install hitch openssl

2. Wann d'Packageinstallatioun fäerdeg ass, musst Dir Varnish Cache konfiguréieren fir Hitch ze schaffen. Dir musst och Hitch konfiguréieren fir Är SSL/TLS Zertifikater a Varnish als Backend ze benotzen. D'Haaptkonfiguratiounsdatei vum Hitch ass op /etc/hitch/hitch.conf, déi hei ënnen erkläert gëtt.

Schrëtt 2: Lack Cache fir Hitch konfiguréieren

3. Als nächst aktivéiert Varnish fir en zousätzlechen Hafen ze lauschteren (8443 an eisem Fall) mat der PROXY Protokoll Ënnerstëtzung, fir Kommunikatioun mat Hitch.

Also öffnen de Varnish systemd Servicedatei fir z'änneren.

# systemctl edit --full varnish

Kuckt no der Linn ExecStart a füügt en zousätzleche -a Fändel mat dem Wäert 127.0.0.1:8443,Proxy. Mat engem Wäert vun 127.0.0.1: 8443 heescht Varnish nëmmen déi intern Verbindung akzeptéieren (vu Prozesser déi um selwechte Server lafen, dh Hitch an dësem Fall) awer net extern Verbindungen.

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

Späichert d'Datei an da starten de Varnish Service nei fir déi lescht Ännerungen anzesetzen.

# systemctl restart varnish

Schrëtt 3: Erhalen SSL/TLS Certificaten

4. An dëser Rubrik wäerte mir erkläre wéi Dir den SSL/TLS Zertifikatbündel erstellt fir ënner Hitch ze benotzen. Fir dëse Guide wäerte mir déi verschidde Méiglechkeeten erkläre wéi Dir e selbst ënnerschriwwenen Zertifika, kommerziellen Zertifika oder ee vu Let's Encrypt benotzt.

Fir e selbst ënnerschriwwenen Zertifika ze kreéieren (deen Dir nëmmen an engem lokalen Testëmfeld benotze sollt), kënnt Dir den OpenSSL Tool benotzen.

# 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

Erstellt dann e Bündel vum Zertifika a Schlëssel wéi follegt.

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

Notiz: Fir d'Produktiounsnotzung, kënnt Dir entweder e Certificat vun enger kommerzieller Zertifika Autoritéit (CA) kafen oder e gratis, automatiséiert a voll unerkannt Zertifika vu Let's Encrypt gräifen. Erstellt dann e PEM Bündel.

Wann Dir e Certificat vun engem kommerziellen CA kaaft hutt, musst Dir de private Schlëssel, den Zertifikat an de CA-Bündel fusionéieren wéi gewisen.

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

Fir Let's Encrypt gëtt den Zertifikat, de private Schlëssel an déi ganz Kette ënner /etc/letsencrypt/live/example.com/ gespäichert, also erstellt de Bündel wéi gewisen.

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

Schrëtt 4: Konfiguratioun a Start Hitch

5. Nächst, konfiguréieren Varnish als Backend fir Hitch a spezifizéieren d'SSL/TLS Zertifikatdateien fir HTTPS ze benotzen, an der Hitch Haaptkonfiguratiounsdatei, oppen et fir z'änneren.

# vi /etc/hitch/hitch.conf

De Frontend Sektioun definéiert d'IP Adressen an den Port Hitch lauschtert no. D'Standardkonfiguratioun ass fir op all IPv4- an IPv6-Schnëttplazen ze lauschteren, déi um Server verbonne sinn a leeft um Hafen 443 an erakomm HTTPS-Ufroen ze handhaben, se op Varnish ofzeginn.

Ännert den Default Backend Proxy Hafen vun 6086 op 8443 (den Hafen deen benotzt gëtt fir Ufroen op Varnish weiderzebréngen) an der Hitch Konfiguratiounsdatei, mam Backend Parameter. Gitt och d'Zertifikatdatei mat dem Pem-Datei Parameter wéi gewisen.

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

Späichert d'Datei a maach se zou.

6. Start elo den Hitch Service an aktivéiert et automatesch beim Systemboot starten. Notéiert datt de --now Schalter wann se mat Enable benotzt gëtt, och e Systemdéngscht ufänkt an dann de Status iwwerpréift fir ze kucken ob et op a leeft wéi follegt.

# systemctl enable --now hitch
# systemctl status hitch

7. Ier Dir weidergeet fir ze testen ob Är Websäit/Applikatioun elo op HTTPS leeft, musst Dir den HTTPS Serviceport 443 an der Firewall erlaben fir Ufroe fir dee Port op de Server duerch d'Firewall ze passéieren.

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

Schrëtt 5: Testen SSL/TLS Terminatioun mat Varnish Cache-Hitch Setup

8. Et ass elo Zäit de Varnish Cache-Hitch Setup ze testen. Öffnen e Webbrowser a benotzt Är Domain oder Server IP fir iwwer HTTPS ze navigéieren.

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

Wann d'Index Säit vun Ärer Webapplikatioun gelueden ass, kontrolléiert d'HTTP Header fir ze bestätegen datt den Inhalt iwwer Varnish Cache servéiert gëtt.

Fir dat ze maachen, klickt riets op déi gelueden Websäit, wielt Inspektéieren aus der Lëscht vun Optiounen fir d'Entwéckler Tools opzemaachen. Da klickt op d'Netzwierk Tab, a lued d'Säit nei, wielt dann eng Ufro fir d'HTTP Header ze gesinn, wéi am folgende Screenshot markéiert.

Schrëtt 6: Viruleedung vun HTTP op HTTPS am Varnish Cache

9. Fir Är Websäit nëmmen op HTTPS ze lafen, musst Dir all HTTP-Traffic op HTTPS viruleeden. Dir kënnt dat maachen andeems Dir déi folgend Konfiguratioun an Ärer Hitch Konfiguratiounsdatei bäidréit.

# vi /etc/hitch/hitch.conf 

Als éischt, fügen d'Linn Import std; just ënner vlc 4.0;, kuckt dann no der vlc_recv-Subroutine, dat ass déi éischt VCL-Subroutine, déi direkt ausgefouert gëtt nodeems Varnish Cache d'Clientufro an seng Basisdatenstruktur parséiert huet. Et ass wou mir d'Ufro Header änneren an e Synth ausféieren fir Client Ufroen ze redirectéieren.

Ännert et fir esou ze kucken.

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

Bedenkt datt de PROXY Protokoll et erméiglecht Varnish den Hitch's Nolauschterport 443 vun der Server.ip Variabel ze gesinn. Also gëtt d'Linn std.port (server.ip) d'Portnummer zréck, op där d'Clientverbindung kritt gouf.

Wann den Hafen net 443 fir HTTPS ass (wéi gepréift vun (std.port(server.ip) != 443)), setzt d'Subroutine den Ufro HTTP Location Header (set req.http.location) op eng sécher Ufro (“ https://” + req.http.host + req.url) einfach de Webbrowser froen fir eng HTTPS Versioun vun der Websäit ze lueden (dh URL Viruleedung).

De Location Header gëtt an d'vcl_synth Subroutine geschéckt (déi genannt gëtt mat Retour (synth (301))) mat engem HTTP Statuscode vun 301 (permanent geréckelt).

10. Als nächst füügt déi folgend vcl_synth Subroutine (ee vu senge ville Benotzungsfäll ass d'Benotzer ëmgeleet), fir de Synth uewen ze veraarbecht.

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

Et kontrolléiert ob den Äntwertstatus 301 ass, den HTTP Location Header an der Äntwert ass op den HTTP Location Header an der Ufro gesat, déi tatsächlech e Viruleedung op HTTPS ass an eng Liwweraktioun ausféiert.

D'Liwweraktioun baut eng Äntwert mat der Äntwert vum Backend, späichert d'Äntwert am Cache a schéckt se un de Client.

Späichert d'Datei a maach se zou.

11. Nach eng Kéier, gëllen déi nei Ännerungen an der Varnish Konfiguratioun andeems Dir de Service nei starten. Benotzt dann de Curl Kommandozeil Tool fir d'Redirectioun vun HTTP op HTTPS ze bestätegen.

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

Vum Browser ass d'Äntwert och déiselwecht wéi am folgenden Screenshot gewisen.

Mir hoffen, datt bis elo alles gutt geschafft huet. Wann net, schéckt e Kommentar oder Froen iwwer de Feedbackformular hei ënnen. Fir all fortgeschratt Konfiguratiounsoptiounen, gitt op d'Hitch Dokumentatioun.