ວິທີການທີ່ຈະເປີດໃຊ້ HTTPS ສຳ ລັບ Varnish Cache ໂດຍໃຊ້ Hitch ເທິງ CentOS-RHEL 8


Varnish Cache ຂາດການສະ ໜັບ ສະ ໜູນ ພື້ນເມືອງ ສຳ ລັບ SSL/TLS ແລະໂປໂຕຄອນອື່ນໆທີ່ກ່ຽວຂ້ອງກັບພອດ 443. ຖ້າທ່ານ ກຳ ລັງໃຊ້ Varnish Cache ເພື່ອເພີ່ມປະສິດທິພາບການ ນຳ ໃຊ້ເວັບຂອງທ່ານ, ທ່ານ ຈຳ ເປັນຕ້ອງຕິດຕັ້ງແລະ ກຳ ຫນົດຊິ້ນສ່ວນຊອຟແວອື່ນທີ່ເອີ້ນວ່າ proxy/termination SSL, TLS ເພື່ອເຮັດວຽກ ຄຽງຄູ່ກັບ Varnish Cache ເພື່ອເປີດໃຊ້ HTTPS.

The Hitch ແມ່ນໂປແກຼມ open source ທີ່ເປີດໃຫ້ໃຊ້ງານຟຣີ, ສາມາດໃຊ້ໄດ້ແລະສາມາດປັບແຕ່ງ SSL/TLS ທີ່ອອກແບບ ສຳ ລັບ Varnish Cache, ເຊິ່ງປະຈຸບັນເຮັດວຽກຢູ່ Linux, OpenBSD, FreeBSD, ແລະ MacOSX. ມັນສິ້ນສຸດການເຊື່ອມຕໍ່ TLS/SSL ໂດຍການຟັງຢູ່ທີ່ port 443 (ພອດເລີ່ມຕົ້ນ ສຳ ລັບການເຊື່ອມຕໍ່ HTTPS) ແລະຕໍ່ ໜ້າ ການຈະລາຈອນທີ່ບໍ່ໄດ້ເຂົ້າລະຫັດໄປຍັງ Varnish Cache, ເຖິງຢ່າງໃດກໍ່ຕາມ, ມັນຄວນຈະເຮັດວຽກຮ່ວມກັບທາງຫລັງອື່ນໆເຊັ່ນກັນ.

ມັນສະ ໜັບ ສະ ໜູນ TLS1.2 ແລະ TLS1.3 ແລະມໍລະດົກ TLS 1.0/1.1, ສະ ໜັບ ສະ ໜູນ ALPN (Application-Layer Protocol Negotiation) ແລະ NPN (Next Protocol Negotiation) ສຳ ລັບ HTTP/2, ໂປໂຕຄອນ PROXY ເພື່ອສົ່ງສັນຍານ IP/port ໃຫ້ກັບ backend , ການເຊື່ອມຕໍ່ເຕົ້າຮັບໂດເມນຂອງ UNIX ກັບຕົ້ນ ກຳ ເນີດ, SNI (Server Name Indication), ໂດຍບໍ່ມີໃບຢັ້ງຢືນຕົວແທນ ຈຳ ເພາະ. ນອກຈາກນັ້ນ, ມັນເຮັດວຽກໄດ້ດີ ສຳ ລັບການຕິດຕັ້ງຂະ ໜາດ ໃຫຍ່ທີ່ຕ້ອງການເຕົ້າຮັບຟັງ 15,000 ຊຸດແລະໃບຢັ້ງຢືນ 500,000 ໃບ.

ໃນຖານະເປັນການສືບຕໍ່ຂອງສອງບົດຂຽນກ່ອນ ໜ້າ ນີ້ຂອງພວກເຮົາກ່ຽວກັບການຕິດຕັ້ງ Varnish Cache ສຳ ລັບ Nginx ແລະ Apache HTTP server, ຄູ່ມືນີ້ສະແດງໃຫ້ເຫັນວ່າສາມາດເຮັດໃຫ້ HTTPS ສຳ ລັບ Varnish Cache ໃຊ້ Hitch TLS Proxy ໃນ CentOS/RHEL 8.

