GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak vytvořit certifikát SSL s vlastním podpisem pro Nginx na Ubuntu 18.04

SSL je zkratka pro „Secure Sockets Layer“, což je standardní bezpečnostní technologie určená k vytvoření šifrovaného spojení mezi webovým serverem a webovým prohlížečem. Tento odkaz zajišťuje, že všechny informace předávané mezi serverem a prohlížečem zůstanou soukromé a bezpečné. Hlavním účelem SSL certifikátů je zajistit bezpečnost webu a šifrovat data přenášená mezi klientem a prohlížečem, aby se zabránilo krádeži citlivých informací, jako jsou údaje o kreditních kartách, čísla účtů, hesla atd.

Certifikát podepsaný svým držitelem je certifikát, který je podepsán osobou, která jej vytvořila, nikoli důvěryhodnou certifikační autoritou (CA). Většina klientů a organizací je v pokušení používat certifikáty SSL s vlastním podpisem namísto certifikátů vydaných a ověřených důvěryhodnou certifikační autoritou, a to především kvůli rozdílu v ceně. Stále však nabízí stejnou úroveň šifrování až do limitu.

V tomto článku vysvětlím, jak vytvořit certifikát SSL s vlastním podpisem na serveru Ubuntu 18.04 s webovým serverem Nginx.

Předpoklady

Dobře nakonfigurovaný server s právy root a knihovnou OpenSSL. Pro vygenerování vlastního certifikátu je nutná knihovna OpenSSL. Spusťte na svém serveru ubuntu následující příkaz a zjistěte, zda již máte nainstalované OpenSSL.

# which openssl
/usr/bin/openssl

Pokud příkaz which nevrátil binární soubor, budeme jej muset nainstalovat pomocí příkazu:

#apt install openssl

Vytvoření certifikátu s vlastním podpisem

SSL se skládá hlavně ze dvou částí, jednou je soukromý klíč a druhou veřejný certifikát. Klíč SSL je na serveru uchováván jako soukromý a je omezen na uživatele root. Ve skutečnosti se používá k šifrování obsahu zaslaného klientům. Veřejný certifikát SSL je sdílen s každým, kdo požaduje obsah. Lze jej použít k dešifrování obsahu podepsaného přidruženým soukromým klíčem SSL. Zde tento příkaz používám ke generování certifikátu s vlastním podpisem, konkrétně example.com.crt a soukromého klíče example.com.key (zde používám example.com.pem jako název souboru) pomocí nástroje OpenSSL.

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem

Podrobnosti o každé možnosti naleznete níže:

  • req:Tento dílčí příkaz se používá k vytvoření nového certifikátu X.509. „X.509“ je standard infrastruktury veřejných klíčů, který SSL a TLS dodržují pro správu klíčů a certifikátů.
  • -x509:Toto dále upravuje předchozí dílčí příkaz tím, že říká obslužnému programu, že chceme vytvořit certifikát s vlastním podpisem.
  • -nodes:Používá se k přeskočení možnosti přístupové fráze k zabezpečení našeho certifikátu.
  • -days 365:Tato možnost nastavuje platnost certifikátu ve dnech. Nastavujeme to zde na rok.
  • -newkey rsa:2048:Toto určuje, že chceme spolu s certifikátem vygenerovat nový klíč RSA s 2048 bity.
  • -keyout:Tato možnost říká OpenSSL, kam umístit vygenerovaný soubor soukromého klíče.
  • -out:Tato možnost říká OpenSSL, kam umístit vygenerovaný certifikát.

Během provádění tohoto příkazu nás vyzve k zadání podrobností o doméně/klientovi pro generování žádosti o podpis certifikátu (CSR). Tyto podrobnosti můžete poskytnout podle potřeby.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

Nyní máme náš nově vygenerovaný certifikát s vlastním podpisem a soukromý klíč je v těchto umístěních:/etc/ssl/certs/example.com.pem a /etc/ssl/private/example.com.key . Dále bychom měli vytvořit silnou skupinu Diffie-Hellman, která se používá při vyjednávání Perfect Forward Secrecy s klienty. Spuštěním tohoto příkazu jej vytvoříte.

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Dokončení může nějakou dobu trvat, ale až bude hotovo, budeme mít silnou DH skupinu na /etc/ssl/certs/dhparam.pem které můžeme použít v naší konfiguraci.

Konfigurace Nginx pro použití certifikátů s vlastním podpisem

Než začneme, musíme se ujistit, že webový server Nginx je nainstalován na našem serveru Ubuntu 18.04. Pokud není nainstalován, můžete jej nainstalovat pomocí tohoto jednoduchého příkazu:

#apt install nginx

Tuto službu jsem nainstaloval a povolil na svém serveru.

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

