SSL certifikát pro více domén na jedné IP/VPS

Chtěl jsem pro svůj eshop Krutý Vohoz a pak ještě pro Steam Kitty zajistit SSL certifikát. Nakonec jsem si koupil Multi cosi pro tři domény (+tento blog :)) na stránkách SSLS.cz za 419 Kč na rok, bylo to levnější než dva samostatné certifikáty pro dvě domény. Problém byl ale s instalací, jak to vyřešit, když mám jeden VPS s jednou IP. Pomohla mi nápověda na jejich webu, a moje řešení bych vám chtěl já, samozvaný UNIX server expert, ukázat. Celé se to dá nastavit v /etc/apache2/sites-available. Budu nastavovat SSL pro domény skoula.cz, krutyvohoz.cz a steamkitty.com. Na serveru budou ale i nezapezpečené domény s klasickým http://. Nejprve vám ukážu soubor s virtual hostem pro běžnou doménu, bez SSL (tedy http://). Je to easy, doména dogpee.net a nastavený DocumentRoot.

<VirtualHost *:80>
    ServerName dogpee.net
    ServerAlias www.dogpee.net
    DocumentRoot /var/www/dogpee.net
</VirtualHost>

Pak tu máme virtualhost pro doménu, kterou sice chceme zabezpečit SSL certifikátem, ale potřebujeme, aby fungovala i bez něj, tedy pod běžným http://. Doména skoula.cz, přesměrujeme ji na https://skoula.cz.

<VirtualHost *:80>
    ServerName skoula.cz
    ServerAlias www.skoula.cz
    RewriteEngine on
    RewriteRule (.*) https://skoula.cz%{REQUEST_URI}
</VirtualHost>

A teďka musíme vyřešit samotné požadavky na https://. Tady už je ale problém, protože (omlouvám se za polopatismus/nepravdy, ale tak si to představuji), na jedné IP nelze provozovat více SSL domén, protože prohlížeč musí nejprve navázat SSL spojení a až pak pozná, o kterou doménu se jedná. Takže: Vytvoříme si soubor s jedním VirtualHostem, který obhospodařuje všechny domény zabezpečené SSL. Ten už je trochu delší. Důležitá je hlavička, kde specifikujeme IP serveru a port 443 (na rozdíl od klasického 80). Pak uvedeme ServerName a ServerAlias, ve kterém vyjmenujeme všechny domény, které chceme zabezpečit SSL, včetně jejich www. variant. Následně uvedeme cestu k certifikátu, intermediate certifikátu a privátnímu klíči, obsah těchto souborů viz nápověda na odkazu výše. A pak už specifikujeme jednotlivé domény a přesměrováváme požadavky do složek s weby, akorát místo DocumentRoot nastavíme přesměrování pomocí RewriteRule. Takže finta je v tom, že máme jeden VirtualHost pro všechny SSL weby a až v něm přesměrováváme požadavky do složek s weby.

<VirtualHost 1.2.3.4:443>
 ServerName www.skoula.cz
 ServerAlias skoula.cz steamkitty.com www.steamkitty.com krutyvohoz.cz www.krutyvohoz.cz 
 SSLEngine on
 SSLProtocol all
 SSLCertificateFile /cesta/k/server.cer 
 SSLCACertificateFile /cesta/k/intermediate.cer 
 SSLCertificateKeyFile /cesta/k/private.key 

 RewriteEngine on

 RewriteCond %{HTTP_HOST} ^(www\.)?skoula\.cz
 RewriteCond %{REQUEST_URI} !^/var/www/skoula.cz
 RewriteRule ^(.*) /var/www/skoula.cz/$1

 RewriteCond %{HTTP_HOST} ^(www\.)?steamkitty\.com
 RewriteCond %{REQUEST_URI} !^/var/www/steamkitty.com
 RewriteRule ^(.*) /var/www/steamkitty.com/$1

 RewriteCond %{HTTP_HOST} ^(www\.)?krutyvohoz\.cz
 RewriteCond %{REQUEST_URI} !^/var/www/krutyvohoz.cz
 RewriteRule ^(.*) /var/www/krutyvohoz.cz/$1
</VirtualHost>

Chtěl bych ještě dodat, že toto řešení není nejlepší, došel jsem na něj metodou pokus/omyl, ale funguje. Každý soubor s VirtualHostem nezapomeňte aktivovat příkazem:

a2ensite soubor

A po každé změně restartovat Apache. Hezký den.

Nebezpečnost Endory

Stokrát to tu bylo a bude to tu zase. Přítelkyně si chtěla zrušit jeden svůj web zaměřený na ženy a zapoměla heslo. Web měla u Endory. Vyplnila email, chtěla si nechat poslat nové a … došlo jí to staré, v plain textu.

Vždyť zahashovat heslo umí každý “rádoby PHP student”, tak jak je možné, že ne tak etablovaný (a hlavně známý) hosting jako Endora?