ຄູ່ມືນີ້ຄາດວ່າທ່ານໄດ້ຕິດຕັ້ງ Varnish ສຳ ລັບ Nginx ຫຼື server server web, ຖ້າບໍ່ດັ່ງນັ້ນ, ເບິ່ງ:

  • ວິທີການຕິດຕັ້ງ Varnish Cache 6 ສຳ ລັບ Nginx Web Server ເທິງ CentOS/RHEL 8
  • ວິທີການຕິດຕັ້ງ Varnish Cache 6 ສຳ ລັບ Apache Web Server ໃນ CentOS/RHEL 8

ຂັ້ນຕອນທີ 1: ຕິດຕັ້ງ Hitch ເທິງ CentOS/RHEL 8

1. ຊຸດ Hitch ແມ່ນສະ ໜອງ ໃນ EPEL (Extra Packages for Enterprise Linux). ການຕິດຕັ້ງມັນ, ທຳ ອິດໃຫ້ EPEL ເຂົ້າໄປໃນລະບົບຂອງທ່ານແລະຫຼັງຈາກນັ້ນຕິດຕັ້ງຊຸດດັ່ງກ່າວຫລັງຈາກນັ້ນ. ຖ້າທ່ານບໍ່ມີຊຸດ OpenSSL ຕິດຕັ້ງ, ຕິດຕັ້ງມັນເຊັ່ນກັນ.

# dnf install epel-release
# dnf install hitch openssl

2. ເມື່ອການຕິດຕັ້ງຊຸດ ສຳ ເລັດແລ້ວ, ທ່ານຈະຕ້ອງຕັ້ງຄ່າ Varnish Cache ເພື່ອເຮັດວຽກ Hitch. ທ່ານຍັງ ຈຳ ເປັນຕ້ອງ ກຳ ຫນົດ Hitch ເພື່ອໃຊ້ໃບຢັ້ງຢືນ SSL/TLS ແລະ Varnish ຂອງທ່ານເປັນ backend. ເອກະສານການຕັ້ງຄ່າຕົ້ນຕໍຂອງ Hitch ແມ່ນຕັ້ງຢູ່ /etc/hitch/hitch.conf, ເຊິ່ງໄດ້ອະທິບາຍຢູ່ດ້ານລຸ່ມ.

ຂັ້ນຕອນທີ 2: ການຕັ້ງຄ່າຖານຂໍ້ມູນ Varnish ສຳ ລັບ Hitch

3. ຕໍ່ໄປ, ຊ່ວຍໃຫ້ Varnish ສາມາດຟັງພອດເພີ່ມເຕີມ (8443 ໃນກໍລະນີຂອງພວກເຮົາ) ໂດຍໃຊ້ໂປແກຼມ PROXY ສະ ໜັບ ສະ ໜູນ, ສຳ ລັບການສື່ສານກັບ Hitch.

ສະນັ້ນເປີດເອກະສານບໍລິການລະບົບ Varnish ເພື່ອແກ້ໄຂ.

# systemctl edit --full varnish

ຊອກຫາເສັ້ນ ExecStart ແລະເພີ່ມທຸງ -a ເພີ່ມເຕີມທີ່ມີຄ່າ 127.0.0.1:8443,proxy. ການ ນຳ ໃຊ້ມູນຄ່າ 127.0.0.1:8443 ໝາຍ ຄວາມວ່າ Varnish ຈະຍອມຮັບການເຊື່ອມຕໍ່ພາຍໃນເທົ່ານັ້ນ (ຈາກຂັ້ນຕອນທີ່ເຮັດວຽກໃນ server ດຽວກັນ i.e hitch ໃນກໍລະນີນີ້) ແຕ່ບໍ່ແມ່ນການເຊື່ອມຕໍ່ພາຍນອກ.

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

