Https a jak převést WordPress

https vs http

Ikonka zámečku vedle adresy webu ukazuje, že s internetovými stránkami komunikujete šifrovaně. V roce 2019 už by to měl být standard. Minimálně Google upřednostňuje weby s https. Nasazení SSL (https://) posiluje důvěru zákazníka, „zelený zámeček“ u adresy vypadá lépe, než upozornění na nedůvěryhodný web.

Pokud je připravován nový web, tak instalace na https:// adresu s validním certifikátem by měla být samozřejmostí. Zůstává bezpočet starších webů, samozřejmě udržovaných, aktualizovaných a zabezpečených, které jsou dostupné nešifrovanou a tudíž nezabezpečenou cestou, tj. s adresou začínající http://.

Důvěra návštěvníků je věc pocitu. Pokud je na stránkách i jen kontaktní formulář, mělo by být SSL samozřejmostí. Stejná premisa platí pro registrace, či elektronický obchod. Máme tu GDPR a zabezpečený přenos je jedním z důležitých kroků pro ochranu údajů zákazníků/návštěvníků.

Zavedení certifikátu

Nejlevnější cesta k šifrované komunikaci; s důvěryhodným certifikátem, nikoliv self-signed; je certifikát zdarma Let’s Encrypt, který umí zprostředkovat snad již každý webhosting. Některý bohužel za příplatek i za službu SNI. Certifikát od jiné certifikační služby bude nejspíše zpoplatněný (stojí za úvahu, zda to běžný návštěvník kontroluje a ocení).

Pro získání a zavedení certifikátu je potřebné kontaktovat svůj webhosting, buď sami, nebo prostřednictvím vašeho webmastera/správce internetových stránek.

Řešení pluginem (dočasné)

Plugin Really Simple SSL zajistí přechod na SSL „na jediný klik“. Nemění strukturu databáze, po odinstalování bude provoz webu opět na nešifrovaném http. Na stránce pluginu je zřetelně napsáno, že plugin je pouze dočasné řešení, takže pokud to jde, mám snahu se mu vyhnout.

Poznámka

Really Simple SSL umožňuje od verze 3 deaktivaci se zachováním SSL, ale uživatel bude muset řešit mixovaný obsah, nebo nebude fungovat https volání rest_api; více viz Really Simple SSL knowledge base (anglicky).

Cesta k https bez (stálého) pluginu

Správná cesta je přes úpravy adres v databázi a přesměrování adres pomocí .htaccess. Nastavení externích služeb (Analytics, Search Console, Bing Webmasters, …) je nutné udělat ve všech případech.

Velmi důležité je udělat zálohu před převodem.

Mezikrok s nastavením adresy webu a domovské stránky v administraci na https vynechávám. Při hromadné úpravě adres jsou změněny i tyto dvě základní adresy.

Administrace jen po SSL (https)

Aby byla administrace, a veškerá práce v ní, přístupná pouze přes HTTPS je potřebné nastavit konstantu
FORCE_SSL_ADMIN v souboru wp-config.php:

define('FORCE_SSL_ADMIN', true);

Úpravy adres

Převod skriptem

Skript Search Replace DB, je tou nejbezpečnější snadnou cestou. Autoři vyřešili nejen prosté, ale i serializované řetězce. Teoreticky zbývá kontrola tabulek vytvořených rozšířeními (pluginy) WordPressu, zda nepoužívají starou http:// adresu.

Search and Replace DB tool

Ne vždy je tento skript využitelný, již jsem viděl web, kde si skript „vylámal zuby“.

Úprava stažené databáze

Druhou cestou je export databáze a nahrazení staré adresy s http:// adresou novou, začínající https://, k čemuž mi stačí editor sed s následnou kontrolou vimdiffem. Žádná velká magie :-).

Úprava v MySQL na hostingu

Pokud si netroufáte na proudový editor sed, může práci udělat MariaDB/MySQL. Samozřejmě, že i v tomto případě platí nutnost zálohy a nutnost porovnat databázi před převodem i po něm.

V administračním nástroji databáze, obvykle jde o PHPMyAdmin, stačí zadat jednoduchou sekvenci příkazů:
UPDATE wp_options SET option_value = replace(option_value, 'http://www.mojeadresa.cz', 'https://www.mojeadresa.cz') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://www.mojeadresa.cz','https://www.mojeadresa.cz');
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.mojeadresa.cz', 'https://www.mojeadresa.cz');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.mojeadresa.cz','https://www.mojeadresa.cz');

Přímou úpravu DB jen v případě nouze!

Poslední 2 způsoby, úpravy v SQL scriptu, nebo SQL sekvencí v databázi, je potřebné považovat za opravdu nouzové řešení. WordPress používá serializaci, kde je nedílnou částí i délka uloženého řetězce. Je nutné porovnat soubory záloh přes převodem i po převodu a opravit případné nesrovnalosti. Pro porovnání používám vimdiff.

Přesměrování

Prohlížečům návštěvníků, ale i robotům fulltextových vyhledávačů je potřebné sdělit, že stránkám se pozměnila adresa. K tomu poslouží přesměrování 301, jež se přidává na úplný začátek souboru .htaccess.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Je dobré nezapomenout upravit adresu mapy stránek (sitemap) v souboru robots.txt. Robot bude přesměrován z http na https pravidly uvedenými v .htaccess na šifrovaný přenos, ale je korektní, aby mapu stránek dostal z adresy, kde si ji vyžádal.

Kontrola

Pro kontrolu používám SSL Check, jež projde celý web a upozorní i na „mixovaný obsah“ (https stránka stahuje některé části po nešifrovaném http).

Malý výčet problémů:

  • Cache, jež obsahuje vygenerované stránky, obvykle ji stačí vypráznit. (Setkal jsem se i s pluginem, který si řešil další cache sám a taková vlastnost se nehledá zcela dobře.)
  • Nutná úprava odvozeného tématu, kde tvůrce nechal načítat externí obsah po http://. (Například bylo nutné vyřešit odebrání a přidání Google Fontů, protože autoři komerční šablony je načítali nešifrovaným protokolem a na stránkách byl mixovaný obsah.)

Další kontrola je v prohlížeči, pomocí klávesy F12 zapněte vývojářskou konzoli, která též ukazuje mixovaný obsah, ale jen pro konkrétní načtenou stránku, web byste museli celý ručně projít.

vývojářská konzole Chrome

Externí služby

Ke stránkám jsou nezřídka navázány externí služby, Google Analytics a Search Console počínaje, přes webmaster nástroje Bingu i Seznamu až po nejrůznější sdílecí služby. V některých stačí jen úprava URL (adresy webu), jinde se bude web registrovat, jako zcela nový.

Celá práce trvá od jedné do nižších desítek hodin, záleží na množství stránek webu, použitých rozšířeních, či šabloně.

Moc se nemluví o http/2, jehož nasazení je podmíněné weby běžícími na https. Binární protokol je mnohem rychlejší, datově úspornější, paralelizovaný s možností prioritizace. A dnes je podporován běžně rozšířenými prohlížeči i servery.

Potřebujete pomoci, nejen s přechodem na https, ale i dalšími technickými záležitostmi WordPressu? Neváhejte s kontaktem, rád vám pomohu.

Datum:  Publikováno:
Štítky: