HTTPS vždy a všude - nebojte se přejít

Ondra Kudlík   11. 8. 2014


Chcete přejít na HTTPS?

Google minulou středu oznámil, že webům, které běží vždy přes HTTPS bude přidávat nějaké bodíky navíc. Pěkně se o tom co to znamená rozepsal Lukáš Pítra ve svém článku HTTPS / SSL nově jako SEO faktor na Google. Tento článek je tedy reakcí na Lukášovu výzvu na doplnění o implementaci a také reakcí na dotazy a informace v komentářích u jeho článku.

Není třeba se bát

V prvé řadě, nebojte se. Web, který poběží komplet na HTTPS nebude pomalejší, nebude nijak ohromně dražší, nebude vám dělat problémy na mobilech a nebude vám každý týden hlásit, že mu vypršela platnost. O rozjetí HTTPS by se vám vždy měli postarat administrátoři vašeho serveru nebo pokud někde hostujete, tak např. váš vývojář spolu s hostingovou firmou. HTTPS je sice o něco náročnější než HTTP, zvláště na procesor vašeho webserveru, ale pokud neběžíte na železe, které patří do muzea, vůbec zvýšenou zátěž nezaznamenáte. Pokud máte web u nějakého hostera, nemusí vás tato stránka věci vůbec zajímat.

Migrujeme

  1. Pořiďte a nainstalujte certifikát
  2. Otestujte web na https
  3. Přidejte přesměrování
  4. Informujte vyhledávače o změně

1. Pořiďte a nainstalujte certifikát

Pořízení certifikátů sestává z několika dalších kroků (výběr certifikační autority, výběr typu certifikátu a další). Hlavně napoprvé to může být poněkud matoucí. Rozepsal jsem celý výběr pro tento článek, ale jelikož to spousta z vás již zná a bylo to dost mimo záběr, přesunul jsem vše do doprovodného článku Jaký SSL certifikát vybrat pro svůj web.

2. Otestujte web na https

Ještě než začnete něco přesměrovávat, vyzkoušejte váš web přes https:// a odstraňte případné problémy. Dejte si pozor na měřící kódy a veškerý vložený obsah (viz dále). Nezapomeňte otestovat, jestli je https certifikát nainstalovaný správně. Dobré je také zkontrolovat instalaci certifikátu pomocí velmi povedeného nástroje od SSL Labs. Pomůže vám odhalit běžné problémy a zranitelnosti. Skóre na SSL Labs

3. Přidejte přesměrování

Jakmile máte zkontrolováno, jednoduše nastavte přesměrování všeho co jde z protokolu http:// na protokol https:// se zachováním adresy. Pokud používáte na web serveru Apache, můžete v konfiguraci nebo httaccess využít například následující pravidlo (pozor jen na to, že podmínka v RewriteCond se může mírně lišit podle vašeho hostingu):

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^(.*)$             https://www.vasedomena.cz/$1 [R=301,L,QSA]

Určitě nenechávejte běžet zároveň HTTP i HTTPS verzi. Pro většinu vyhledávačů je to stejné jako mít dva weby se stejným obsahem. Technicky lze totiž provozovat úplně jiný web např. na http://igloonet.cz a na https://igloonet.cz, i když je to velmi neobvyklé.

Social proof - Počty sdílení

Ztratíte při přechodu na HTTPS informace o počtech sdílení adresy přes facebook, g+, twitter a další? Ano, přechod na https je v podstatě úplně stejný, jako když měníte doménu. Snad všechny sociální sítě ale neumí správně reagovat na přesměrování přes 301. Naštěstí mají všechny sociální tlačítka možnost nastavit natvrdo adresu webu, který chcete odkazovat. Díky tomu můžeme i na nové adrese do tlačítek nastavit tu původní, nic co by programátor nezvládl za pár minut hromadně vyřešit. Pěkně se o tom před pár lety rozepsal Michael King.

4. Informujte vyhledávače o změně

Jakmile web přesměrujete, je vhodné dát vyhledávačům vědět, že se změnila URL. Dělá se to úplně stejně, jako když migrujete na jinou doménu. Jak postupovat u jednotlivých vyhledávačů je už mimo kontext tohoto článku.

U Google by změna probíhala dle následujících kroků. V GWT je ale bohužel momentálně chyba, která znemožňuje vybrat jako nový web HTTPS stránku (díky Petru Soukupovi za upozornění).

Změna v GWT

  1. přihlašte se do Google Webmaster Tools
  2. přidejte si váš HTTPS web
  3. u HTTP webu použijte ikonu ozubeného kola a odkaz „Změna adresy“
  4. po projití kroků 1-3 klikněte na „Vyberte ověřenou stránku“ a vyberte váš nový HTTPS web - zde je momentálně u Google problém a nefunguje výběr https variant

Celý postup migrace pak můžete najít v nápovědě Google.

Markeťáci - pozor na měřící kódy, pluginy a další