ບັນທຶກເອກະສານແລະຫຼັງຈາກນັ້ນໃຫ້ບໍລິການ Varnish ຄືນ ໃໝ່ ເພື່ອ ນຳ ໃຊ້ການປ່ຽນແປງ ໃໝ່ ຫຼ້າສຸດ.

# systemctl restart varnish

ຂັ້ນຕອນທີ 3: ການໄດ້ຮັບໃບຢັ້ງຢືນ SSL/TLS

4. ໃນພາກນີ້, ພວກເຮົາຈະອະທິບາຍວິທີການສ້າງມັດໃບຢັ້ງຢືນ SSL/TLS ເພື່ອ ນຳ ໃຊ້ພາຍໃຕ້ Hitch. ສຳ ລັບ ຄຳ ແນະ ນຳ ນີ້, ພວກເຮົາຈະອະທິບາຍຕົວເລືອກທີ່ແຕກຕ່າງກັນຂອງວິທີການ ນຳ ໃຊ້ໃບຢັ້ງຢືນທີ່ໄດ້ລົງນາມດ້ວຍຕົນເອງ, ໃບຢັ້ງຢືນການຄ້າ, ຫລື ໜຶ່ງ ຈາກ Let’s Encrypt.

ເພື່ອສ້າງໃບຢັ້ງຢືນທີ່ເຊັນດ້ວຍຕົນເອງ (ເຊິ່ງທ່ານຄວນຈະໃຊ້ໃນສະພາບແວດລ້ອມການທົດສອບໃນທ້ອງຖິ່ນ), ທ່ານສາມາດໃຊ້ເຄື່ອງມື OpenSSL.

# 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

ຈາກນັ້ນສ້າງໃບຢັ້ງຢືນແລະກະແຈມັດດັ່ງຕໍ່ໄປນີ້.

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

ໝາຍ ເຫດ: ສຳ ລັບການ ນຳ ໃຊ້ການຜະລິດ, ທ່ານສາມາດຊື້ໃບຢັ້ງຢືນຈາກອົງການໃບຢັ້ງຢືນການຄ້າ (CA) ຫລືຄວ້າໃບຢັ້ງຢືນທີ່ບໍ່ເສຍຄ່າ, ອັດຕະໂນມັດແລະໄດ້ຮັບການຍອມຮັບຢ່າງສົມບູນຈາກ Let’s Encrypt. ຫຼັງຈາກນັ້ນ, ສ້າງມັດ PEM.

ຖ້າທ່ານຊື້ໃບຢັ້ງຢືນຈາກ CA ການຄ້າ, ທ່ານ ຈຳ ເປັນຕ້ອງລວມເອົາຄີເອກະຊົນ, ໃບຢັ້ງຢືນ, ແລະມັດ CA ດັ່ງທີ່ສະແດງ.

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

ສຳ ລັບ Let’s Encrypt, ໃບຢັ້ງຢືນ, ຄີສ່ວນຕົວແລະລະບົບຕ່ອງໂສ້ທັງ ໝົດ ຈະຖືກເກັບຢູ່ພາຍໃຕ້ /etc/letsencrypt/live/example.com/, ສະນັ້ນສ້າງມັດດັ່ງທີ່ສະແດງໄວ້.

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

ຂັ້ນຕອນທີ 4: ການຕັ້ງຄ່າແລະເລີ່ມ Hitch

5. ຕໍ່ໄປ, ຕັ້ງຄ່າ Varnish ເປັນ backend ສຳ ລັບ Hitch ແລະລະບຸເອກະສານໃບຢັ້ງຢືນ SSL/TLS ເພື່ອໃຊ້ ສຳ ລັບ HTTPS, ໃນເອກະສານການຕັ້ງຄ່າຕົ້ນຕໍຂອງ Hitch, ເປີດມັນເພື່ອແກ້ໄຂ.

