GNU/Linux >> Znalost Linux >  >> Ubuntu

Správně povolte HTTPS na Nginx pomocí Let’s Encrypt na Ubuntu

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í.

  1. 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+ .
  2. Druhá část je o přesměrování domény www na doménu bez www a naopak.
  3. 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.

  1. Už jste si nainstalovali certifikát Let's Encrypt pomocí výše uvedených kroků, nyní chcete povolit službu CloudFlare CDN.
  2. 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 🙂


Ubuntu
  1. Zdarma SSL pro Nginx na Centos od Let’s encrypt

  2. Nainstalujte certifikát Let's Encrypt Using Certbot v Ubuntu 20.04 - Jak to udělat na webovém serveru Nginx?

  3. Zabezpečte Nginx pomocí Let's Encrypt na Ubuntu 18.04 - Jak na to?

  1. Jak zabezpečit Nginx pomocí Lets Encrypt na Ubuntu 20.04 / 18.04

  2. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 18.04

  3. Jak zabezpečit Nginx pomocí Let's Encrypt na Ubuntu 20.04

  1. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 16.04

  2. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 20.04

  3. Jak nastavit Zašifrujeme certifikát SSL pomocí Nginx na Ubuntu 18.04 a Ubuntu 16.04