Obsah:
- Předpoklady
- Instalace Certbot
- Nastavení VitualHost pro konfiguraci SSL certifikátu
- Povolení HTTPS přes firewall
- Pořízení SSL certifikátu
- Ověření automatického obnovení služby Certbot
- Závěr
Zabezpečení webových stránek prostřednictvím HTTPS je nejen preferováno, ale stává se i standardem pro všechny webové projekty. V tomto článku se podívám na proces nastavení HTTPS na serveru s Debianem 12 s využitím bezplatných SSL/TLS certifikátů od Let’s Encrypt a automatizačního nástroje Certbot.
Popis začínám předpoklady, kde zdůrazňuji mj. význam mít registrovanou doménu a správně nastavený server s Debianem 12. Následuje instalace Certbotu, což je klíčový nástroj pro získání a instalaci certifikátů, jenž výrazně zjednodušuje celý proces. V dalších částech se věnuji nastavení Apache VirtualHost a jeho konfiguraci pro SSL certifikáty, kde klíčovým prvkem je správné nastavení direktivy ServerName. Dále se zaměřuji na povolení HTTPS přes firewall s využitím UFW, což je nezbytný krok pro zabezpečení komunikace. Podrobně pak popisuji, jak pomocí Certbotu získat a nastavit SSL certifikáty pro doménu. Závěr článku je věnován ověření automatického obnovení certifikátů pomocí Certbotu, což je zásadní pro udržení trvalého zabezpečení webového serveru. Každá část článku čtenáře provede jednotlivými kroky, aby bylo zajištěno, že web bude relativně bezpečný a důvěryhodný pro návštěvníky.
Předpoklady
- Registrovaná doména.
- Server Debian 12 nastavený minimálně podle článku Debian 12 – Jak nainstalovat Apache, MariaDB, PHP (LAMP)?
- Uživatele bez práv roota s právy sudo a firewallu.
- Správně nastavené DNS záznamy pro daný server.
Instalace Certbot
Certbot je bezplatný, open source softwarový nástroj vytvořený Electronic Frontier Foundation (EFF). Používá se k automatickému získávání a instalaci SSL/TLS certifikátů od Let’s Encrypt, což je bezplatná, automatizovaná a otevřená certifikační autorita (CA).
Instalaci zahájím aktualizací seznamu dostupných balíčků a jejich verzí (ale bez skutečné instalace nebo aktualizace samotných balíčků). Tento příkaz je základním krokem v procesu správy softwaru a je důležitý pro udržování systému bezpečného a aktualizovaného:
sudo apt update
Pro instalaci Certbotu pomocí snap balíčků (forma softwarové distribuce vytvořená společností Canonical) na Debianu 12 je nutné nejprve nainstalovat snapd
.
Snapd je démon (služba běžící na pozadí), který umožňuje instalovat, používat a spravovat snap balíčky. Snap balíčky jsou samostatné softwarové balíky, které obsahují vše potřebné ke spuštění aplikace, včetně závislostí. Jsou známé svou snadnou instalací a aktualizací.
K samotné instalaci snapd
použiji:
sudo apt install snapd
K instalace core snapu, který obsahuje základní runtime prostředí pro snap balíčky použiji následující příkaz. Tento balíček poskytuje základní komponenty a knihovny, které mnoho snap balíčků vyžaduje pro správnou funkci. Sadu základních nástrojů a knihoven potřebných pro běh ostatních snap balíčků nainstaluji následovně:
sudo snap install core
Pro aktualizaci snap balíčků použiji následující příkaz. refersh
říká systému, aby zkontroloval dostupnost novějších verzí nainstalovaných snapů a aktualizoval je na nejnovější verze:
sudo snap refresh core
Tato aktualizace je důležitá z několika důvodů:
- Bezpečnost: Aktualizace zajistí, že mám nejnovější bezpečnostní opravy a záplaty.
- Stabilita: Nejnovější verze mohou obsahovat opravy chyb a vylepšení stability.
- Kompatibilita: Ujistím se, že mé prostředí pro snap balíčky je kompatibilní s nejnovějšími verzemi aplikací a balíčků.
- Funkčnost: Nové verze mohou přinášet vylepšení funkčnosti a nové vlastnosti.
K instalaci samotného Certbotu (nástroj pro automatizaci SSL/TLS certifikátů od Let’s Encrypt) jako snap balíček s použitím --classic
režimu použiji další píkaz. Režim a celkový kontext příkazu – snap balíčky mohou být instalovány s různými úrovněmi izolace (confinement). Tři hlavní úrovně jsou:
- Strict: Tento režim poskytuje vysokou úroveň izolace od zbytku systému. Aplikace v tomto režimu nemají přístup k systémovým souborům nebo síti, pokud to není explicitně povoleno.
- Devmode: Tento režim poskytuje nižší úroveň izolace a je obvykle používán pro vývoj a testování.
- Classic: Tento režim nabízí stejný přístup k systémovým zdrojům, jako tradiční balíčkovací systémy jako
apt
neboyum
. V tomto režimu balíček může interagovat s ostatními částmi systému bez významných omezení.
Takže následující příkaz efektivně nainstaluje Certbot tak, aby měl potřebný přístup k systémovým zdrojům, což je nezbytné pro jeho funkčnost:
sudo snap install --classic certbot
Následující příkaz je určen k vytvoření symbolického odkazu (symlink) pro spustitelný soubor Certbotu:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Tím zajistím, že mohu spustit příkaz certbot
z jakéhokoli umístění v terminálu bez nutnosti uvádět celou cestu k němu. To zjednodušuje používání Certbotu, protože nemusím pamatovat nebo zadávat celou cestu k spustitelnému souboru pokaždé, když chcete použít Certbot.
Nastavení VitualHost pro konfiguraci SSL certifikátu
Certbot automatizuje proces konfigurace SSL certifikátů pro Apache, ale aby to mohl udělat úspěšně, potřebuje najít správný VirtualHost v konfiguraci Apache. To dělá vyhledáním direktivy ServerName
, která odpovídá doméně, pro kterou požadujete certifikát.
sudo nano /etc/apache2/sites-available/mujweb.conf
V tomto souboru by měla být direktiva ServerName
nastavena na moji doménu.
Najdu řádek ServerName:
…
ServerName mujweb;
…
mujweb
musí odpovídat konkrétní doméně – mujweb
je jen vzor.
- Pokud je direktiva
ServerName
správně nastavena, Certbot by měl být schopen automaticky najít a nakonfigurovat SSL pro tento virtuální host. - Pokud
ServerName
chybí nebo je nesprávný, měl bych jej upravit nebo přidat s mou doménou.
Pokud není ServerName správně nastaven, je třeba doplnit správnou doménu a zkontrolovat, jestli se v konfiguraci nenalézají syntaktické chyby:
sudo apache2ctl configtest
Pokud je vše OK, pak je ještě nutné znovunačíst konfiguraci Apache:
sudo systemctl reload apache2
Povolení HTTPS přes firewall
Nyní potřebuji konfigurovat firewall UFW (Uncomplicated Firewall) na Debianu pro povolení HTTP a HTTPS provozu.
- UFW a HTTPS Provoz:
- UFW je uživatelsky přívětivý firewall pro operační systémy založené na Linuxu. Je doporučován pro základní konfiguraci firewallu, protože je snadno konfigurovatelný.
- Pro webové servery je nezbytné povolit jak HTTP (port 80), tak HTTPS (port 443) provoz. HTTPS je šifrovaná verze HTTP a je nezbytná pro zabezpečenou komunikaci.
- Přednastavené Profily UFW na Debianu:
- Na Debianu UFW obvykle obsahuje přednastavené profily, které usnadňují nastavení pravidel firewallu pro běžné služby, včetně HTTP a HTTPS.
- Tyto profily umožňují rychle povolit nebo zakázat provoz pro tyto služby bez nutnosti manuálně specifikovat porty a další podrobnosti.
K zobrazení aktuálního stavu UFW, včetně toho, které porty a služby jsou povoleny nebo zakázány použiji:
sudo ufw status
Záleží na výchozím nastavení, ale mě se zobrazilo:
Status: active
)
To Action From
-- ------ ----
WWW Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
WWW Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6
To je stav pro mě vyhovující.
Kdybych se potřeboval některých položek zbavit, tak použiji například:
sudo ufw delete allow 'WWW'
Když bych naopak potřeboval nějakou položku přidat, tak použiji například:
sudo ufw allow 'WWW Full'
Pořízení SSL certifikátu
Dále spustím Certbot pro automatickou konfiguraci a získání SSL/TLS certifikátů pro můj webový server s Apache:
sudo certbot --apache -d moje_domena -d www.moje_domena
Tím spustím certbot s doplňkem –apache a pomocí parametru -d zadám jména, pro která má být certifikát platný. V mém případě by to mohlo vypadat následovně:
sudo certbot --apache -d test.silenceplease.cz
Následně certbot naváže komunikaci se serverem Let’s Encrypt a spustí výzvu, aby ověřil, že ovládám doménu, pro kterou požaduji certifikát. Podaří-li se, konfigurace se automaticky aktualizuje a Apache se znovu načte, aby převzal nová nastavení. Certbot ukončí svou činnost zprávou, ve které mi sdělí, že proces proběhl úspěšně a kde jsou moje certifikáty uloženy:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for test.silenceplease.cz
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/test.silenceplease.cz/fullchain.pem
Key is saved at: /etc/letsencrypt/live/test.silenceplease.cz/privkey.pem
This certificate expires on 2024-03-28.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for test.silenceplease.cz to /etc/apache2/sites-available/test-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://test.silenceplease.cz
----------
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
----------
Nyní se mohu pokusit stránky načíst s pomocí HTTPS:
https://test.silenceplease.cz/
Funguje 🙂
Ověření automatického obnovení služby Certbot
Protože certifikáty Let’s Encrypt jsou platné pouze devadesát dní, je nutné pamatovat na jejich obnovu. Balíček certbot, který jsem nainstaloval, se o to postará – přidáním skriptu renew
do souboru /etc/cron.d
. Tento skript se spouští dvakrát denně a automaticky obnoví každý certifikát, kterému zbývá třicet dní do vypršení platnosti.
Proces obnovení mohu otestovat pomocí zkušebního spuštění:
sudo certbot renew --dry-run
certbot renew
: Tento příkaz se používá k obnovení všech certifikátů, které jsou blízko svého vypršení a jsou spravovány Certbotem.--dry-run
: Tato možnost znamená, že se spustí „testovací běh“ obnovy. To znamená, že Certbot provede všechny kroky potřebné k obnovení certifikátu, ale skutečně neobnoví a neuloží nové certifikáty. Tento režim je určen k testování, zda je proces obnovy správně nakonfigurován a funguje bez chyb.
Pokud po spuštění --dry-run
nedojde k žádným chybám, znamená to, že proces obnovy certifikátu je pravděpodobně správně nastaven a bude fungovat, když to bude potřeba.
Automatická Obnova Certifikátů:
- Certbot je navržen tak, aby automaticky obnovil certifikáty, které jsou blízko svému vypršení (obvykle 30 dní před vypršením).
- Když Certbot obnoví certifikát, také automaticky restartuje nebo načte konfiguraci Apache, aby změny v certifikátech byly aplikovány.
Pokud by z nějakého důvodu automatizovaný proces obnovy selhal, Let’s Encrypt pošle upozornění na emailovou adresu, kterou jsem zadal při prvním spuštění Certbotu. Toto upozornění mě informuje, že můj certifikát brzy vyprší.
Takže příkaz sudo certbot renew --dry-run
je důležitým krokem v zajištění, že proces obnovy SSL/TLS certifikátů funguje správně.
Závěr
Tímto článkem jsem ukázal kompletní proces nastavení a správy HTTPS na webovém serveru s Debianem 12 použitím Certbotu od Let’s Encrypt. Relativně podrobně jsem vysvětlil každý krok, od přípravy serveru a instalace Certbotu, až po konfiguraci SSL certifikátů a jejich automatické obnovování. Ale HTTPS jistě nelze považovat za kompletní zabezpečení serveru, proto budu pokračovat v dalších kapitolách.