# vi /etc/hitch/hitch.conf

ສ່ວນ frontend ກຳ ນົດທີ່ຢູ່ IP ແລະພອດ Hitch ຈະຟັງ. ການຕັ້ງຄ່າເລີ່ມຕົ້ນແມ່ນການຟັງທຸກອິນເຕີເຟດ IPv4 ແລະ IPv6 ທີ່ຕິດຢູ່ໃນເຊີຟເວີແລະແລ່ນຢູ່ທີ່ port 443 ແລະຈັດການກັບການຮ້ອງຂໍ HTTPS ທີ່ເຂົ້າມາ, ມອບໃຫ້ກັບ Varnish.

ປ່ຽນພອດຕົວແທນໂປແກມ backend ແບບເລີ່ມຕົ້ນຈາກ 6086 ຫາ 8443 (ພອດທີ່ໃຊ້ເພື່ອສົ່ງຕໍ່ການຮ້ອງຂໍໃຫ້ Varnish) ໃນເອກະສານການຕັ້ງຄ່າ Hitch, ໂດຍໃຊ້ພາລາມິເຕີ backend. ພ້ອມກັນນັ້ນ, ລະບຸເອກະສານໃບຢັ້ງຢືນໂດຍໃຊ້ພາລາມິເຕີ pem-file ດັ່ງທີ່ສະແດງໄວ້.

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

ບັນທຶກເອກະສານແລະປິດມັນ.

6. ຕອນນີ້ເລີ່ມຕົ້ນໃຫ້ບໍລິການ hitch ແລະເຮັດໃຫ້ມັນເລີ່ມຕົ້ນໂດຍອັດຕະໂນມັດເມື່ອ boot system. ໃຫ້ສັງເກດວ່າປຸ່ມ - ຮູ້ ເມື່ອໃຊ້ກັບ enable, ເລີ່ມຕົ້ນການບໍລິການທີ່ເປັນລະບົບເຊັ່ນດຽວກັນແລະຫຼັງຈາກນັ້ນກວດເບິ່ງສະຖານະພາບເພື່ອເບິ່ງວ່າມັນຂື້ນຢູ່ແລະເຮັດວຽກດັ່ງຕໍ່ໄປນີ້.

# systemctl enable --now hitch
# systemctl status hitch

7. ກ່ອນທີ່ທ່ານຈະ ດຳ ເນີນການທົດສອບຖ້າເວັບໄຊທ໌/ແອັບພລິເຄຊັນຂອງທ່ານ ກຳ ລັງໃຊ້ຢູ່ເທິງ HTTPS, ທ່ານ ຈຳ ເປັນຕ້ອງອະນຸຍາດໃຫ້ພອດບໍລິການ HTTPS 443 ຢູ່ໃນ ກຳ ແພງປ້ອງກັນເພື່ອອະນຸຍາດໃຫ້ການຮ້ອງຂໍທີ່ມີຈຸດປະສົງ ສຳ ລັບພອດນັ້ນໃນເຊີຟເວີຈະຂ້າມຜ່ານ firewall.

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

ຂັ້ນຕອນທີ 5: ການທົດສອບການຢຸດ SSL/TLS ກັບການຕັ້ງຄ່າ Varnish Cache-Hitch

8. ເຖິງເວລາແລ້ວທີ່ຈະທົດສອບການຕັ້ງຄ່າ Varnish Cache-Hitch. ເປີດເວັບບຼາວເຊີແລະໃຊ້ IP ຫລື server ຂອງ IP ຂອງທ່ານເພື່ອ ນຳ ທາງຜ່ານ HTTPS.

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

