GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit SSL/TLS s Apache httpd na Red Hat

Cíl

Cílem je nastavit webový server Apache s podporou SSL/TLS na Red Hat Linuxu pomocí balíčků dodávaných s distribucí.

Verze operačního systému a softwaru

  • Operační systém: Red Hat Enterprise Linux 7.5
  • Software: Apache httpd, mod_ssl

Požadavky

Privilegovaný přístup k webovému serveru.

Obtížnost

SNADNÉ

Konvence

  • # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz
  • $ – dané linuxové příkazy, které mají být spouštěny jako běžný neprivilegovaný uživatel

Úvod

Instalace webového serveru je na moderních distribucích docela snadná, protože případy použití webového serveru jsou tak běžné, že většina, ne-li všechny distribuce, poskytuje balíčky ve svých úložištích. Apache httpd je spolehlivý webový server používaný velkou částí internetu a je k dispozici mnoho modulů pro rozšíření jeho funkčnosti.

Technické novinky jsou v dnešní době plné narušení bezpečnosti, krádeží/úniku dat a rostoucího nutkání používat šifrování
kde je to možné. Zatímco používání HTTPS má určitou výpočetní režii na straně serveru i klienta, jeho nepoužívání znamená, že všechna data odesílaná oběma směry jsou prostý text, čitelný pro každého, kdo je schopen číst provoz, když prochází sítí.

Předpokládejme, že máte webovou službu, do které se klienti mohou přihlásit pomocí svého uživatelského jména a hesla – což je běžná metoda ověřování –, aby se dostali ke svým vlastním údajům, včetně správců webu. Pokud tuto službu poskytujete přes http, lze všechny tyto informace zaznamenávat, takže někdo může získat všechny přihlašovací údaje, přihlásit se jako správce webu a uzamknout skutečné správce nebo zveřejnit obsah škodlivý pro návštěvníky.

Možnost používat šifrování při procházení je již dlouhou dobu integrována do všech hlavních moderních prohlížečů a stejným způsobem je šifrování dostupné pro webové servery již mnoho let.

Nainstalujte webový server Apache s podporou SSL/TLS

Chcete-li nainstalovat požadované balíčky, jednoduše spusťte jako root:

# yum install httpd mod_ssl -y

Pokud je na serveru již nainstalován httpd, stačí nainstalovat mod_ssl , veškerou požadovanou konfiguraci provede
instalátor. Pamatujte však, že v tomto případě musíte restartovat httpd, aby mohl načíst modul ssl. Používáním
balíčků dodávaných s distribucí si můžeme výrazně usnadnit život, protože Red Hat bude poskytovat řádně otestované aktualizace pro operační systém i webový server, k odběru aktualizací samozřejmě potřebujete předplatné – ale aktualizace jsou stejně potřeba, aby operační systém zůstal aktuální.

Povolit a spustit server httpd

Pomocí systemd můžete povolit a spustit webový server pomocí níže uvedeného příkazu:

# systemctl enable httpd && systemctl start httpd

Tímto způsobem bude služba httpd automaticky spuštěna systémem systemd při každém spuštění.

Ověřte instalaci a stav

Stav webového serveru můžete zkontrolovat pomocí systemd:

# systemctl status httpd -l
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-07-07 21:35:33 CEST; 1 weeks 4 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1292 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 9
   CGroup: /system.slice/httpd.service
           ├─ 1292 /usr/sbin/httpd -DFOREGROUND
           ├─13271 /usr/sbin/httpd -DFOREGROUND
           ├─13272 /usr/sbin/httpd -DFOREGROUND
           ├─13273 /usr/sbin/httpd -DFOREGROUND
           ├─27508 /usr/sbin/httpd -DFOREGROUND
           ├─27509 /usr/sbin/httpd -DFOREGROUND
           ├─27510 /usr/sbin/httpd -DFOREGROUND
           ├─27511 /usr/sbin/httpd -DFOREGROUND
           └─27512 /usr/sbin/httpd -DFOREGROUND

