Name-based SSL virtualni poslužitelji

Usprkos običajenom uverenju da ne možemo imati višestruke SSL certifikate za virtualne hostove na istom poslužitelju, problem je zapravo već riješen. Nekada se to radilo na taj način da smo koristili više IP adresa (IP-based) ili više portova (port-based), ali osjećala se potreba za jednostavnim načinom podešavanja više SSL virtualnih hostova na istom poslužitelju.

Rješenje je ponuđeno u vidu ekstenzije SSL protokola - SNI (Server Name Identification). Ova ekstenzija postoji od inačice 0.9.8f, a u Debian Squeezu inačica paketa je 0.9.8o. Apache bi trebao imati SSL već ugrađen, pa će mod_ssl automatski detektirati ovu ekstenziju i uključiti je. Dakle, sve je spremno za novu konfiguraciju.

U čemu je uopće problem s name-based SSL virtualnim hostovima? Kad preglednik pošalje zahtjev za web stranicom, u zaglavlju šalje i podatak koji web poslužitelj zapravo želi posjetiti (u vidu retka "Host: www.domena.hr"). Kod SSL-a ovako nešto nije bilo moguće, jer se prvo uspostavlja SSL konekcija, pa tek onda šalje HTTP zahtjev. U tom trenutku je već kasno za zaglavlje "Host:" pa više virtualnih poslužitelja na istoj adresi nije bilo moguće implementirati, odnosno jest, ali na nekom drugom, nestandardnom, portu.

Rješenje je nađeno u promjeni SSL protokola, tako da se podatak koji virtualni poslužitelj želimo šalje odmah u samom postupku uspostave SSL konekcije. Time je problem riješen, a ostaje pripaziti da i s klijentske strane imamo softver koji podržava SNI. Danas je to lako ispuniti: podržavaju ga IE 7 i viši, Firefox 2 i viši, Opera 8 i više. Nekada su problematični bili mobilni klijenti, ali uzimajući u obzir brzinu kojom se razvijaju mobilne platforme, sumnjamo da je to danas problem.

Konfiguracija je zapravo lagana, identična kreiranju "običnog" novog virtualnog poslužitelja.

U /etc/apache2/ports.conf upišite sljedeće:

NameVirtualHost 161.53.X.Y:80
Listen 80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
NameVirtualHost 161.53.X.Y:443
Listen 443
</IfModule>

Kad kažemo "upišite", zapravo mislimo "prepravite". Uz uobičajeni redak NameVirtualHost, upišite i dodatni koji će se odnositi na SSL virtualni host. Možete koristiti i zvjezdicu umjesto IP adrese, a ona znači: "sva dostupna mrežna sučelja, odnosno IP adrese na poslužitelju". Ukoliko adresa imate više, a ne želite na svima držati HTTP/SSL servis, pripazite koji vam oblik zapravo treba.

Ostavili smo i originalna upozorenja, jer su važna. Naime, bitno je da isti oblik rabite i uz direktivu NameVirtualHost i direktivu VirtualHost. VirtualHost upisujete u konfiguracijsku datoteku svog virtualnog hosta, recimo /etc/apache2/sites-available/www.domena.hr:

<VirtualHost 161.53.X.Y:443>
ServerAdmin webmaster@domena.hr
ServerName studenti.domena.hr
DocumentRoot /var/www/studenti

# ...druge standardne direktive
</VirtualHost>

Osim ovog, morate provjeriti i promijeniti unose u virtualnom hostu ssl, odnosno default-ssl. Obično je dovoljno samo uskladiti VirtualHost redak.

Aktivirajte ovaj virtualni poslužitelj i restartajte apache.

Od novih opcija postoji samo jedna, SSLStrictSNIVHostCheck. Iako ju je teško pročitati, ona određuje kako će se ponašati preglednici koji ne podržavaju SNI (a rekli smo da je danas teško naići na takve). Ukoliko je vrijednost varijable postavljena na "on", stari preglednici neće moći vidjeti nijedan SSL virtualni host. Ukoliko je vrijednost "off", tada će moći. Ukoliko je ova varijabla unesena u konfiguraciju virtualnog hosta, onda se samo na njega odnosi, za razliku od globalnog značenja kada je definirate unutar konfiguracije apacheja.

Sitnije detalje i finese možete pronaći u dokumentaciji, a odlična stranica za početak se nalazi na adresi
https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI.

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)