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

STARÝ ČLÁNEK - BERTE S REZERVOU

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

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}

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

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.