GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit více SSL na jedné IP s Nginx

S nedostatkem dostupného adresního prostoru v IPv4 je stále obtížnější získat IP a v některých případech jsou stále dražší. Ve většině případů to však není nevýhoda. Servery jsou dokonale schopné hostovat více webových stránek na jedné IP adrese, jak tomu bylo po léta.

Byly však doby, kdy použití certifikátu SSL k zabezpečení provozu na vašich stránkách vyžadovalo mít samostatnou IPv4 adresu pro každou zabezpečenou doménu. Není to proto, že by SSL byly vázány na IP adresy nebo dokonce na servery, ale proto, že požadavek na informace o certifikátu SSL nespecifikoval, jaká doména se načítá, a server byl tedy nucen odpovědět pouze jedním certifikátem. Neshoda názvů způsobila varování o nezabezpečeném certifikátu, a proto musel vlastník serveru mít jedinečné adresy IP pro všechny hostitele SSL.

Omezení IPv4 naštěstí přineslo do popředí nové technologie a použitelnost, zejména indikaci názvu serveru (SNI).

Proč potřebuji protokol SSL?

Certifikáty Secure Socket Layer (SSL) umožňují obousměrnou šifrovanou komunikaci mezi klientem a serverem. To umožňuje jakoukoli ochranu dat před zvědavýma očima, včetně citlivých informací, jako jsou čísla kreditních karet nebo hesla. SSL jsou volitelně podepsána známou autoritou třetí strany, jako je GlobalSign. Nejběžnější použití takových certifikátů je k zabezpečení webového provozu přes HTTPS.

Při procházení webu HTTPS namísto zobrazení pozitivního indikátoru moderní prohlížeče zobrazují negativní indikátor pro web, který není pomocí SSL. Takže weby, které nemají SSL, budou mít hned od začátku červenou vlajku pro všechny nové návštěvníky. Stránky, které si chtějí zachovat pověst, jsou proto nuceny získat SSL.

Naštěstí je tak snadné získat a nainstalovat SSL, dokonce i zdarma, že je to jen základní formalita. Níže se budeme zabývat podrobnostmi.

Co je SNI?

Indikace názvu serveru je funkce prohlížeče a webového serveru, ve které požadavek HTTPS obsahuje další záhlaví, název_serveru , na který může server odpovědět příslušným SSL certifikátem. To umožňuje jediné IP adrese hostit stovky nebo tisíce domén, z nichž každá má svůj vlastní SSL!

Technologie SNI je dostupná ve všech moderních prohlížečích a softwaru webových serverů, takže podle W3 ji bude moci podporovat více než 98 % uživatelů webu.

Předletová kontrola

Budeme pracovat na serveru CentOS 7 VPS, který používá Nginx a PHP-FPM k hostování webových stránek bez jakéhokoli ovládacího panelu (cPanel, Plesk atd.). To se běžně nazývá „LEMP“ stack, který nahrazuje Nginx za Apache v „LAMP“ stacku. Tyto pokyny budou podobné většině ostatních verzí Linuxu, i když instalace Let’s Encrypt pro Ubuntu 18.04 se bude lišit. Zahrnu vedle sebe pokyny pro CentOS 7 i Ubuntu 18.04.

U zbývajících pokynů budeme předpokládat, že máte nainstalovaný Nginx a nastavený pro hostování více webových stránek, včetně konfigurace brány firewall pro otevření nezbytných portů (80 a 443). Jsme připojeni přes SSH k shellu na našem serveru jako root.

PoznámkaPokud máte pro každou doménu SSL, ale ještě nejsou nainstalovány, měli byste použít Krok 3a přidat je ručně. Pokud nemáte SSL a chtěli byste k jejich objednání a automatické konfiguraci využít bezplatnou službu Let’s Encrypt, měli byste použít Krok 3b .

Krok 1:Povolení SNI v Nginx

