Last Updated on 26/08/2024 by administrator
Instalace Nginx Certbota (Install Nginx Certbot)
Instalace Nginx Certbota (Install Nginx Certbot)
Motivace:
Návod popisuje, jak nainstalovat Certbot, což je open-source nástroj, který slouží k automatizaci procesu získání, obnovy a správy SSL/TLS certifikátů pro webové servery.
Ten získává pravidelně certifikát z certifikační autority Let’s Encrypt, jelikož certifikáty zadarmo poskytované jen na devadesát dní.
OS:
Implementace byla prováděna na Ubuntu 22.04 LTS.
Prerekvizita:
Tento článek je navázáním na článek Nginx – Konfigurace Virtualhostů (Configure Nginx Virtual Hosts):
Nginx – Konfigurace Virtualhostů (Configure Nginx Virtual Hosts)
Čili je předpokládáno, že webové stránky již na Nginx běží.
Implementace [1]:
Certbota je možné nainstalovat buď přes snap, nebo obyčejně přes příkaz apt. Níže budou uvedeny obě varianty.
Pozn. Bylo odzkoušeno že instalace přes snap nefungovala na LXC kontejnerech Proxmox. I přesto, že byl LXC kontejner privilegiovaný, zafungovala pouze varianta 2.
Varianta 1 – Instalace Certbota přes snap:
Aktualizace seznamu balíčků z repozitářů:
sudo apt update
Pro instalaci Certbota je doporučené použít snap místo apt. Snap je systém balíčků a nasazení softwaru vyvíjený společnosti Canonical. Výhodou je, že funguje na celé řadě linuxových distribucích navíc jsou instalace přes Snap izolované od zbytku systému, takže neovlivňují aplikace a nemají konflikty s jinými verzemi knihoven.
sudo apt install snapd
Příkaz níže obsahuje základní knihovny a prostředky, které jsou potřebné pro běh ostatních snaps na systému:
sudo snap install core
Příkaz níže slouží k aktualizaci core na nejnovější verzi:
sudo snap refresh core
Pokud byl již použitý certbot, měl by být odstraněn:
sudo apt remove certbot
Příkaz provede instalaci Certbota přes snap:
sudo snap install --classic certbot
Vytvořit symbolický link a zkopírovat certbot ze složky /snap/bin/ do /usr/bin/ složky, a tak je možné jej spustit pouhým zadáním certbot:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Varianta 2 – Instalace Certbota přes apt:
Aktualizace seznamu balíčků z repozitářů:
sudo apt update
Instalace certbota a balíčku python3-certbot-nginx, který je specifický pro integraci Certbotu s webovým serverem Nginx:
sudo apt install certbot python3-certbot-nginx
2. Otevření webových portů na firewallu
Před stažením certifikátu je nutné aby měl webový server veřejnou IP adresu. Tuto veřejnou IP adresu je potřeba namapovat k webovému serveru. To se nejčastěji provádí na routeru přes port forwarding (přesměrování portů), kde stačí povolit port TCP/80, což slouží pro stažení certifikátu a TCP/443 pro šifrovaný přenos k webovému serveru. Každý router má ve svém nastavení port forwarding jinde. Např. TP-Link má tuto funkci pod Forwarding > Virtual Servers. Obecný průvodce pro několik routerů, kde nastavit port forwarding je možné najít zde: https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/
3. Získání SSL certifikátu:
Před spuštěním příkazu je nutné aby bylo doménové jméno namapované k Vaši veřejné IP adrese, jinak nedojde ke stáhnutí certifikátu.
V návaznosti z článku Nginx – Konfigurace Virtualhostů (Configure Nginx Virtual Hosts), bude použito doménové jméno mujweb1.mooo.com:
sudo certbot --nginx -d mujweb1.mooo.com -d www.mujweb1.mooo.com
Pozn. V dnešní době je trendem upřednostňovat krátké a čisté URL adresy bez zbytečných pod domén, je možné že Vaše doménové jméno mujweb1.mooo.com již nemá pod doménu www.mujweb1.mooo.com. V tomto případě stačí aplikovat příkaz sudo certbot –nginx -d mujweb1.mooo.com
Výstup příkazu sudo certbot –nginx -d mujweb1.mooo.com ukazuje, že certifikát pro doménové jméno mujweb1.mooo.com byl úspěšně vygenerován. Z výpisu jde také vidět, že klíč a certifikát byl uložen do složky /etc/letsencrypt/live/ a certifikát vyprší 14.2.2024.
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): vas-email@domena.cz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for mujweb1.mooo.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mujweb1.mooo.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/mujweb1.mooo.com/privkey.pem This certificate expires on 2024-02-14. 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 mujweb1.mooo.com to /etc/nginx/sites-enabled/mujweb1.mooo.com Congratulations! You have successfully enabled HTTPS on https://mujweb1.mooo.com
Nyní by měly webové stránky běžet pod https://mujweb1.mooo.com
Certbot dokonce zajistí přesměrování doménového jména z HTTP na HTTPS.
Pokud server použivá koncept virtuhostů pod Nginx, je možné provést stažení certifikátu pro všechna doménová jména příkazem níže:
sudo certbot --nginx
3. Ověření služby certbot:
Časovač se spustí dvakrát denně a automaticky obnoví jakýkoli certifikát, třicet dnů před vypršením platnosti.
Varianta 1 – snap:
sudo systemctl status snap.certbot.renew.service
Výpis příkazu sudo systemctl status snap.certbot.renew.service:
○ snap.certbot.renew.service - Service for snap application certbot.renew Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static) Active: inactive (dead) since Wed 2023-11-08 13:57:12 CET; 9h ago TriggeredBy: ● snap.certbot.renew.timer Process: 6678 ExecStart=/usr/bin/snap run --timer=00:00~24:00/2 certbot.renew (code=exited, status=0/SUCCESS) Main PID: 6678 (code=exited, status=0/SUCCESS) CPU: 291ms Nov 08 13:57:11 webserver systemd[1]: Starting Service for snap application certbot.renew... Nov 08 13:57:12 webserver systemd[1]: snap.certbot.renew.service: Deactivated successfully. Nov 08 13:57:12 webserver systemd[1]: Finished Service for snap application certbot.renew.
Varianta 2 – certbot:
service certbot status
Výpis příkazu service certbot status:
* certbot.service - Certbot Loaded: loaded (/lib/systemd/system/certbot.service; static) Active: inactive (dead) TriggeredBy: * certbot.timer Docs: file:///usr/share/doc/python-certbot-doc/html/index.html https://certbot.eff.org/docs
4. Ověření automatického obnovení certifikátu:
Aby se ověřilo, zda automatické obnovení funguje, je možné spustit simulaci použitím příkazu níže:
sudo certbot renew --dry-run
Výstup příkazu sudo certbot renew –dry-run ukazuje, že simulace automatické obnovy proběhla úspěšně:
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/mujweb1.mooo.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simulating renewal of an existing certificate for mujweb1.mooo.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/mujweb1.mooo.com/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
5. Do kdy platí certifikát?
To se dá ověřit pomocí příkazu níže pro doménové jméno mujweb1.mooo.com:
openssl x509 -enddate -noout -in /etc/letsencrypt/live/mujweb1.mooo.com/fullchain.pem