Nasadenie Let 'Encrypt na Apache
Bezpečnosť je v prostredí internetu stále viac a viac zdokonaľovaná. Na prenos údajov od užívateľa na server a naopak sa ale u webov či rôznych API často zabúda - stále prebiehajú cez nezašifrovaný HTTP protokol. Práve to sa snaží zmeniť iniciatíva Let 'Encrypt, ktorú podporujú popredné spoločnosti zaoberajúce sa webom a sieťami (napríklad Mozilla, Cisco, Facebook či IdenTrust). Ako to chcú dosiahnuť? Let 'Encrypt rozdáva certifikáty zadarmo, overenie vlastníctva prebieha automaticky (nie je teda tak zdĺhavé) au webserverov Apache a Nginx sa dokonca certifikát automaticky nakonfiguruje. V tomto článku si ukážeme, ako na to.
Prečo by som to mal chcieť?
Ak HTTPS nepoužívate, môže útočník pomocou sniffing (odpočúvanie) paketov zistiť dôverné informácie vášho klienta. Sú totiž zasielané nešifrovane (napríklad ako obyčajný text) a každý, kto chce, k nim môže na trase užívateľ - server získať prístup. Medzi tieto dôverné informácie môže patriť napríklad aj heslo používateľa. Vám by sa páčilo, keby vám práve teraz niekto odpočúval pripojenia a logoval si všetky vaše prihlasovacie údaje?
Budeme potrebovať
- Root prístup k serveru, na ktorom beží Apache
- V niektorých prípadoch nainštalovaný git
- Niečo, čím zabijeme čas, keď sa bude certifikát generovať
Príprava
Ak nie ste prihlásený ako root, potom môžete dočasne získať
administrátorské práva príkazom sudo su (po dokončení práce sa ich však
nezabudnite vzdať príkazom exit). Druhá, bezpečnejšie, možnosť je pred
každý príkaz (vyžadujúce root práva) pripísať sudo
.
sudo su
V prípade, že používate Debian a distribúcie z neho vychádzajúce (pre ktoré je tento článok primárne písaný), nainštalujte si potrebné balíky z repozitárov príkazom uvedeným nižšie. V prípade, že pre vás inštalácia z repozitárov nefunguje, na webe certbot.eff.org môžete získať postup priamo pre váš systém a webserver.
sudo apt-get install python-certbot-apache -t jessie-backports
Teraz je ešte potrebné riadne pripraviť Apache. Ak plánujete vynucovať HTTPS, je potrebné aktivovať mod_rewrite:
a2enmod rewrite
Ďalej musíte v konfigurácii Apache nastaviť pre zložku, v ktorej sa nachádza váš web, vlastnosť AllowOverride na All. Defaultné nastavenie je väčšinou na hodnotu None - v tomto prípade by sa vám URL neprepísal na zabezpečenú variantu.
Aby SSL fungovalo, je potrebné ho povoliť v Apache príkazom:
a2enmod ssl
Pozor!
Uistite sa, že doména, pre ktorú chcete certifikát získať, má v Apache vlastný konfiguračný súbor a v tomto súbore sa nachádza iba jeden VirtualHost - tej danej domény. Let 'Encrypt si bohužiaľ zatiaľ nerozumie so súbormi, v ktorých je viac VirtualHost a certifikát tak získate, ale nenainštaluje sa. Je tiež nutné, aby bol vo VirtualHost uvedený parameter ServerName s hodnotou domény, pre ktorú chcete certifikát získať, napríklad:
ServerName mojesuperstranka.cz
Ak parameter neuvediete, Let 'Encrypt doménu nerozpozná a neponúkne.
Získavanie certifikátu
Teraz prichádza tá najlepšia časť - získavanie samotného certifikátu. Spustite stiahnutú utilitu príkazom:
certbot --apache
Po chvíli sa zobrazí zoznam domén, ktoré Let 'Encrypt rozpoznal. Ak tú svoju nevidíte, poriadne si prečítajte Pozor! v sekcii Príprava. Je možné získať certifikát aj pre viac domén. V predvolenom stave sú zaškrtnuté všetky - zoznamom sa pohybujete šípkou hore a dole, doménu zaškrtnete a Odznačte (zaškrtnutá = certifikát bude generovaný = hviezdička v hranatých zátvorkách pred doménovým menom) stlačením medzerníka.
Po výbere všetkých domén, pre ktoré certifikát chcete, stačí stlačiť Enter. Teraz sa overí, či je doména naozaj vaše. O certifikát totiž musíte žiadať zo servera, na ktorý doména odkazuje A záznamom (možné ich využiť aj AAAA záznam a overovať po IPv6). Ak overenie prebehne v poriadku, príde na rad výber úrovne bezpečnosti. Máte na výber medzi Easy a Secure variantom. Easy dovolí užívateľovi slobodne sa rozhodnúť, či bude používať HTTP alebo HTTPS protokol (túto možnosť nepodporučuji). Secure vynúti použitie HTTPS tým, že pomocou mod_rewrite pridá do VirtualHost portu 80 presmerovanie na HTTPS.
Na obrazovke sa objaví hláška o tom, že sa všetko podarilo a odkaz na SSLLabs, kde si môžete overiť certifikát. V tomto teste získava Let 'Encrypt známku A - jedna z najlepších. Najlepšie známky A + docielite nastavením HSTS hlavičky, ktorá prehliadači povie, aby si zapamätal, že u tejto domény má vždy automaticky užívateľa presmerovať na HTTPS. Aj v prípade, že z iných stránok vedie na tie vaše odkaz s HTTP, používateľa prehliadač po prvej návšteve vždy automaticky presmeruje a nie je tak pred předměrováním možné vykonať Man-In-The-Middle útok.
A teraz?
Gratulujem! Teraz váš web disponuje SSL certifikátom a všetok prenos, ako od užívateľa, tak aj k užívateľovi, je šifrovaný.