Pozor na to, že pokud máte web na HTTPS, musíte vše co do stránky vkládáte dávat taktéž přes HTTPS. Tedy veškeré měřící kódy, embed kódy (youtube, slideshare atd), obrázky a další musí být načítány z https:// nebo pomocí protocol-relative URL (viz dále). V komentářích u Lukášova článku byla zmínka, že mediální obsah můžete poskytovat odněkud, kde https není. To ale určitě není pravda. Cokoliv je přímo vloženo ve webu (ne odkazováno) musí být načítáno přes https. V opačném případě některé prohlížeče zobrazí upozornění na načítání nezabezpečeného obsahu a novější prohlížeče už tiše takový obsah ignorují. Samozřejmě ale můžete takový obsah načítat z CDN, které HTTPS podporují. U měřících kódu jsou na to poskytovatelé většinou připraveni. Google Analytics se načítá přes protocol-relative URL, starší veze a některé další kódy zase detekují přes jaký protokol běží aktuální stránka a podle té načtou správnou verzi. Může se vám ale stát, že kód počítá pouze s HTTP a tím pádem vám nefunguje. Vyzkoušejte nejdřív jednoduše http:// část přepsat na https://. Pokud to pomůže, máte vyhráno.

Vzdálené skripty, který nemají HTTPS

Pokud se do poslední zmíněné situace dostanete, je to horší. Ideální je takovým skriptům se úplně vyhnout nebo kontaktovat poskytovatele, aby zpřístupnil i HTTPS verzi. Pokud se nezdaří, můžete některé skripty uložit lokálně (tím ale přijdete o jejich aktualizace) nebo můžete zkusit, aby vám pomohli vývojáři. Máme-li například vzdálený skript http://unsecured.com/analytics.js, můžeme vytvořit na našem webu skript unsecured-analytics.php s obsahem:

<?php echo file_get_contents("http://unsecured.com/analytics.js");

Ze svého webu pak budete načítat https://vasweb.cz/unsecured-analytics.php a vše je vyřešeno. Přiznám se, že jsem příklad netestoval, jde jen o myšlenku.

Nebudou mě vyhledávače pomalu indexovat?

Nevím o žádném, který by měl s HTTPS problémy. Google, jakožto tahoun HTTPS everywhere, bude určitě bez problémů. Ze zajímavosti dokonce tuto změnu podporoval už v roce 2012.

Certifikáty expirují

V komentářích u Lukášova postu je několikrát správně zmíněno, že je velký problém, když vám expiruje certifikát. Většina prohlížečů vám totiž na takovou stránku zabrání vůbec vstoupit. Je to ale úplně stejné, jako když vám vyexpiruje doména - v takovém případě zůstane váš web také nefunkční. Každý slušný dodavatel SSL certifikátů vás dostatečně dopředu na nutnost prodloužení certifikátu upozorní. Jeden háček tu ale přeci jenom je. Na rozdíl od domény, kde vám registrátor prodlouží doménu u sebe a vše je hotovo, musíte prodloužený certifikát znovu nainstalovat. Certifkáty se totiž fakticky nijak neprodlužují, ale vystavují se nové. Správná certifikační autorita vám certifikát vystaví dle expirace původního certifikátu. Pokud tedy v srpnu objednáte roční prodloužení certifikátu, který expiruje v říjnu, nový certifikát bude platit ihned (tedy od doby vystavení) až do října následujícího roku. Některé autority dokonce při brzkém prodloužení přidávají několik dní či týdnů navíc. Jedna technická: Při prodlužování vždy kvůli bezpečnosti vystavujte novou certifikační žádost. I když by vám nabídli využití té předchozí.

Technické tipy na závěr

Secure cookies

Přešli jste na HTTPS? Super, ať vývojáři ihned zapnou secure cookies. Při té příležitosti ať rovnou zkontrolují a zapnou httponly cookies (zde nelze necitovat Michala Špačka: „Teď hned. TEĎ. HNED.“). Několik informací najdete v článku a komentářích u Jakuba Vrány.

Protocol-relative URL

URL relativní dle protokolu, je jednoduchý způsob jak načítat obsah ze stránek, které provozují HTTP i HTTPS verzi pro daný obsah. Využívá toho např. právě Google Analytics. Namísto http:// nebo https:// takové odkazy začneme jednoduše pomocí // Prohlížeč pak zvolí variantu dle aktuálního protokolu. Můžete toho využít i vy např. při přípravě na přechod na HTTPS.

IP adresy a SNI

Pokud máte web na sdíleném hostingu, připravte se na to, že spolu s certifikátem budete potřebovat vlastní IP adresu. Pokud máte vlastní virtual nebo server, můžete ve většině případů použít primární IP svého serveru. Vlastní IP ale potřebujete pro každý certifikát, tedy budete-li zabezpečovat více různých domén (a nepoužijete-li SAN), musíte mít více IP.

Řešení nabízí SNI - Server Name Indication

Nemáte-li problém s odstřihnutím uživatelů používající pravěké technologie, zejména ty co používají MSIE na Windows XP nebo Android 2.2, můžete na vlastním serveru nebo u některých hosterů využít SNI, které umožňuje na jedné IP provozovat více certifikátů.

Máte další dotazy?

Snažil jsem se reagovat na většinu otázek a obav, které jsem zahlédl v článku Lukáše Pitry, jeho komentářích i jinde. Pokud jsem na něco zapomněl, napište mi v komentářích a pokusím se udělat aktualizaci. Stejně tak pokud si myslíte, že jsem s něčím vedle, sem s tím.