Migracija iš HTTP į HTTPS: nuo A iki Ž

Sakoma, kad šiandien jau nebėra neprivačių duomenų. Žemiau – aprašymas proceso, kaip įsigyti (nemokamą) SSL sertifikatą ir perdaryti svetainę į HTTPS.

Disklaimeris. Nors toliau aprašyti veiksmai vyksta ant Interneto vizijos hostingo ir WordPress turinio valdymo sistemoje, tačiau toks pat principas galioja ir kitiems IPT, kitoms TVS.
NB! Tam tikrame žingsnyje yra vykdomi keitimai duomenų bazėje, todėl rekomenduoju visa ko pradžioje pasidaryti rezervinę DB kopiją. Nes:

Yra administratoriai kurie daro rezervines kopijas. Ir yra administratoriai, kurie JAU daro rezervines kopijas.

Būkim su pirmaisiais…

Kam to reikia?

Koks skirtumas tarp svetainių, kurios veikia per HTTP nuo veikiančių per HTTPS? Paprastas liaudiškas paaiškinimas būtų toks: įsivaizduokite, kad esate parduotuvėje ir per visą salę šaukiate pardavėjui: „Perku pakelį prezervatyvų! Mano kreditkės duomenys 1234-4567-…, o gyvenu adresu Šilelio g. 1, Anykščiuose…“ Būtent tokiu būdu duomenys keliauja nuo naršyklės iki interneto svetainės serverio ir atgal – „atviru tekstu“ ir „turintis ausis“ te išgirsta. HTTPS protokolo gi atveju, duomenys keliauja šifruoti – kaip įvairių simbolių kratinys. Kažkaip taip.

Įsigyjam SSL sertifikatą

DirectAdmin‘e įjungiam SSL palaikymą domenui:

Įjungiam SSL palaikymą domenui

Toliau, skyrelyje SSL certificates

DirectAdmin SSL certificates

užsakom nemokamą Let’s Encrypt sertifikatą:

Užsakom Let's encrypt

Užsakyta sėkmingai:

Sertifikatas sukurtas

Patikrinam

Jau galima naršyklėje patikrinti – užeiti į svetainę adreso priekyje vietoj http://  parašius https:// Jei viskas tvarkoje, naršyklės adreso laukelyje matysime „žalią spynelę“.

Viena iš HTTPS’o ypatybių yra tokia, kad visi svetainės resursai privalo naudoti HTTPS – t.y. visos iliustracijos, skriptai ir pan. Jei bus kitaip, naršyklė tuos resursus užblokuos ir rodys „sulūžusią spynelę“. Su nuosavais resursais susitvarkysim patys, o problemų gali sukelti naudojamas trečių šalių kodas. Laimei, pažangūs resursai pateikia abu savo skriptų variantus – ir HTTP, ir HTTPS. O nepažangius reikia raginti.

Keičiam adresus DB

Duomenų bazėje esančioje informacijoje kol kas visi resursai turi http:// – keisim į https://. Tą padaryti būtų galima prisijungus į duomenų bazę (e.g į MySQL – tiesiai ar per phpMyAdmin’o įrankį) ir leidžiant atskiras REPLACE užklausas. Tačiau tai būtų nemenkas vargelis – daug lentelių, daug laukų lentelėse. O pats sudėtingiausias to aspektas – kai duomenys saugomi serializuoti. Pavyzdžiui, JSON formatu. Tokiu atveju vien tik pakeisti http į https nepakaks – reikės perrašyti „kontrolines sumas“.

Skirtumų pavyzdys (ir čia tik nesudėtingas objektas):

a:1:{s:3:"url";s:18:"http://example.com";}

vs

a:1:{s:3:"url";s:19:"https://example.com";}

Masiniam DB search/replace’ui rekomenduoju patogų įrankį Search-Replace-DB. Įkeliam į šakninę WordPress’o direktoriją ir jis automatiškai atpažįsta DB prisijungimo nustatymus. Repleisinam http://kaup  į https://kaup  (mums nereikia keisti „svetimų“ resursų):

Replace DB: Search / replace

Minėtas įrankis leidžia pradžioje imituoti keitimą – spaudžiam Dry run ir matom, kas bus pakeista. Efektyvumas akivaizdus:

Replace DB: Dry run

Peržiūrim būsimus pakeitimus ir spaudžiam (juk jau turit pasidarę rezervinę DB kopiją?)  Live run.

Po keitimų panaršom svetainę – visos nuorodos jau turėtų būti su https priekyje. Nepamirštam pašalinti Search-Replace-DB įrankio iš serverio! Dabar.

Peradresavimai gūglams

Jau beveik viskas gerai, tačiau apie pasikeitimus turim informuoti paieškos sistemas. Ir be to lankytojai, atėję tiesiai iš gūglų papuls į senąją http versiją. Rašom peradresavimus .htaccess  faile (čia bus ir kitos, nesusijusios direktyvos, aktualus yra išskirtas kodas):

AddDefaultCharset utf-8

RewriteEngine on

# http → https
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# www → non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Atkreipiu dėmesį, kad jei naudojate Google Analytics, tai ten Profile nustatymuose reikia pakeisti http:// į https://

HSTS headeris

Paskutinis „potėpis“: pridedam HSTS headerį. WordPress’o atveju galime temos functions.php  faile prirašyti:

add_action( 'send_headers', 'add_header_hsts' );
function add_header_hsts() {
    header( "Strict-Transport-Security: max-age=31536000; includeSubDomains" );
}

Patikrinam Web Developer’io konsolėje:

HTTP headers

Rezultatas!

Secure Connection

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.