ເມື່ອຫນ້າດັດສະນີຂອງໂປແກຼມເວັບຂອງທ່ານໄດ້ໂຫລດແລ້ວ, ໃຫ້ກວດເບິ່ງຫົວຂໍ້ HTTP ເພື່ອຢືນຢັນວ່າເນື້ອຫາໄດ້ຖືກໃຫ້ບໍລິການຜ່ານ Varnish Cache.

ເພື່ອເຮັດສິ່ງນັ້ນ, ໃຫ້ກົດຂວາໃສ່ ໜ້າ ເວບທີ່ໂຫລດ, ເລືອກກວດກາຈາກລາຍຊື່ຕົວເລືອກເພື່ອເປີດເຄື່ອງມືຂອງນັກພັດທະນາ. ຈາກນັ້ນກົດປຸ່ມ Network Network, ແລະໂຫຼດ ໜ້າ ເວບໄຊທ໌ ໃໝ່, ຈາກນັ້ນເລືອກ ຄຳ ຂໍເພື່ອເບິ່ງຫົວຂໍ້ HTTP, ດັ່ງທີ່ໄດ້ສະແດງຢູ່ໃນ ໜ້າ ຈໍຕໍ່ໄປ

ຂັ້ນຕອນທີ 6: ປ່ຽນເສັ້ນທາງ HTTP ໄປທີ່ HTTPS ໃນ Varnish Cache

9. ເພື່ອ ດຳ ເນີນການເວັບໄຊທ໌້ຂອງທ່ານໂດຍໃຊ້ HTTPS ເທົ່ານັ້ນ, ທ່ານ ຈຳ ເປັນຕ້ອງປ່ຽນການຈາລະຈອນ HTTP ທັງ ໝົດ ໄປທີ່ HTTPS. ທ່ານສາມາດເຮັດສິ່ງນີ້ໄດ້ໂດຍການເພີ່ມການຕັ້ງຄ່າຕໍ່ໄປນີ້ໃນເອກະສານການຕັ້ງຄ່າ Hitch ຂອງທ່ານ.

# vi /etc/hitch/hitch.conf 

ກ່ອນອື່ນ ໝົດ, ເພີ່ມເສັ້ນການ ນຳ ເຂົ້າເສັ້ນ; ພຽງແຕ່ຢູ່ຂ້າງລຸ່ມຂອງ vlc 4.0;, ຫຼັງຈາກນັ້ນຊອກຫາ vrc_recv subroutine, ເຊິ່ງແມ່ນລະບົບ subroutine VCL ທໍາອິດທີ່ຖືກປະຕິບັດທັນທີຫຼັງຈາກ Varnish Cache ໄດ້ແຍກການຮ້ອງຂໍຂອງລູກຄ້າເຂົ້າໃນໂຄງສ້າງຂໍ້ມູນພື້ນຖານຂອງມັນ. ມັນແມ່ນບ່ອນທີ່ພວກເຮົາສາມາດດັດແກ້ຫົວຂໍ້ການຮ້ອງຂໍແລະປະຕິບັດການວິເຄາະເພື່ອປ່ຽນເສັ້ນທາງການຮ້ອງຂໍຂອງລູກຄ້າ.

ດັດແປງມັນໃຫ້ມີລັກສະນະແບບນີ້.

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

ໃຫ້ສັງເກດວ່າໂປໂຕຄອນ PROXY ຊ່ວຍໃຫ້ Varnish ສາມາດເບິ່ງທີ່ Port ຟັງຂອງ Hitch 443 ຈາກຕົວແປ server.ip. ດັ່ງນັ້ນສາຍ std.port (server.ip) ສົ່ງເລກທີ່ Port ທີ່ການເຊື່ອມຕໍ່ລູກຄ້າໄດ້ຮັບ.

