HTTPS je právě rychlejší a bezpečnější díky vydání TLS 1.3 od IETF (RFC 8446) v srpnu 2018. TLS 1.3 je nyní nejnovější verzí protokolu TLS. Tento tutoriál vám ukáže, jak povolit TLS 1.3 na webovém serveru Nginx na Ubuntu 18.04 a Ubuntu 16.04.
Aktualizovat :Existuje jednodušší způsob, jak povolit TLS 1.3. Viz tento článek:Jak snadno povolit TLS 1.3 v Nginx na Ubuntu 18.10, 18.04, 16.04, 14.04
TLS 1.3:Vylepšený výkon a zabezpečení
Z hlediska výkonu potřebuje TLS 1.2 k navázání připojení HTTPS dvě zpáteční cesty. S TLS 1.3 je vyžadována pouze jedna zpáteční cesta. TLS 1.3 také podporuje režim nulové zpáteční cesty (obnovení relace 0-RTT), což umožňuje klientům, kteří se dříve připojili k vašemu webu, odeslat požadavek HTTP na první zprávu na server. To je velký rozdíl pro uživatele v mobilních sítích nebo na vzdálených místech.
Pokud jde o zabezpečení, TLS 1.3 odstranil podporu pro staré šifrovací sady, které jsou zodpovědné za exploity, jako je útok ROBOT. Správci serveru proto již nemohou přidávat staré šifrovací sady v TLS 1.3, aby uklidnili uživatele starých webových prohlížečů. To je samozřejmě příliš zjednodušené vysvětlení. CloudFlare má dobré podrobné vysvětlení TLS 1.3.
Povolte TLS 1.3 v Nginx na Ubuntu 18.04, Ubuntu 16.04
Pokud jde o povolení TLS 1.3 s Nginx, existují dva požadavky.
- Vaše verze Nginx musí podporovat TLS 1.3. To znamená nginx 1.13 nebo vyšší.
- Nginx musí být buď sestaven s OpenSSL 1.1.1+, nebo musí běžet s OpenSSL 1.1.1+.
Druhý požadavek může znít matoucí, proto vám uvedu dva příklady.
- Ubuntu 18.04 se dodává s OpenSSL 1.1.0. Výměna systémové knihovny OpenSSL není dobrý nápad, ale můžete si stáhnout zdrojový kód OpenSSL 1.1.1 a zkompilovat Nginx se zdrojovým kódem OpenSSL 1.1.1, abyste povolili TLS 1.3.
- Arch Linux se aktuálně dodává s OpenSSL 1.1.1, ale balíček Nginx v úložišti Arch je ve skutečnosti vytvořen s OpenSSL 1.1.0. V tomto případě Nginx není vytvořen s OpenSSL 1.1.1, ale běží s OpenSSL 1.1.1.
Nyní se podívejme, jak zkompilovat Nginx s OpenSSL 1.1.1 na Ubuntu 18.04 a Ubuntu 16.04.
1. Přidání oficiálního úložiště Nginx
Místo stahování zdrojového tarballu a jeho kompilace pomocí make
, přidám oficiální úložiště Nginx na svůj server Ubuntu a poté vytvořím deb balíček ze zdrojového kódu. Tímto způsobem nemusím ručně přidávat dlouhý seznam konfiguračních parametrů do configure
příkaz. V balíčku deb bude také praktický soubor služby systemd.
Nejprve stáhněte klíč GPG Nginx a importujte jej do Ubuntu.
wget http://nginx.org/keys/nginx_signing.keysudo apt-key add nginx_signing.key
Poté vytvořte soubor se seznamem zdrojů pro repo Nginx.
sudo nano /etc/apt/sources.list.d/nginx.list
Přidejte do souboru následující dva řádky. deb-src
linka nám umožňuje stahovat zdrojové balíčky Nginx pomocí apt source
příkaz. Bonic
je kódové označení pro Ubuntu 18.04. Pokud používáte Ubuntu 16.04, nahraďte jej xenial
. (Poznámka:Toto úložiště nepodporuje 32bitový OS.)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginxdeb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Chcete-li uložit soubor v textovém editoru Nano, stiskněte Ctrl+O
a poté stiskněte Enter pro potvrzení. Pro ukončení stiskněte Ctrl+X
. Potom aktualizujte místní index balíčků.
aktualizace sudo apt
Nyní je na server Ubuntu přidán oficiální repozitář Nginx.
2. Stáhněte si zdrojový kód Nginx a OpenSSL
Vytvoříme nginx
adresář pod /usr/local/src/
pro uložení zdrojů Nginx a poté cd
do tohoto adresáře.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Stáhněte si zdrojový balíček Nginx pomocí příkazu níže:
sudo apt install dpkg-devsudo apt source nginx
Podívejte se na stažené soubory.
ls
Výstup:
nginx-1.15.3 nginx_1.15.3-1~bionic.dscnginx_1.15.3-1~bionic.debian.tar.xz _ 1 z...15tar...>Poté naklonujte úložiště github OpenSSL.
cd /usr/local/srcsudo apt install gitsudo git clone https://github.com/openssl/openssl.gitcd opensslDále vypište všechny pobočky a přepněte na stabilní větev 1.1.1.
git branch -sudo git checkout OpenSSL_1_1_1-stable3. Upravit pravidla kompilace Nginx
Upravte soubor s pravidly kompilace Nginx.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rulesNajděte
config.status.nginx: config.env.nginx
sekce. Přidejte následující text na konec řádku CFLAGS. Všimněte si, že následující text není sám o sobě řádek.--with-openssl=/usr/local/src/openssl
Uložte a zavřete soubor.
4. Kompilace Nginx
Ujistěte se, že jste ve zdrojovém adresáři Nginx.
cd /usr/local/src/nginx/nginx-1.15.3/Nainstalujte závislosti a vytvořte náš deb balíček Nginx.
sudo apt build-dep nginxNyní použijte následující příkaz k vytvoření balíčku deb.
sudo dpkg-buildpackage -bPokud se zobrazí následující chyba,
chybí inicializátor pro pole 'md_ctrl' v 'EVP_MD {aka const struct evp_md_st}Poté upravte
auto/cc/gcc
soubor.sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gccZakomentujte následující řádek.
-Werror
flag způsobí, že GCC bude varování považovat za chyby.CFLAGS="$CFLAGS -Werror"Poté znovu spusťte příkaz sestavení. Po dokončení sestavení bude v
/usr/local/src/nginx/
deb balíček Nginx adresář. Pokud jste již Nginx nainstalovali, je čas odstranit starou verzi a poté nainstalovat novou verzi.sudo apt remove nginx nginx-common nginx-fullcd /usr/local/src/nginx/sudo dpkg -i nginx_1.15.3-1~bionic_amd64.debNyní začněme Nginx.
sudo systemctl spustit nginxPokud se zobrazí následující chybová zpráva.
Nepodařilo se spustit nginx.service:Jednotka nginx.service je maskovaná.Poté odmaskujte nginx a zadejte znovu příkaz start.
sudo systemctl odmaskovat nginxUpozorňujeme, že proces Nginx může běžet jako uživatel
nginx
nebowww-data
. Toto lze změnit úpravou prvního řádku v/etc/nginx/nginx.conf
soubor. Jen se ujistěte, že Nginx běží jako stejný uživatel s PHP-FPM.Nyní zkontrolujte konfigurační argumenty Nginx.
sudo nginx -V
Jak můžete vidět, máme nejnovější verzi Nginx postavenou s OpenSSL 1.1.1.
5. Povolte TLS 1.3 v Nginx Server Block
Nyní předpokládám, že jste již povolili HTTPS pro váš blok serveru Nginx. Syntaxe pro povolení TLS 1.3 je poměrně snadná. Otevřete soubor bloku serveru Nginx v
/etc/nginx/conf.d/
adresář nebo/etc/nginx/sites-enabled/
adresář. Najděte následující řádek.ssl_protocols TLSv1.2;Přidejte
TLSv1.3
do seznamu protokolů.ssl_protocols TLSv1.2 TLSv1.3;Poté přidejte následující 3 šifrovací sady ke svým stávajícím šifrovacím sadám.
TLS-CHACHA20-POLY1305-SHA256TLS-AES-256-GCM-SHA384TLS-AES-128-GCM-SHA256takhle:
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384-ECGADHE -SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-SHASHA256:ECDHEES256ECD -AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Uložte a zavřete soubor. Poté otestujte konfiguraci Nginx a znovu načtěte.
sudo nginx -tsudo systemctl znovu načíst nginxJe nepravděpodobné, že by Ubuntu 18.04 přešlo na OpenSSL 1.1.1, takže pokud upgradujete Nginx pomocí
sudo apt upgrade
příkaz, TLS 1.3 bude pryč. Je to dobrý nápad zabránit upgradu Nginx pomocíapt
pomocí tohoto příkazu:sudo apt-mark hold nginxAktualizace:Od Nginx 1.15.4 můžete povolit 0-RTT s OpenSSL přidáním následující direktivy do kontextu ssl serveru. Výchozí hodnota je nastavena na
off
. V předchozí verzi 1.15.3 jej lze používat pouze s BoringSSL.ssl_early_data onPovolte TLS 1.3 v prohlížeči Google Chrome
V současné době Firefox 62 a Chrome 69 podporují pouze návrh 28 protokolu TLS 1.3. OpenSSL 1.1.1 podporuje konečnou verzi TLS 1.3. Implementace založené na verzi konceptu a konečné verzi RFC spolu vzájemně nespolupracují.
Chcete-li nyní otestovat náš server Nginx, musíme nainstalovat beta verzi prohlížeče Google Chrome a povolit konečnou verzi TLS 1.3. Až si nainstalujete Chrome beta, zadejte
chrome://flags/#tls13-variant
v adresním řádku a přepněte zdefault
naEnabled (Final)
. Poté znovu spusťte Google Chrome, aby se změna projevila.
Nyní navštivte svůj web s povoleným TLS 1.3 v Google Chrome beta a stiskněte
Ctrl+Shift+I
otevřete stránku nástrojů pro vývojáře. Přejděte naSecurity
tab. Můžete vidět používanou verzi TLS.
Firefox údajně dodává konečnou verzi TLS 1.3 ve Firefoxu 63, která je naplánována na říjen 2018. V Chrome 70 bude finální verze TLS 1.3 povolena pro odchozí připojení.
Aktualizace:Chrome 70 přidal podporu pro konečnou verzi TLS 1.3, ale ve výchozím nastavení stále používá koncept 28 TLS 1.3.Povolte TLS 1.3 s CloudFlare
Pokud používáte CloudFlare CDN (Content Delivery Network), pak váš web již používá TLS1.3. Na řídicím panelu CloudFlare vyberte
crypto
a uvidíte možnost povolit/zakázat TLS 1.3. Můžete také povolit 0-RTT. CloudFlare podporuje verzi draft 28 i konečnou verzi.
A je to! Doufám, že vám tento návod pomohl povolit TLS 1.3 v Nginx na Ubuntu 18.04 a Ubuntu 16.04. Opatruj se.
Jak nainstalovat Mailtrain na Ubuntu 18.04 s Dockerem Jak nainstalovat Plex Media Server na Ubuntu 18.04 LTS Server nebo DesktopUbuntu