Jul 07 21:35:32 web.foobar.com systemd[1]: Starting The Apache HTTP Server...
Jul 07 21:35:33 web.foobar.com systemd[1]: Started The Apache HTTP Server.

Chcete-li zkontrolovat, zda je mod_ssl správně nainstalován:

# rpm -q mod_ssl
mod_ssl-2.4.6-80.el7.x86_64

A je načten jako modul do httpd serveru:

# apachectl -M | grep ssl
 ssl_module (shared)

Použití certifikátu

Když nainstalujeme balíček mod_ssl, modul se sám přidá na httpd server, takže jej načte při příštím spuštění.
Standardně je vygenerován certifikát s vlastním podpisem, který se používá k navázání šifrovaného spojení s prohlížečem.
Otevřete prohlížeč a nasměrujte jej na server přes https:

Chybová zpráva SSL v prohlížeči Firefox

Pojďme to prozatím ignorovat, přidejte bezpečnostní výjimku (nenastavujte „trvale uložit tuto výjimku“) a pokračujte. Zobrazí se výchozí stránka. V případě Red Hat to vypadá následovně:

Výchozí domovská stránka instalace webového serveru httpd v systému Red Hat Linux

Všimněte si vykřičníku vedle adresy URL (jiné prohlížeče mohou zobrazovat jiné varování).

Náš webový server je nyní v provozu přes https s certifikátem s vlastním podpisem a je připraven poskytovat obsah publikovaný
pod /var/www/html , výchozí kořenový adresář obsahu webového serveru na Red Hat.

Spojení mezi webovým serverem a prohlížečem je nyní šifrované, takže je těžší provoz podvrhnout (což
lze využít, například ukrást přihlašovací údaje). jsme hotovi? Svým způsobem jsme splnili svůj cíl.

Skutečnost, že náš prohlížeč nedokáže identifikovat certifikát serveru jako platný, mu nebrání v šifrované komunikaci se serverem, pokud se výslovně rozhodneme, že tomuto certifikátu důvěřujeme. To může být vhodné pro malý (domácí) systém, kde máte jen několik uživatelů a také jen několik webserverů – musíte přijmout self-signed certifikát v prohlížečích, které by měly být klienty webserverů, a další prohlížeč na světě by nikdy neměl vidět obsah poskytovaný těmito servery.

Mějte však na paměti, že platnost tohoto certifikátu podepsaného svým držitelem časem vyprší (jako by měl jakýkoli jiný certifikát) a budete jej muset
obnovit, abyste jej mohli používat. Prohlížeče považují certifikáty s prošlou platností za neplatné, stejně jako certifikáty, jejichž platnost nelze prokázat pomocí platného řetězce certifikátů nad nimi.

Abychom zjistili, kdy vyprší platnost certifikátu s vlastním podpisem (nebo jakéhokoli jiného), musíme jej najít v souborovém systému v konfiguračním souboru modulu ssl:

# grep SSLCertificateFile /etc/httpd/conf.d/ssl.conf | grep -v "#"
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

A pak použijte openssl k získání data vypršení platnosti:

# openssl x509 -enddate -noout -in  /etc/pki/tls/certs/localhost.crt
notAfter=Jul 10 07:06:17 2019 GMT

Po (nebo spíše před) vypršením platnosti certifikátu jej musíte obnovit nebo nahradit certifikátem, kterému klienti důvěřují.
Elegantnější přístup na rozdíl od certifikátů s vlastním podpisem je vyžádání a použití certifikátu od CA
(Certifikační autorita), které již vaši klienti důvěřují, a to buď od vaší interní CA (která zase může mít globálně
důvěryhodná kořenová CA nad tím), nebo přímo od globálně důvěryhodné CA.

