HTTP (Hypertext Transfer Protocol) – jedná se o protokol z rodiny TCP/IP a tím pádem je možné jeho pomocí přenášet široké spektrum dat. Text, obrázky, video atp. Právě díky němu je možné používat internet tak jak ho známe. Server dostane požadavek od klientského počítače, zpracuje ho a pošle odpověď. Detailnější popis fungování není podstatný. Dnes se zaměřím jen na první a poslední část komunikace.
Požadavek a odpověď
Host |
example.com
|
User-Agent |
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
|
Accept |
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
Accept-Language |
cs,en-US;q=0.7,en;q=0.3
|
Accept-Encoding |
gzip, deflate
|
Connection |
keep-alive
|
Upgrade-Insecure-Requests |
1
|
Pragma |
no-cache
|
Cache-Control |
no-cache
|
Takhle nebo velmi podobně vypadá požadavek který váš prohlížeč pošle serveru. Je to takzvaná hlavička a prohlížeč v ní říká co od serveru čeká za odpověď. A odpověď mu přijde
Date |
Tue, 14 Nov 2017 09:52:56 GMT
|
Server |
Apache/2.4.10 (Debian)
|
X-Powered-By |
PHP/7.1.0
|
Link |
<http://example.com/wp-json/>; rel=“https://api.w.org/“
|
Vary |
Accept-Encoding
|
Content-Encoding |
gzip
|
Content-Length |
17623
|
Keep-Alive |
timeout=5, max=100
|
Connection |
Keep-Alive
|
Content-Type |
text/html; charset=UTF-8
|
Jak vidíte, je to odpověď přesně podle očekávání prohlížeče a stránka se vám pak zobrazí. Bohužel v tomhle typu komunikace se skrývá riziko odposlechu. Tzv. Man-in-the-middle útoku, takže kdokoli chce, může sledovat vaši komunikaci.
Někoho chytrého kdysi napadlo, že by se dala tahle komunikace šifrovat. Jasně, server si vygeneruje certifikát, soukromý a veřejný klíč a všechno se zdá být bezpečné. Jenže se ten problém jenom přesunul o krok dál. Stejný typ útoku se dá provádět dál, jenom potřebujete nepatrně výkonnější počítač.
A tehdy vzniklo HTTPS
Tedy alespoň tak jak ho používáme dnes. Certifikáty vydávají certifikační autority a proto to stojí peníze. Naštěstí existuje pár způsobů jak získat certifikát zdarma. Třeba Let’s encrypt. A přes to, že nic nestojí, není na nich vůbec nic špatného. Takový certifikát se nedá podvrhnout pokud nekompromitujete společnost která ho vydala. A i přes to, že k takovému incidentu už došlo, není to úplně častá praxe.
A jak to vlastně funguje?
Velmi zjednodušeně, váš počítač odešle hlavičku s požadavkem na web a technologiemi, které podporuje. Server pošle svůj certifikát a veřejný klíč, který bude počítač používat k šifrování odesílaných dat a je to. No a pak už je vaše komunikace šifrovaná a data která odesíláte jsou v bezpečí.
Co když to nefunguje?
Občas se stane, že narazíte na web, který má vypršelý nebo nefunkční certifikát. Obvykle má nějaký záložní, self-signed (špatný certifikát, podepsaný sám sebou, nemáte jistotu, že vás někdo nesleduje). Většinou stačí počkat, on si toho někdo všimne. Prohlížeč vás na takovou situaci upozorní.
Také je možné, že se vám místo zeleného zámku zobrazí žlutý. To znamená tzv. mixed content. Některé části webů jsou zabezpečené a některé ne. Teoreticky to může znamenat, že je web kompromitovaný, většinou to, ale je jenom nějaká nepozornost majitele a nic to neznamená. Přesto si dejte pozor pokud takovému webu dáváte svá data.
Jak nasadit HTTPS do WordPressu?
Existují dva způsoby. Buďto můžete použít plugin WP Force SSL, který bude vynucovat https i u odkazů, které běží na http. Bohužel tohle řešení s sebou nese lehčí výkonový postih a může způsobit i jiné poruchy, nejčastěji nekonečnou smyčku.
Druhá možnost je, že si dáte tu práci a všechny odkazy v databázi přepíšete z http na https. Nejjednodušší je použít plugin better search and replace a prostě nahradit jedno za druhé. Bohužel tahle varianta vám pomůže jenom pokud váš hosting umí vynutit přesměrování na https. Pokud ne, tak můžete zkusit toto nastavení souboru htaccess.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
V případě, že máte VPS nebo server, tento problém většinou odpadá.