Nasazení Let's Encrypt na Apache

Linux a UNIX Nasazení Let's Encrypt na Apache

Bezpečnost je v prostředí internetu stále více a více zdokonalována. Na přenos údajů od uživatele na server a naopak se ale u webů či různých API často zapomíná - stále probíhají přes nešifrovaný HTTP protokol. Právě to se snaží změnit iniciativa Let's Encrypt, kterou podporují přední společnosti zabývající se webem a sítěmi (například Mozilla, Cisco, Facebook či IdenTrust). Jak toho chtějí dosáhnout? Let's Encrypt rozdává certifikáty zdarma, ověření vlastnictví probíhá automaticky (tedy není tak zdlouhavé) a u webserverů Apache a Nginx se dokonce certifikát automaticky nakonfiguruje. V tomto článku si ukážeme, jak na to.

Proč bych to měl chtít?

Pokud HTTPS nepoužíváte, může útočník pomocí sniffingu (odposlouchávání) paketů zjistit důvěrné informace vašeho klienta. Jsou totiž zasílány nešifrovaně (třeba jako obyčejný text) a každý, kdo chce, k nim může na trase uživatel <---> server získat přístup. Mezi tyto důvěrné informace může patřit například i heslo uživatele. Vám by se líbilo, kdyby vám právě teď někdo odposlouchával připojení a logoval si veškeré vaše přihlašovací údaje?

Budeme potřebovat

  • Root přístup k serveru, na kterém běží Apache
  • Nainstalovaný Git
  • Něco, čím zabijeme čas, když se bude certifikát generovat

Příprava

Pokud nejste přihlášeni jako root, pak můžete dočasně získat administrátorská práva příkazem sudo (po dokončení práce se jich ovšem nezapomeňte vzdát příkazem exit). Druhá, bezpečnější, možnost je před každý příkaz (vyžadující root práva) připsat sudo.

sudo su

Nejprve si naklonujeme repozitář s Let's Encrypt klientem (vytvoří se v aktuálním adresáři):

git clone https://github.com/letsencrypt/letsencrypt

A poté si otevřeme složku s klientem:

cd letsencrypt

Nyní je ještě třeba řádně připravit Apache. Pokud plánujete vynucovat HTTPS, je třeba aktivovat mod_rewrite:

a2enmod rewrite

Dále musíte v konfiguraci Apache nastavit pro složku, ve které se nachází váš web, vlastnost AllowOverride na All. Defaultní nastavení je většinou na hodnotu None - v tomto případě by se vám URL nepřepsala na zabezpečenou variantu.

Aby SSL fungovalo, je třeba ho povolit v Apache:

a2enmod ssl

Pozor!

Ujistěte se, že doména, pro kterou chcete certifikát získat, má v Apache vlastní konfigurační soubor a v tomto souboru se nachází pouze jeden VirtualHost - té dané domény. Let's Encrypt si bohužel zatím nerozumí se soubory, ve kterých je více VirtualHostů a certifikát tak získáte, ale nenainstaluje se. Je také nutné, aby byl ve VirtualHostu uveden parametr ServerName s hodnotou domény, pro kterou chcete certifikát získat, například:

ServerName mojesuperstranka.cz

Pokud parametr neuvedete, Let's Encrypt doménu nerozpozná a nenabídne.

Získávání certifikátu

Nyní přichází ta nejlepší část - získávání samotného certifikátu. Spusťte staženou utilitu příkazem:

./letsencrypt-auto

Po chvíli se zobrazí seznam domén, které Let's Encrypt rozpoznal. Pokud tu svoji nevidíte, pořádně si přečtěte Pozor! v sekci Příprava. Je možné získat certifikát i pro více domén. Ve výchozím stavu jsou zaškrtnuté všechny - seznamem se pohybujete šipkou nahoru a dolů, doménu zaškrtnete a odškrtnete (zaškrtnutá = certifikát bude generován = hvězdička v hranatých závorkách před doménovým jménem) stisknutím mezerníku.

Po výběru všech domén, pro které certifikát chcete, stačí stisknout Enter. Nyní se ověří, zda je doména opravdu vaše. O certifikát totiž musíte žádat ze serveru, na který doména odkazuje A záznamem (zda se posuzuje také AAAA záznam, tedy IPv6, mi není známo). Pokud ověření proběhne v pořádku, přijde na řadu výběr úrovně bezpečnosti. Máte na výběr mezi Easy a Secure variantou. Easy dovolí uživateli svobodně se rozhodnout, zda bude používat HTTP nebo HTTPS protokol (tuto možnost nepodporučuji). Secure vynutí používání HTTPS tím, že pomocí mod_rewrite přidá do VirtualHostu portu 80 přesměrování na HTTPS.

Na obrazovce se objeví hláška o tom, že se vše povedlo a odkaz na SSLLabs, kde si můžete ověřit certifikát. V tomto testu získává Let's Encrypt známku A - jedna z nejlepších.

A teď?

Gratuluji! Nyní váš web disponuje SSL certifikátem a veškerý přenos, jak od uživatele, tak i k uživateli, je šifrován.


 

  Aktivity (5)

