Preusmjeravanje HTTP web stranica na HTTPS u IIS-u

Zamislimo situaciju u kojoj trebamo web-stranicu HTTP, smještenu na Microsoft Windows Server 2016 i Internet Information Server 10 (IIS), preusmjeriti na njezin sigurniji "ekvivalent" HTTPS.

Cilj nam je napraviti preusmjeravanje tako da korisnici koji pokušaju otvoriti testnu web-stranicu http://http.test.local automatski budu preusmjereni na sigurniju https vezu https://http.test.local. Ovu poveznicu izmislili smo u testnoj okolini, a naravno da vi možete definirati svoje ime ili ga već imate ako radite promjenu u produkcijskom okruženju.

Prvo ćemo u testnoj okolini napraviti testnu web-stranicu imena http.test.local. Na njoj ćemo pokazati kako se stvara https poveznica, a zatim kako se radi preusmjeravanje s http na tu sigurniju https poveznicu.

Prije stvaranja web-stranice moramo ime i adresu servera na kojem je stranica unijeti u DNS, jer u protivnom klijenti neće znati gdje je stranica smještena (detaljniji prikaz tog postupka na Windows DNS-u opisan je na ovoj poveznici).

 

image001.jpg

Slika: Upis web-stranice u Windows DNS

 

Za stvaranje https poveznice potreban nam je certifikat. Mi ćemo stvoriti i koristiti samopotpisani (self-signed) certifikat imena http.test.local. Upute za stvaranje samopotpisanih certifikata u Windows okruženju možete pronaći u tri članka, također na ovom portalu, pa prema jednom od njih stvorite traženi certifikat.

Stvaranje testne web-stranice:
- napravite mapu na disku imena http te u njoj stvorite jednu datoteku index.html s tekstom "http.test.local" (c:\web\http\index.html)

- otvorite IIS konzolu, proširite stablo s lijeve strane do razine Sites, pa desni klik na Sites - Add Website... te u prozoru koji se otvorio popunite potrebna polja:

Site name: -> proizvoljan tekst koji najbolje opisuje svrhu stranice (mi ćemo staviti ime stranice)-> http.test.local (ovaj http iz naziva stranice nema nikakav utjecaj, to je samo naše izmišljeno ime stranice)

Physical path: -> putanja do lokacije web-stranice na disku -> c:\web\http

Host name: -> točno ime stranice kako je definirano u DNS-u -> http.test.local

 

image002.jpg

 

Sve potvrdite klikom na OK.

Na ovom prozoru, u polju Binding, pod Type: imali smo izbor poveznice http ili https. Naravno da tu možemo odmah izabrati sigurniju https poveznicu, ali tema ovog članka nije stvaranje, već preusmjeravanje na https. Razlog za to ćemo pojasniti u nekoliko rečenica.

Jedna realno moguća situacija je da ste prvo stvorili http, pa ste naknadno zaključili da želite sigurniju vezu, a u međuvremenu korisnici su već zapamtili, ili imaju negdje spremljenu http poveznicu, pa ih ne želimo ostaviti s nedostupnom stranicom, već želimo da im se otvori to što su htjeli, samo preko sigurnije veze.

 

HTTPS poveznicu naše testne stranice stvaramo tako da u IIS konzoli u krajnjem desnom panelu Actions otvorimo Bindings... (isto možemo napraviti i desnim klikom na ime stranice pa Edit Bindings...).

U prozoru koji se otvorio kliknemo na Add..., nakon čega se otvara novi prozor Add Site Binding u kojem ćemo pod Type: izabrati https, a pod Host name: upisati http.test.local

Primijetite da nam se izborom https automatski na dnu prozora pojavila mogućnost izbora certifikata, a port se iz 80 promijenio u 443.

 

image003.jpg

 

Gumb OK je zasivljen dok ne učitamo certifikat jer bez njega ne možemo stvoriti https poveznicu. Zato kliknite na strelicu u polju SSL certificate: pojavit će se popis svih dostupnih certifikata, te izaberite ranije stvoreni certifikat imena http.test.local. Sve potvrdite klikom na OK.

 

image004.jpg

 

Sad možemo u IIS konzoli vidjeti da u donjem desnom kutu, u polju Browse Website, imamo dvije poveznice, jednu preko porta 80, a drugu preko 443.

 

image005.jpg

 

Ako kliknete na bilo koju od njih, otvorit će Vam se stranica koju smo stvorili na početku članka (index.html s tekstom http.test.local).

Za preusmjeravanje s http na https nećemo se koristiti modulom HTTP Redirect, jer bi dobili nepouzdano, odnosno neispravno, preusmjeravanje koje generira beskonačnu petlju preusmjeravanja (loop) u kojem http poziva https, koji ima isto ime i smještaj kao i http pa to u različitim preglednicima različito funkcionira, odnosno svaki pokazuje drugu grešku (npr. Chrome ERR_TOO_MANY_REDIRECTS...), a nekad čak i funkcionira. Uglavnom nepouzdana opcija.

Kako ćemo onda napraviti preusmjeravanje? Korištenjem IIS modula Error Pages.

Prije toga ćemo napraviti nekoliko dodatnih koraka. Prvo ćemo definirati da je stranica dostupna samo preko https (port 443). To radimo u IIS modulu SSL Settings gdje ćemo aktivirati opciju Require SSL.

 

image006.jpg

 

Ako bismo prije stvaranja linka https u Binding pokušali aktivirati SSL, postavke modula bile bi zasivljene i dobili bismo poruku: The site does not have a secure binding (HTTPS) and cannot accept SSL connections, što je i logično.

Nakon aktivacije SSL-a, klijent koji pokuša otvoriti link http dobit će grešku "HTTP Error 403.4 – Forbidden".

 

image007.jpg

 

Taj kôd greške iskoristit ćemo u modulu Error Pages tako da ga dodamo u konzolu i definiramo što će se desiti kad klijent dobije taj odgovor od servera. A definirat ćemo da mu taj kôd greške otvara stranicu https://http.test.local

Znači, otvorite modul Error Pages, kliknite desno na Add... (s obzirom na to da kôd 403.4 ne postoji na listi već definiranih kodova) i popunite polja kako je prikazano na donjoj slici.

 

image008.jpg

 

Time je cijeli postupak završen i klijent više neće dobiti poruku 403.4, već će mu se web-stranica automatski preusmjeriti na poveznicu https.

Za kraj moramo spomenuti jednu "sitnicu" koja bi vam mogla zagorčati život. Ako podešeno preusmjeravanje testirate s tog lokalnog servera na kojem su smještene te web-stranice, može vam se dogoditi da preusmjeravanje ne radi, te da i dalje dobivate odgovor 403.4. Rješenje toga nije toliko očigledno, ali je banalno: testiranje napravite s nekog drugog računala (pojašnjenje)!