Úvod
Standardní spojení s webovým serverem pomocí protokolu HTTP neobsahuje prvky šifrování přenášených dat nebo ověření identity serveru z pohledu klienta. Rizikem je tedy odposlouchávání komunikace a podvržení identity serveru. Proto bylo vyvinuto rozšíření pomocí zabezpečovací vrstvy SSL popř. novější TLS, souhrnně tedy mluvíme o HTTPS (Hypertext Transfer Protocol Secure).
Na úvod je potřeba říci, že aby bylo zabezpečení uživatele kompletní, je
potřeba, aby si obě strany před vzájemnou komunikací vyměnily veřejné
klíče pomocí jiného kanálu, než je ten, pomocí kterého budou následně chtít (bezpečně) komunikovat. To je ale v praxi poměrně obtížné a proto se volí jiný
způsob a to je přenechání ověření pravosti klíče jinému subjektu, což je nejčastěji obecně uznávaná, důvěryhodná autorita. Ve výsledku to funguje tak, že nám server předloží digitálně podepsaný certifikát od tzv. certifikační autority a my jej porovnáme s veřejným klíčem na naší straně, resp. na našem počítači. Certifikáty od důvěryhodných certifikačních autorit jsou dodávány společně s webovými prohlížeči (za což se pochopitelně platí určitá částka), takže se k uživateli dostanou poměrně snadno a navíc je bez větších komplikacích možné ihned použít aniž by musel uživatel sám obstarávat dodání certifikátu od protistrany.
Existuje druhý typ certifikátů, tzv self-signed, tedy certifikát podepsaný sám sebou. Takový to certifikát si může vytvořit kdokoli sám u sebe, samozřejmě zdarma. Pokud server, při zahájení komunikace předloží tento self-signed certikát, objeví se upozornění, kdy vás prohlížeč varuje že nelze ověřit věrohodnost serveru protože certifikát nebyl vydán certifikační autoritou a je jen na vás aby jste uvážili jestli protistraně důvěřujete (viz obrázek na konci článku). Pokud ano, tak většina prohlížečů umožňuje server zařadit mezi důvěryhodné a přímo certifikát stáhnout a uložit. Při další návštěvě serveru už bude prohlížeč na server nahlížet jako na důvěryhodný (resp. za důvěryhodný ho považuje uživatel).
Nicméně je potřeba dodat, že vlastnost šifrování přenosu je stále funkční, i když není certifikát podepsaný certifikační autoritou.
Z výše uvedených důvodů je výskyt self-signed certifikátů na komerčních webech poměrně nízký a např u služeb jako je internetové bankovnictví je v podstatě nepřijatelný. Naopak u menších webů a serverů pro omezený počet uživatelů (nebo pro vlastní server určený pro testování a experimenty) je vlastní certifikát dostačující. V těchto případech je prioritou šifrování komunikace (např. zadávání hesel při přihlašování k službám). Self-signed certifikáty lze použít i při zabezpečeném FTP. Některé společnosti začali dokonce nabízet podepsané certifikáty zdarma, o tom snad v jiném článku.
Ukázka informací o self-signed certifikátu. |
Instalace
Ukážeme si vytvoření vlastního certifikátu pro HTTPS spojení v Apache2 bežící na Ubuntu 12.4 LTS (stejný postup je samozřejmě možný v Debianu). Předpokladem je mít přístup k root účtu. Pokud nejste přihlášeni přes root účet, před každý příkaz dopiště sudo.
Pokud nemáme ještě webový server Apache, tak jej nyní nainstalujeme
apt-get install apache2Dále povolíme SSL modul
a2enmod sslRestartujeme web server
service apache2 restartPro certifikáty si vytvoříme novou složku
mkdir /etc/apache2/sslVytvoříme nový pár klíčů na straně serveru a certifikát s platností jeden rok (parametr -days).
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crtV konzoli následuje série údajů které můžete vyplnit. Doporučuje se vyplnit alespoň některé.
You are about to be asked to enter information that will be incorporatedNyní je potřeba nastavit Apache. Otevřeme konfig pro SSL.
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: // stát
State or Province Name (full name) [Some-State]: // provincie (okres)
Locality Name (eg, city) []: //lokalita (město)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: //název společnosti
Organizational Unit Name (eg, section) []: //název oddělení
Common Name (e.g. server FQDN or YOUR name) []: //volitelný název (jméno)
Email Address []: //email
nano /etc/apache2/sites-available/default-sslZde vložíme, např. pod řádek <VirtualHost _default_:443> následující řádek
ServerName nazevserveru.domena:443nebo pokud máme jen IP adresu
ServerName 10.11.12.13:443Dále najdeme řádek
SSLEngine onměl by být nezakomentovaný (bez # na začátku). Pokud tam není nebo vypadá jinak, přepište ho.
Ještě je potřeba definovat cestu ke klíčům a certifikátu:
SSLCertificateFile /etc/apache2/ssl/apache.crtZ důvodů bezpečnosti (POODLE útok) vypneme starší verze protokolů SSLv2 a SSLv3
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
SSLProtocol all -SSLv2 -SSLv3Soubor uložte a zavřete (Crtl+X a potvrdit zapsání pomocí klávesy Y).
Na závěr ještě musíme nastavit přístup přes port 443. Povolíme Virtual Hosta default-sll
a2ensite default-sslA restartujeme Apache
service apache2 reloadNyní do prohlížeče zadejte
https://nazevserveru.domenaa ověřte funkčnost.
Varování prohlížeče Firefox na nedůvěryhodný certifikát. Ten jsme vygenerovali v předchozí ukázce |
Bonus na závěr: V tuto chvíli lze na webový server přistupovat pomocí HTTPS (port 443) a zárověň i postaru přes HTTP (port 80), tedy i nezabezpečeně. Pokud chcete povolit jen přístup přes zabezpečený port 443, postup je následující.
Povolte mód rewrite
a2enmod rewriteEditujte soubor
nano /etc/apache2/sites-available/defaulta do něho přidejte pod řádek <VirtualHost *:80> následující tři řádky
RewriteEngine onOpět restart server
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
service apache2 reloadNyní pokud zadáte adresu s http:// na začátku, dojde k přesměrování na https://.
Seznam změn:
9-11-2014: doplněna bezpečnostní "záplata"
Reference: 1, 2, 3
Žádné komentáře:
Okomentovat