Článek pro vás napsal Michal Vašíček
Avatar
Autor je webař, čas od času udělá i mobilní appku. Před Windows dává přednost Linuxu, ale ještě raději má macOS. Podílí se na překladech v Mozille, dobrovolničí i jinde, k tomu se snaží rozvíjet sebe sama.

Jak se ti líbí článek?
Celkem (8 hlasů) :
55555


 


Miniatura
Všechny články v sekci
Linux a UNIX

 

 

Komentáře
Zobrazit starší komentáře (2)

Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

Nechápu proč tam je ta možnost Easy či Secure, proč bych uživatel dobrovolně chtěl na nešifrované spojení.
Hmm, vlastně kvůli problému s věrohodností certifikátu možná. U starších prohlížečů to dělalo chyby si pamatuji, že jsem to kdysi řešil a musel stáhnout na OS Windows xp Service Pack 2 (abych aktualizoval tu db s nimi)..

Ale i tak stále by mělo platit, že by měla fungovat pouze 1 verze (z hlediska mrtvého SEO) podobně jako s www či bez www, né snad?

Odpovědět  +1 30.12.2015 1:40
Chybami se člověk učí, běžte se učit jinam!
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Marek Z.
Michal Vašíček:

Existují jisté důvody, třeba IE 6 dělá s Let's Encrypt certifikáty bordel a nevěří jim (jak jsi již řek :D). Tím samozřejmě nechci říct, že by někdo měl používat IE 6, ale vždy prostě najdeš důvod, kdy se nezabezpečené spojení stále hodí. Osobně používám (a v článku doporučuji) Secure variantu, jelikož fakt neznám nikoho, kdo by měl s certifikáty problém.

Ohledně www, to bych taky dnes už zabíjel a ponechával varianty bez www. Je to rychlejší na napsání a www nevypadá v URL hezky. :D Když někde konfiguruji Apache, fallback tam nedávám, prostě buď bez www nebo nic. To samé Google Webmaster Tools - uprostředněná verze je s www.

Odpovědět  +2 30.12.2015 18:05
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Michal Vašíček
Michal Vašíček:

*uprostředněná verze je BEZ www.
Přepsal jsem se. :(

Odpovědět 30.12.2015 18:08
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Marek Z.
Filip Šohajek:

Doplním Michala s více podrobným vysvětlením.
Pokud na serveru běží více hostů (v řeči Apačů VirtualServer) a dva a více z nich na SSL, musí se nějak rozlišit doménové jméno, které klient po serveru chce. Ale to je problém, protože komunikace běží na SSL a před odesláním samotných aplikačních dat se musí navázat handshake, který vyžaduje správný certifikát. Proto může klient (podle RFC3546) poslat v Client Hello rozšíření, ve kterém uvádí doménu, pro kterou chce certifikát. Tomuto se říká SNI (Server Name Indication) a je definováno v RFC3546 (konkrétně je to myslím první ze všech rozšíření v tomto RFC). Bohužel IE 6 (a myslím Java 6) SNI nepodporují, a proto server zvolí většinou špatný certifikát. Proto tedy Easy a Secure.

 
Odpovědět 30.12.2015 18:13
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Michal Vašíček:

Tentokrát upřesním já tebe, SNI neumí ani IE 8 na XPčkách. Na Vistách a 7 už by to mělo být v pohodě.

Odpovědět 30.12.2015 18:17
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Michal Vašíček
Filip Šohajek:

Jo, pravda, teď se tu dívám a vážně, každá verze Na XP a předchozích.

 
Odpovědět  +2 30.12.2015 18:19
Avatar
shaman
Člen
Avatar
shaman:

je to neskutocne jednoduche oproti minulosti a zadarmo.
Domenu a to ci zariadenie podporuje SNI si viete checknut tu https://www.ssllabs.com/…t/index.html

Odpovědět 18. ledna 10:57
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Tom Van
Člen
Avatar
Tom Van:

Kdybyste někdo chtěl návod pro manuální nastavení (pro případ, že nechcete aby LE běžel jako root - i když mám pocit, že novější verze jejich klienta už nemusí běžet pod rootem).

https://medium.com/…64e3324a5df3

 
Odpovědět 10. února 16:33
Avatar
shaman
Člen
Avatar
shaman:

Momentalne su certifikaty vydane s lets encrypt platne 90 dni. To znamena ze za tri mesiace budem musiet proces opakovat. Ak zabudnem, tak sa bude na mojich strankach zobrazovat skarede hlasenie ze certifikat je neplatny. Dokonca sa mi zda ze prehliadac ani nenpusti ludi na web a rovno im povie ze nie je bezpecne ist na web. Ako by si riesil automaticke obnovenie certifikatu?

Odpovědět 10. března 12:31
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na shaman
Michal Vašíček:

Řešil bych to cronem, ale pokud jsi zadal platnej mail, před koncem platnosti ti přijde upozornění.

Odpovědět 10. března 15:27
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 12. Zobrazit vše