Další. můžeme nakonfigurovat Nginx tak, aby používal SSL. Vysvětlím to ve třech krocích:

  1. Vytvoření konfigurace fragmentu s vygenerovanými podrobnostmi certifikátu SSL.
  2. Vytvoření konfigurace fragmentu pro zachování silného a zabezpečeného nastavení SSL, které překonává možné zranitelnosti protokolu SSL.
  3. Aktualizace virtuálního hostitele domény pomocí výše uvedených konfigurací fragmentu, aby bylo možné povolit protokol SSL

Krok 1:Vytvoření konfigurace fragmentu s podrobnostmi certifikátu SSL

Pojďme vytvořit nový konfigurační soubor úryvku, jmenovitě „self-signed.conf“ pro nasměrování našich vygenerovaných podrobností certifikátu s vlastním podpisem do složky úryvků Nginx:/etc/nginx/snippets/ jak je uvedeno níže:

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

Zde musíme zadat naši vygenerovanou cestu certifikátu:/etc/ssl/certs/example.com.pem a cesta klíče:/etc/ssl/private/example.com.key pro směrnici, jak je uvedeno výše.

Krok 2:Vytvoření konfigurace fragmentu pro zachování silného a bezpečného nastavení SSL, které překonává možné zranitelnosti protokolu SSL

Zadruhé musíme udržovat plně funkční a silnou konfiguraci serveru SSL, která náš server chrání před všemi možnými zranitelnostmi SSL. Nakonfiguroval jsem svůj Nginx pomocí silné šifrovací sady SSL a povolil některé pokročilé funkce pro zajištění zabezpečení serveru. Všechny tyto parametry jsou zahrnuty v souboru:/etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Tato doporučení Nginx Cipher můžete získat v seznamu šifry. Tyto parametry budou použity v budoucích konfiguracích Nginx pro SSL. Jak můžete vidět, nastavili jsme ssl_dhparam nastavení tak, aby ukazovalo na soubor Diffie-Hellman, který jsme zde vygenerovali dříve. Protože používáme certifikát podepsaný svým držitelem, SSL stapling nebudou použity. Proto jsem jej off jinak Nginx jednoduše vypíše varování jako toto nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate . Po provedení těchto změn můžete konfiguraci uložit a ukončit.

Krok 3:Aktualizace virtuálního hostitele domény pomocí výše uvedených konfigurací fragmentů, aby bylo možné povolit SSL

Jsme připraveni s naší požadovanou konfigurací úryvků, nyní je můžeme zahrnout do našeho virtuálního hostitele domény a povolit SSL. Zde v tomto článku používám výchozí konfigurační soubor Nginx umístěný na adrese /etc/nginx/sites-available/default . Upravil jsem tento soubor, abych povolil SSL a načetl vygenerované certifikáty s vlastním podpisem. Podívejte se prosím na upravenou část níže v této konfiguraci:

cat /etc/nginx/sites-available/default

#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

Nyní můžeme uložit tyto konfigurace a restartovat službu Nginx, aby se tyto změny projevily.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

Testování

Toto je náš poslední krok, kdy můžeme otevřít náš prohlížeč a pokusit se získat přístup k IP serveru na adrese URL>> https://Server_IP or Hostname . Zobrazí se bezpečnostní varování, protože používáme certifikát s vlastním podpisem. Toto varování můžete ignorovat a kliknutím na potvrzení zabezpečení pokračovat dále, jak je znázorněno na snímku.

Přečtěte si také:

  • Mkcert – Vytváření certifikátů SSL pro místní vývoj v systému Linux
  • Jak nainstalovat Let's Encrypt SSL certifikáty na Ubuntu 18.04
  • Jak nastavit NGINX jako reverzní proxy pomocí Docker

To je vše! úspěšně jsme nakonfigurovali Nginx s certifikátem s vlastním podpisem pomocí silných metod šifrování pro bezpečná klientská připojení. Doufám, že tento článek je pro vás užitečný! Uveřejněte prosím své cenné komentáře a návrhy.


Ubuntu
  1. Jak vytvořit spouštěcí USB disk Ubuntu pro Mac v OS X

  2. Jak zajistit, aby Apache 2 přestal žádat heslo pro certifikát Ssl?

  3. Jak přidat klientský certifikát/klíč Ssl globálně v Ubuntu?

  1. Jak nainstalovat certifikát SSL s vlastním podpisem v cPanel

  2. Jak vytvořit certifikát SSL s vlastním podpisem na Ubuntu 18.04

  3. Oprávnění pro klíč SSL?

  1. Jak nainstalovat certifikát SSL na NGINX

  2. Jak vygenerovat certifikát s vlastním podpisem pro Kubernetes

  3. Jak vytvořit VPN na Ubuntu 20.04 pomocí Wireguard