Chcete-li použít získaný certifikát namísto výchozího, musí níže uvedené parametry ukazovat na soubor certifikátu,
klíč certifikátu a certifikát CA, která podepsala certifikát SSL. Soubory musí být zkopírovány na
webový server a musí být čitelné pro uživatele operačního systému spouštějícího webový server – v případě výchozí instalace Red Hat pro uživatele Apache. Tyto parametry lze nalézt ve výše zmíněném ssl.conf .

SSLCertificateFile	/etc/httpd/custom-cert/server-ssl.crt
SSLCertificateKeyFile	/etc/httpd/custom-cert/server-ssl.key
SSLCACertificateFile	/etc/httpd/custom-cert/ca.crt

Přesměrování http provozu na https

Nyní, když poskytujeme služby přes https, můžeme vynutit používání https při poskytování celého našeho obsahu nebo jeho části. V našem
příkladu jsme velmi zabezpečeni a používáme http pouze k přesměrování příchozích klientů na https.

Může vyvstat otázka, pokud chceme mluvit pouze https, proč vůbec posloucháme http? Předpokládejme, že koncový uživatel, který právě slyšel o našem webu, získal od přítele adresu URL, která neobsahuje protokol. Dodnes většina prohlížečů standardně používá protokol http, pokud není výslovně uveden. Pokud přestaneme zobrazovat přes http, uživatel, který zadá URL bez https, obdrží chybovou zprávu, pokud se jeho prohlížeč pokusí dostat na náš server přes http.

Abychom přesměrovali všechny příchozí požadavky http na https, vytvoříme soubor pod /etc/httpd/conf.d s popisným názvem, řekněme redirect_http.conf s následujícím obsahem (kde web.foobar.com je název DNS webu):

<VirtualHost _default_:80>
        Servername web.foobar.com
        Redirect permanent / https://web.foobar.com/
</VirtualHost>

A restartujte webový server. Zda přesměrování funguje správně, můžeme otestovat z příkazového řádku pomocí wget (z hostitele, který důvěřuje SSL certifikátu webového serveru):

$ wget http://web.foobar.com/
--2018-07-19 16:13:01--  http://web.foobar.com/
Resolving web.foobar.com (web.foobar.com)... 10.9.8.7
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://web.foobar.com/ [following]
--2018-07-19 16:13:01--  https://web.foobar.com/
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 240 [text/html]
Saving to: ‘index.html’

100%[====================================================================================>] 240         --.-K/s   in 0s      

2018-07-19 16:13:01 (7.04 MB/s) - ‘index.html’ saved [240/240]

Výstup zobrazuje odpověď http 301 a můžeme vidět, jak náš klient wget následuje přesměrování, aby se připojil pomocí protokolu https. Ve výchozím nastavení je provoz ssl protokolován v jiných souborech protokolu než provoz http. Výše uvedený
požadavek můžeme najít přihlášený /var/log/httpd/ssl_access_log :

10.9.8.8 - - [19/Jul/2018:16:13:01 +0200] "GET / HTTP/1.1" 200 240

Závěr

Tímto jsme splnili náš cíl, nastavili jsme webový server, který používá https ke komunikaci s klienty a přesměrovává také příchozí požadavky http na https.


Linux
  1. Jak zabezpečit své e-mailové služby Linux pomocí SSL/TLS

  2. Jak zabezpečit název hostitele Plesk na portu 8443 pomocí certifikátu SSL

  3. Jak zabezpečit připojení SSL s Apache na Ubuntu 18.04

  1. Jak nakonfigurovat VSFTPD se šifrovaným připojením SSL/TLS?

  2. Jak nainstalovat Let's Encrypt SSL s Apache na Debian 11

  3. Jak nainstalovat Apache 2 s SSL na Linuxu (s mod_ssl, openssl)

  1. Jak nastavit proxy webový server Apache před Apache Tomcat na Red Hat Linuxu

  2. Jak zabezpečit vsFTPd pomocí SSL/TLS

  3. Jak nainstalovat Apache 2.4.2 ze zdroje na CentOS 6.2 s SSL