ຖ້າທ່າເຮືອບໍ່ແມ່ນ 443 ສຳ ລັບ HTTPS (ທີ່ຖືກກວດເບິ່ງໂດຍ (std.port (server.ip)! = 443)), subroutine ຈະຕັ້ງຫົວຂໍ HTTP ທີ່ຢູ່ຫົວຂໍ້ (ຕັ້ງຄ່າ req.http.location) ຕາມ ຄຳ ຂໍທີ່ປອດໄພ (“ https: //” + req.http.host + req.url) ພຽງແຕ່ຮຽກຮ້ອງໃຫ້ໂປແກຼມທ່ອງເວັບສາມາດໂຫລດເວີຊັນ HTTPS ຂອງ ໜ້າ ເວບໄດ້ (ໝາຍ ເຖິງການປ່ຽນເສັ້ນທາງ URL).

ຫົວຂໍ້ສະຖານທີ່ຈະຖືກສົ່ງໄປທີ່ subcloutine vcl_synth (ເຊິ່ງເອີ້ນວ່າໃຊ້ກັບຄືນ (synth (301))) ດ້ວຍລະຫັດສະຖານະພາບ HTTP ຂອງ 301 (ຖືກຍ້າຍຖາວອນ).

10. ຕໍ່ໄປ, ຕື່ມ subroutine vcl_synth ຕໍ່ໄປນີ້ (ໜຶ່ງ ໃນຫລາຍໆກໍລະນີການ ນຳ ໃຊ້ຂອງມັນແມ່ນການປ່ຽນເສັ້ນທາງຜູ້ໃຊ້), ເພື່ອ ດຳ ເນີນການ synth ຂ້າງເທິງ.

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

ມັນກວດເບິ່ງວ່າສະຖານະການຕອບສະ ໜອງ ແມ່ນ 301, ຫົວຂໍ້ HTTP Location ໃນການຕອບສະ ໜອງ ຖືກຕັ້ງຄ່າໃຫ້ກັບຫົວຂໍ້ HTTP Location ໃນ ຄຳ ຮ້ອງຂໍເຊິ່ງຕົວຈິງແລ້ວມັນແມ່ນການປ່ຽນເສັ້ນທາງໄປທີ່ HTTPS ແລະປະຕິບັດການຈັດສົ່ງ.

ການປະຕິບັດການຈັດສົ່ງກໍ່ສ້າງການຕອບຮັບດ້ວຍການຕອບຮັບຈາກຜູ້ຮັກສາຫຼັງ, ເກັບຮັກສາການຕອບໂຕ້ຢູ່ໃນບ່ອນເກັບມ້ຽນ, ແລະສົ່ງຕໍ່ໃຫ້ລູກຄ້າ.

ບັນທຶກເອກະສານແລະປິດມັນ.

11. ອີກເທື່ອ ໜຶ່ງ, ນຳ ໃຊ້ການປ່ຽນແປງ ໃໝ່ ໃນການຕັ້ງຄ່າ Varnish ໂດຍການເລີ່ມການບໍລິການ ໃໝ່. ຫຼັງຈາກນັ້ນ, ໃຊ້ເຄື່ອງມືເສັ້ນ ຄຳ ສັ່ງ curl ເພື່ອຢືນຢັນການປ່ຽນເສັ້ນທາງຈາກ HTTP ເຖິງ HTTPS.

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

ຈາກຕົວທ່ອງເວັບ, ການຕອບສະ ໜອງ ກໍ່ຄືກັນກັບທີ່ສະແດງຢູ່ໃນພາບ ໜ້າ ຈໍຕໍ່ໄປນີ້.

ພວກເຮົາຫວັງວ່າທຸກສິ່ງທຸກຢ່າງໄດ້ເຮັດວຽກຈົນເຖິງຈຸດນີ້. ຖ້າບໍ່, ລົງ ຄຳ ເຫັນຫລື ຄຳ ຖາມຜ່ານແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້. ສຳ ລັບຕົວເລືອກການຕັ້ງຄ່າຂັ້ນສູງໃດໆ, ໃຫ້ໄປທີ່ເອກະສານ Varnish Cache ແລະ Hitch.