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:
- Vytvoření konfigurace fragmentu s vygenerovanými podrobnostmi certifikátu SSL.
- Vytvoření konfigurace fragmentu pro zachování silného a zabezpečeného nastavení SSL, které překonává možné zranitelnosti protokolu SSL.
- 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.