Tento tutoriál vám ukáže, jak správně povolit HTTPS na Nginx pomocí Let’s Encrypt na Ubuntu. Google Chrome a Firefox již začaly označovat nešifrované webové stránky pomocí pole pro zadání hesla jako nezabezpečené. Všechny webové stránky HTTP budou nakonec označeny jako nezabezpečené. HTTPS se stane výchozím pro všechny webové stránky. Je to také požadavek, pokud chcete použít protokol HTTP/2 ke zrychlení svého webu.
Let’s Encrypt je bezplatná, automatizovaná a otevřená certifikační autorita. Oficiální dokumentace popisuje jednoduché kroky, jak povolit HTTPS pomocí Let’s Encrypt, ale je toho víc. Pokud budete postupovat podle oficiálního dokumentu, získáte skóre A v testu SSL Labs. Pokud budete postupovat podle mých kroků, získáte A+ skóre. Pokud jste již dříve nasadili certifikát Let's Encrypt, stále můžete podle tohoto návodu obnovit a nahradit svůj stávající certifikát.
Tento tutoriál je rozdělen do 3 částí.
- První část je o záznamu CAA bezpečnostní hlavičky a OCSP sešívání . Tyto věci vám mohou pomoci získat A+ .
- Druhá část je o přesměrování domény www na doménu bez www a naopak.
- Ve třetí části vám ukážu, jak se vypořádat se službou CloudFlare CDN.
Poznámka:Tento tutoriál funguje na všech aktuálních verzích Nginx a Ubuntu (včetně 16.04, 18.04 a 20.04).
Vytvoření záznamu CAA pro název vaší domény
Certifikační autorita (CAA) je záznam prostředku DNS, který určuje, které certifikační autority (CA) mohou vydávat certifikát pro konkrétní název domény. Od září 2017 jsou všechny CA pověřeny kontrolou záznamů CAA před vydáním certifikátu pro konkrétní název domény. Pokud pro název domény není nalezen záznam CAA, může certifikát pro tento název domény vydat kterýkoli CA. Pokud CA není uvedena ve vašem záznamu CAA, pak tato CA nemůže vydat certifikát pro název vaší domény.
Chcete-li vytvořit záznam CAA, který umožní společnosti Let’s Encrypt vydávat certifikát pro název vaší domény, přidejte do svého serveru DNS nebo správce DNS následující položku.
example.com. IN CAA 0 issue "letsencrypt.org"
Můžete také použít iodef aby CA nahlásila žádost o vydání škodlivého certifikátu na vaši e-mailovou adresu.
example.com. IN CAA 0 iodef "mailto:your-email-address"
Formát výše uvedených záznamů je pro soubory zóny. Níže je několik tipů pro vás.
- K vygenerování záznamu CCA pro název vaší domény můžete použít SSLMate CAA Record Helper.
- Pokud používáte GoDaddy DNS, přidejte záznam CAA podle tohoto příspěvku.
Ke kontrole záznamu CAA můžete použít následující příkaz dig.
dig example.com CAA
Upozorňujeme, že webové prohlížeče nekontrolují záznamy CAA.
Bezpečnostní záhlaví
Bezpečnostní hlavičky jsou stejně důležité jako protokol HTTPS, ale jen malé procento webů s podporou HTTPS věnuje bezpečnostním hlavičkám pozornost. Úplná diskuse o hlavičkách zabezpečení je nad rámec tohoto návodu, budu hovořit o nezabezpečených-požadavcích na upgrade a HSTS záhlaví, protože je můžete snadno aktivovat pomocí Let’s Encrypt a zvýšit tak zabezpečení svých webových stránek.
Upgradujte nezabezpečené požadavky
Jsou chvíle, kdy web povolil HTTPS, ale některé CSS, obrázky nebo JavaScripty jsou stále poskytovány přes HTTP. V tomto případě zelený visací zámek na začátku adresního řádku prohlížeče zmizí. V prohlížeči Google Chrome je nahrazena ikonou informací; Ve Firefoxu je nahrazen šedým visacím zámkem se žlutým trojúhelníkem. Návštěvníkům webu budete chtít ukazovat zelený visací zámek tak často, jak je to jen možné, a snadný způsob, jak tento problém vyřešit, je povolit nezabezpečené-požadavky na upgrade záhlaví, které donutí webové prohlížeče používat https:// za každé http:// zdroj.
Chcete-li povolit tuto hlavičku, jednoduše přidejte --uir
příznak při vydávání certbot příkaz. Všimněte si, že tato hlavička funguje na zdrojích hostovaných ve vaší vlastní doméně a na zdrojích v doménách třetích stran, které podporují HTTPS. Pokud vaše webová stránka obsahuje zdroje na serverech třetích stran, které nejsou dostupné přes HTTPS, budou tyto zdroje webovými prohlížeči blokovány, ale použití této hlavičky zajistí, že vaše webové stránky budou mít vždy zelený visací zámek.
HSTS (HTTP Strict Transport Security)
Záhlaví HSTS říká webovým prohlížečům, že veškerá komunikace s vaším webem by měla probíhat přes HTTPS. Chrání proti SSL Striping, což je útok na downgrade z HTTPS na HTTP. Chcete-li povolit tuto hlavičku, jednoduše přidejte --hsts
příznak při vydávání certbot příkaz.
OCSP sešívání
Když se webový prohlížeč připojí k webu HTTPS, odešle požadavek OCSP (Online Certificate Status Protocol) certifikační autoritě (CA), aby se zeptal na stav odvolání certifikátu SSL webu. To může zpozdit načítání stránky o 1–3 sekundy, podle telemetrických dat Firefoxu.
Pro zlepšení výkonu může vlastník webu povolit sešívání OCSP, v takovém případě webový server sám načítá odpověď OCSP podepsanou CA v pravidelných intervalech. Když se webový prohlížeč připojí k webu, Nginx může odeslat odpověď OCSP uloženou v mezipaměti do webového prohlížeče, čímž se eliminuje potřeba, aby webový prohlížeč kontaktoval server OCSP.
Chcete-li povolit sešívání OCSP, jednoduše přidejte --staple-ocsp
příznak při vydávání certbot příkaz.
OCSP je nutné sešít
Pokud hacker vytvoří falešný, duplicitní web, vypne svorku OCSP a také zablokuje přístup webového prohlížeče k serveru OCSP, pak webový prohlížeč bude předpokládat, že je v pořádku, a přejde na škodlivý web. Chcete-li tento problém vyřešit, můžete povolit OCSP musí sešívat na vašem webu, což webovým prohlížečům sděluje, že vaše webová stránka musí během připojení HTTPS prezentovat hlavní odpověď OCSP. Takže když se webové prohlížeče připojí k falešné webové stránce, která nemá OCSP svorku, připojení zastaví.
Chcete-li povolit OCSP must staple, přidejte --must-staple
příznak při vydávání certbot příkaz.
Instalace klienta Let’s Encrypt Client (Certbot) na Ubuntu
Nyní je čas ušpinit si ruce. Počínaje Ubuntu 16.04 je klient Let’s Encrypt (Certbot) součástí úložiště Ubuntu, takže jej můžete nainstalovat pomocí následujícího příkazu. Python3-certbot-nginx je plugin Certbot Nginx.
sudo apt install certbot python3-certbot-nginx
Chcete-li zkontrolovat číslo verze, spusťte
certbot --version
Ukázkový výstup:
certbot 0.31.0
Pokud chcete používat nejnovější verzi, můžete si nainstalovat Certbot z obchodu Snap.
sudo apt install snapd sudo snap install --classic certbot
Poznámka :Pokud chcete použít verzi Snap, musíte použít úplnou binární cestu:/snap/bin/certbot
.
Povolení HTTPS pomocí pluginu Certbot Nginx
Pokud váš web nepoužívá službu CDN, pak se doporučuje použít plugin Nginx k povolení HTTPS na webovém serveru Nginx, protože může automaticky získat certifikát SSL/TLS a nakonfigurovat jej za vás. Spusťte na svém serveru Ubuntu následující příkaz.
sudo certbot --nginx --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
Kde:
--nginx
:Použijte ověřovací a instalační program Nginx--agree-tos
:Souhlasíte s podmínkami služby Let’s Encrypt--redirect
:Přidejte přesměrování 301.--uir
:Ke každé odpovědi HTTP přidejte záhlaví „Content-Security-Policy:upgrade-insecure-requests“.--hsts
:Ke každé odpovědi HTTP přidejte hlavičku Strict-Transport-Security.--staple-ocsp
:Povolí sešívání OCSP.--must-staple
:Přidá do certifikátu rozšíření OCSP Must Staple.-d
za příznakem následuje seznam názvů domén oddělených čárkou. Můžete přidat až 100 názvů domén.--email
:E-mail používaný pro registraci a kontakt pro obnovení.
Budete dotázáni, zda chcete dostávat e-maily od EFF (Electronic Frontier Foundation). Po výběru Y nebo N bude váš certifikát SSL automaticky získán a nakonfigurován, což je uvedeno níže ve zprávě.
/etc/letsencrypt/live/example.com/fullchain.pem
:Úplný řetězec certifikátu kořenové CA, zprostředkujícího certifikátu CA a certifikátu vašeho serveru./etc/letsencrypt/live/example.com/privkey.pem
:Soukromý klíč vašeho serveru
Nyní, když navštívíte svůj web, můžete vidět, že HTTP je automaticky přesměrováno na připojení HTTPS. Ukázalo se, že plugin Nginx aktuálně nepodporuje --uir
vlajka. Chcete-li ručně přidat záhlaví upgrade-insecure-requests, upravte soubor bloku serveru Nginx.
sudo nano /etc/nginx/conf.d/example.com
.conf
Přidejte následující řádek do bloku serveru SSL.
add_header Content-Security-Policy upgrade-insecure-requests;
Také je dobré přidat DNS resolver do bloku serveru SSL.
resolver 8.8.8.8;
Pokud nepřidáte překladač, může se vám v protokolu chyb Nginx zobrazit následující zpráva.
[warn] 559#559: no resolver defined to resolve ocsp.int-x3.letsencrypt.org while requesting certificate status, responder: ocsp.int-x3.letsencrypt.org
Uložte a zavřete soubor. Poté znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginx
Tip pro odstraňování problémů
Pokud se při spuštění příkazu certbot zobrazí následující chybové zprávy, stačí příkaz certbot spustit znovu, protože se jedná o dočasné selhání v překladu DNS.
An unexpected error occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn conn = connection.create_connection( File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 61, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno -3] Temporary failure in name resolution
Testování vašeho certifikátu SSL
Přejděte na stránku ssllabs.com a otestujte svůj certifikát SSL a konfiguraci. Jak jsem slíbil, dostanete A+ . Můžete také zkontrolovat, zda název vaší domény povolil záznam CAA, zda váš server povolil HSTS, sešívání OCSP a OCSP musí sešívat.
Přesměrování WWW na jiné než WWW (nebo naopak)
Již jsme povolili přesměrování HTTP na HTTPS, co zbývá udělat, je přesměrovat www na non-www nebo naopak. Pokud používáte WordPress, pak je to velmi snadné. Jednoduše přejděte na WordPress Dashboard> Nastavení> Obecné a nastavte preferovanou verzi (www nebo bez www) v Adresa WordPress a Adresa webu .
Pokud půjdete touto cestou, skončíte s tím, co je známé jako dvojité přesměrování 301. Nejprve server Nginx přesměruje HTTP na HTTPS, poté WordPress přesměruje na doménu www nebo non-www. Někdo může namítnout, že dvojité přesměrování 301 může poškodit SEO vašeho webu. Pokud se toho obáváte, můžete použít níže uvedenou metodu k tomu, aby všechny verze domény šly přímo do konečného cíle.
Upravte svůj blok serveru Nginx.
sudo nano /etc/nginx/conf.d/example.com.conf
Klient CertBot přidal do souboru následující řádky pro přesměrování HTTP na HTTPS.
if ($scheme != "https") { return 301 https://$host$request_uri; } # managed by Certbot
Tyto 3 řádky můžete smazat a upravit konfiguraci bloků serveru jako na snímku obrazovky níže, abyste přesměrovali doménu bez www na doménu www.
- První blok serveru naslouchá na portu 80. Obsahuje přesměrování 301 pro přesměrování HTTP na HTTPS.
- Druhý blok serveru naslouchá na portu 443. Obsahuje přesměrování 301 pro přesměrování bez www na doménu www.
Pokud chcete přesměrovat www na doménu bez www, změňte
return 301 https://www.example.com$request_uri;
do
return 301 https://example.com$request_uri;
A změňte server_name
v blocích serveru SSL.
Uložte a zavřete soubor. Otestujte konfigurace Nginx.
sudo nginx -t
Pokud je test úspěšný, znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginx
Pokud používáte WordPress, ujistěte se, že jste nastavili preferovanou verzi domény v Adresa WoredPress a Adresa webu před úpravou konfiguračního souboru bloku serveru Nginx. Pokud jsou nastavení WordPress v rozporu s konfigurací Nginx, váš web bude ve smyčce přesměrování.
Jak povolit protokol HTTP/2
Chcete-li povolit protokol HTTP/2 v Nginx, jednoduše otevřete soubor virtuálního hostitele Nginx a vyhledejte následující řádek.
listen 443 ssl;
Přidejte http2
na konci.
listen 443 ssl http2;
Uložte a zavřete soubor. Poté znovu načtěte Nginx.
sudo systemctl reload nginx
Jak zakázat TLSv1 a TLSv1.1
TLSv1 a TLSv1.1 již nejsou považovány za bezpečné. Od 31. 1. 2020 omezuje SSL Labs servery, které podporují TLS 1.0 nebo TLS 1.1, na B školní známka. Chcete-li je zakázat, upravte konfigurační soubor voleb Let's Encrypt SSL.
sudo nano /etc/letsencrypt/options-ssl-nginx.conf
Najděte následující řádek.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Odstraňte vyřazené verze TLS.
ssl_protocols TLSv1.2
Uložte a zavřete soubor. Poté restartujte Nginx.
sudo systemctl restart nginx
Jak povolit TLS 1.3
Přečtěte si prosím následující článek:
- Jak snadno povolit TLS 1.3 v Nginx na Ubuntu 20.04, 18.04, 16.04
Jak povolit IPv6 v Nginx
Pokud má váš server adresu IPv6 a název vaší domény má záznam AAAA, měli byste povolit IPv6 v Nginx. Přidejte následující řádek do bloku serveru HTTP.
listen [::]:80;
A přidejte následující řádek do bloku serveru HTTPS.
listen [::]:443 ssl http2;
Uložte a zavřete soubor. Znovu načtěte Nginx a máte hotovo.
sudo systemctl reload nginx
Automatické obnovení certifikátu
Chcete-li automaticky obnovit certifikát Let’s Encrypt, jednoduše upravte soubor crontab uživatele root.
sudo crontab -e
Poté přidejte následující řádek na konec.
@daily certbot renew --quiet && systemctl reload nginx
--quiet
příznak potlačí standardní výstup. Pokud chcete obdržet standardní chybu, přidejte na začátek souboru crontab následující řádek.
MAILTO=[email protected]
Nginx je potřeba znovu načíst, aby mohl klientům představit nový certifikát.
Nastavení PATH v Crontab
Někdy mi Cron pošle následující zprávu, kterou lze také vidět v /var/log/letsencrypt/letsencrypt.log
soubor.
Could not choose appropriate plugin for updaters: The nginx plugin is not working; there may be problems with your existing configuration. The error was: NoInstallationError()
Příčina této chyby je, že ve výchozím nastavení je PATH v Cronu nastavena na
PATH=/usr/bin:/bin
Binární soubor nginx se však nachází na adrese /usr/sbin/nginx
, Cron jej nemůže najít s výchozí PATH. Chcete-li tuto chybu opravit, přidejte na začátek souboru Crontab následující řádek.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
CloudFlare CDN
Pokud chcete na svůj server nainstalovat certifikát Let’s Encrypt a zároveň používat službu CloudFlare CDN, budete muset na svém webu povolit CloudFlare Universal SSL, což znamená
- Spojení mezi návštěvníky webu a serverem CloudFlare edge jsou šifrována pomocí certifikátu CloudFlare Universal SSL
- Spojení mezi vaším původním serverem a serverem CloudFlare edge jsou šifrována pomocí vydaného certifikátu Let’s Encrypt.
Pokud na svůj původní server nainstalujete certifikát Let's Encrypt a přesměrujete HTTP na HTTPS, ale vypnete CloudFlare Universal SSL, webové prohlížeče si budou stěžovat, že váš web je v nekonečné smyčce přesměrování, protože CloudFlare přesměrovává HTTPS na HTTP, když není povoleno Universal SSL.
Druhá věc, kterou potřebujete vědět, je, že pokud chcete povolit záznam CAA při používání CloudFlare Universal SSL, musíte také vytvořit následující záznam CAA.
example.com. IN CAA 0 issue "comodoca.com" example.com. IN CAA 0 issue "digicert.com" example.com. IN CAA 0 issue "globalsign.com
Postupujte podle tohoto příspěvku a přidejte záznam CAA pro certifikát CloudFlare Universal SSL.
Jak tedy postupovat při instalaci certifikátu Let’s Encrypt s CloudFlare? Existují dva scénáře.
- Už jste si nainstalovali certifikát Let's Encrypt pomocí výše uvedených kroků, nyní chcete povolit službu CloudFlare CDN.
- Váš web používá službu CloudFlare CDN, nyní chcete nainstalovat certifikát Let’s Encrypt na svůj původní server.
První scénář
Pokud jste v prvním scénáři, můžete pokračovat a povolit službu CloudFlare CDN a také povolit CloudFlare Universal SSL v CloudFlare Dashboard tím, že přejdete na Crypto> SSL a výběrem Úplné (přísné) . Vaše stránky budou fungovat bez problémů.
Druhý scénář
Pokud používáte CloudFlare CDN a nyní chcete nainstalovat Let’s Encrypt na svůj původní server, spusťte následující příkaz pro získání a instalaci certifikátu Let’s Encrypt TLS.
sudo certbot --nginx --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
Po získání a instalaci certifikátu na váš server přejděte na řídicí panel Cloudflare a povolte CloudFlare Universal SSL.
Další krok
Doufám, že vám tento návod pomohl povolit HTTPS na Nginx pomocí Let’s Encrypt na Ubuntu . Můžete také nastavit bránu firewall webové aplikace ModSecurity, abyste chránili svůj web WordPress před hackováním.
- Jak nastavit ModSecurity s Nginx na Debian/Ubuntu
Jako vždy, pokud pro vás byl tento příspěvek užitečný, přihlaste se k odběru našeho bezplatného zpravodaje, kde získáte další tipy a triky. Opatruj se 🙂