Náš první krok je již hotový! Moderní verze úložiště Nginx budou ve výchozím nastavení zkompilovány s podporou OpenSSL pro serverové informace SNI. Můžeme to potvrdit na příkazovém řádku pomocí:

nginx -V

Tím se zobrazí hromada textu, ale nás zajímá pouze tento řádek:

...
TLS SNI support enabled
...

Pokud nemáte řádek, jako je tento, bude muset být Nginx znovu ručně zkompilován, aby zahrnoval tuto podporu. Jednalo by se o velmi vzácnou instanci, například v zastaralé verzi Nginx, která již byla ručně zkompilována ze zdroje s jinou knihovnou OpenSSL. Verze Nginx nainstalovaná úložištěm CentOS 7 EPEL (1.12.2) a verze obsažená v Ubuntu 18.04 (1.14.0) bude podporovat SNI.

Krok 2:Konfigurace virtuálních hostitelů Nginx

Vzhledem k tomu, že jste již nastavili více než jednu doménu v Nginx, máte pravděpodobně bloky konfigurace serveru nastavené pro každý web v samostatném souboru. Pro případ, že to neuděláte, nejprve se ujistěte, že jsou naše domény nastaveny pro provoz bez protokolu SSL. Pokud ano, můžete tento krok přeskočit. Budeme pracovat na doménách domain.com a example.com.

vim /etc/nginx/sites-available/domain.com

PoznámkaPokud náhodou nemáte složky s povolenými weby nebo s dostupnými weby a chcete je použít, můžete vytvořit /etc/nginx/sites-available a /etc/nginx/sites-enabled pomocí mkdir příkaz. Poté  uvnitř /etc/nginx/nginx.conf , přidejte tento řádek kamkoli do hlavního http{} block (doporučujeme jej umístit hned za řádek include, který hovoří o conf.d):

include /etc/nginx/sites-enabled/*;

Jinak můžete své konfigurace provést v /etc/nginx/conf.d/*.conf .

Přinejmenším vložte následující možnosti, nahraďte kořen dokumentu skutečnou cestou k souborům vašeho webu a přidejte jakékoli další proměnné, které pro své weby požadujete:

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}

Podobný soubor by měl být nastaven pro example.com a všechny další domény, které chcete hostovat. Jakmile jsou tyto soubory vytvořeny, můžeme je povolit pomocí symbolického odkazu:

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Nyní restartujeme Nginx…

systemctl reload nginx

To znovu načte konfigurační soubory bez restartování aplikace. Můžeme potvrdit, že dva, které jsme právě vytvořili, jsou načteny pomocí:

nginx -T

Měli byste vidět název_serveru řádek pro doménu.com i example.com.

Poznámka:poslouchejte řádek zahrnutý v bloku serveru výše umožní webu poslouchat na jakémkoli IP, která je na serveru. Pokud byste místo toho chtěli zadat IP, můžete použít IP:port formátovat, například takto:

server {
listen 123.45.67.89:80;
...
}

Krok 3a:Přidejte existující SSL do virtuálních hostitelů Nginx

Nyní, když máme platné provozní konfigurace, můžeme přidat SSL, které máme pro tyto domény, jako nové bloky serveru v Nginx. Nejprve uložte svůj certifikát SSL a (soukromý) klíč do globální složky na serveru s názvy, které označují příslušnou doménu. Řekněme, že jste vybrali globální složku /etc/ssl/ . Naše jména budou v tomto případě /etc/ssl/domain.com.crt (který obsahuje samotný certifikát a případné řetězové certifikáty od podepisující autority) a /etc/ssl/domain.com.key , který obsahuje soukromý klíč. Upravte konfigurační soubory, které jsme vytvořili:

vim /etc/nginx/sites-available/domain.com

Přidejte zcela nový blok serveru pod konec stávajícího bloku (mimo poslední složenou závorku) s následujícími informacemi:

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

Všimněte si změny naslouchacího portu na 443 (pro HTTPS) a přidání ssl_certificate a ssl_certificate_key linky. Namísto přepisování celého bloku můžete zkopírovat původní blok serveru a poté přidat tyto další řádky a zároveň změnit port naslouchání. Uložte tento soubor a znovu načtěte konfiguraci Nginx.

systemctl reload nginx

Znovu potvrzujeme, že je změna provedena pomocí:

nginx -T

U některých nastavení uvidíte dvě server_name, každý pro doménu.com a example.com, jeden používá port 80 a druhý port 443. Pokud tak učiníte, můžete přeskočit na krok 4, jinak pokračujte dalším krokem.

Krok 3b:Nainstalujte a nakonfigurujte Let’s Encrypt

Nyní nastavíme bezplatného poskytovatele SSL Let’s Encrypt, aby automaticky podepisoval certifikáty pro všechny domény, které jsme právě nastavili v Nginx. Na Ubuntu 18.04 , přidejte PPA a nainstalujte skripty certifikátu pomocí apt itude:

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

V CentOS 7 , nainstalujeme úložiště EPEL a odtud nainstalujeme pomocníka pro certifikáty.

yum install epel-release

yum install certbot python2-certbot-nginx

Na obou systémech si nyní můžeme přečíst konfiguraci Nginx a požádat Certbota, aby nám přidělil nějaké certifikáty.

certbot --nginx

To vám položí několik otázek o tom, které domény byste chtěli používat (možnost můžete nechat prázdnou a vybrat všechny domény) a zda chcete, aby Nginx přesměroval provoz na váš nový SSL (to bychom chtěli!). Po dokončení procesu podepisování by Nginx měl automaticky znovu načíst svou konfiguraci, ale pokud se tak nestane, načtěte ji znovu ručně:

systemctl reload nginx

Nyní můžete zkontrolovat běžící konfiguraci pomocí:

nginx -T

Nyní byste místo toho měli vidět dvě server_name, každý pro doménu.com a example.com, jeden používá port 80 a jeden používá port 443.

Certifikáty Let’s Encrypt jsou platné pouze 90 dní od vydání, proto chceme zajistit, aby byly automaticky obnovovány. Upravte soubor cron pro uživatele root spuštěním:

crontab -e

Cron by měl vypadat takto:

45 2 * * 3,6 certbot renew && systemctl reload nginx

Jakmile tento soubor uložíte, každou středu a sobotu ve 2:45 hodin certbot příkaz zkontroluje všechna potřebná obnovení, automaticky stáhne a nainstaluje certifikáty a poté znovu načte konfiguraci Nginx.

Krok 4:Ověřte instalaci a platnost

Nyní bychom měli zkontrolovat platnost našich SSL a zajistit, aby prohlížeče certifikát správně viděly. Navštivte sslcheck.liquidweb.com a zadejte názvy svých domén, abyste zkontrolovali SSL webu na svém serveru. Měli byste vidět čtyři zelené značky zaškrtnutí označující ochranu SSL.

Doufáme, že se vám líbil náš návod, jak nainstalovat SSL na více webů v rámci jednoho serveru. Zákazníci Liquid Web mají přístup k našemu týmu podpory 24/7. Můžeme pomoci s podepsaným SSL nebo objednáním nového serveru pro snadný převod na Liquid Web.


Linux
  1. Jak nakonfigurovat origin Cloudflare SSL s Nginx

  2. Jak zabezpečit Nginx pomocí SSL a Let's Encrypt ve FreeBSD

  3. Jak nastavit více certifikátů SSL na CentOS VPS s Apache pomocí jedné IP adresy

  1. Jak nakonfigurovat více webových stránek s webovým serverem Apache

  2. Jak nainstalovat Let's Encrypt SSL na Ubuntu 18.04 s Nginx

  3. Jak nastavit linuxový server jako router s NAT

  1. Jak nastavit bloky serveru Nginx na Ubuntu 20.04

  2. Jak nastavit bloky serveru Nginx na CentOS 7

  3. Jak nastavit bloky serveru Nginx na CentOS 8