Kurz: Použití certifikátů TLS/SSL k zabezpečení webového serveru

Platí pro: ✔️ Virtuální počítače s Linuxem

K zabezpečení webových serverů je možné k šifrování webového provozu použít certifikát TLS (Transport Layer Security), dříve označovaný jako SSL (Secure Sockets Layer). Tyto certifikáty TLS/SSL je možné ukládat v Azure Key Vault a umožňují zabezpečená nasazení certifikátů do virtuálních počítačů s Linuxem v Azure. Co se v tomto kurzu naučíte:

  • Vytvoření služby Azure Key Vault
  • Generování nebo nahrání certifikátu do služby Key Vault
  • Vytvoření virtuálního počítače a instalace webového serveru NGINX
  • Vložte certifikát do virtuálního počítače a nakonfigurujte NGINX pomocí vazby TLS.

Tento kurz používá rozhraní příkazového řádku v rámci Azure Cloud Shell, které se neustále aktualizuje na nejnovější verzi. Pokud chcete otevřít Cloud Shell, vyberte Vyzkoušet v horní části libovolného bloku kódu.

Pokud se rozhodnete nainstalovat a používat rozhraní příkazového řádku místně, musíte mít Azure CLI verze 2.0.30 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Přehled

Azure Key Vault chrání kryptografické klíče a tajné kódy, jako jsou certifikáty a hesla. Key Vault pomáhá zjednodušit proces správy certifikátů a zajišťuje kontrolu nad klíči, které se používají k přístupu k těmto certifikátům. V rámci služby Key Vault můžete vytvořit certifikát podepsaný svým držitelem nebo nahrát stávající důvěryhodný certifikát, který již vlastníte.

Místo použití vlastní image virtuálního počítače, která zahrnuje integrované certifikáty, vložíte certifikáty do spuštěného virtuálního počítače. Tento proces zajistí, že se při nasazování na webový server nainstalují nejnovější certifikáty. Zároveň pokud obnovíte nebo nahradíte certifikát, nebudete muset vytvářet novou vlastní image virtuálního počítače. Nejnovější certifikáty se automaticky vloží při vytváření dalších virtuálních počítačů. Během celého procesu certifikáty neopustí platformu Azure ani nejsou zveřejněné v žádném skriptu, historii příkazového řádku nebo šabloně.

Vytvoření služby Azure Key Vault

Než vytvoříte službu Key Vault a certifikáty, vytvořte skupinu prostředků pomocí příkazu az group create. Následující příklad vytvoří skupinu prostředků myResourceGroupSecureWeb v umístění eastus:

az group create --name myResourceGroupSecureWeb --location eastus

Dále vytvořte službu Key Vault pomocí příkazu az keyvault create a povolte její použití při nasazování virtuálního počítače. Každá služba Key Vault vyžaduje jedinečný název, který by měl být malými písmeny. V následujícím příkladu nahraďte <mykeyvault> vlastním jedinečným názvem Key Vault:

keyvault_name=<mykeyvault>
az keyvault create \
    --resource-group myResourceGroupSecureWeb \
    --name $keyvault_name \
    --enabled-for-deployment

Vygenerování certifikátu a jeho uložení do služby Key Vault

V případě použití v produkčním prostředí byste měli importovat platný certifikát podepsaný důvěryhodným poskytovatelem pomocí příkazu az keyvault certificate import. Pro účely tohoto kurzu následující příklad ukazuje, jak můžete pomocí příkazu az keyvault certificate create vygenerovat certifikát podepsaný svým držitelem, který využívá výchozí zásady certifikátu:

az keyvault certificate create \
    --vault-name $keyvault_name \
    --name mycert \
    --policy "$(az keyvault certificate get-default-policy)"

Příprava certifikátu pro použití na virtuálním počítači

Pokud chcete certifikát použít během procesu vytváření virtuálního počítače, získejte ID vašeho certifikátu pomocí příkazu az keyvault secret list-versions. Převeďte certifikát pomocí příkazu az vm secret format. Z důvodu snadnějšího použití v dalších krocích přiřadí následující příklad výstup těchto příkazů do proměnných:

secret=$(az keyvault secret list-versions \
          --vault-name $keyvault_name \
          --name mycert \
          --query "[?attributes.enabled].id" --output tsv)
vm_secret=$(az vm secret format --secrets "$secret" -g myResourceGroupSecureWeb --keyvault $keyvault_name)

Vytvoření konfigurace cloud-init pro zabezpečení serveru NGINX

Cloud-init je široce využívaným přístupem k přizpůsobení virtuálního počítače s Linuxem při jeho prvním spuštění. Pomocí cloud-init můžete instalovat balíčky a zapisovat soubory nebo konfigurovat uživatele a zabezpečení. Vzhledem k tomu, že cloud-init běží během procesu počátečního spuštění, neexistují žádné další kroky ani agenti, kteří by mohli použít konfiguraci.

Při vytváření virtuálního počítače se certifikáty a klíče uloží do chráněného adresáře /var/lib/waagent/. Pokud chcete automatizovat přidávání certifikátů do virtuálního počítače a konfiguraci webového serveru, použijte cloud-init. V tomto příkladu nainstalujete a nakonfigurujete webový server NGINX. Pomocí stejného postupu můžete nainstalovat a nakonfigurovat i Apache.

Vytvořte soubor cloud-init-web-server.txt a vložte do něj následující konfiguraci:

#cloud-config
package_upgrade: true
packages:
  - nginx
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/mycert.cert;
        ssl_certificate_key /etc/nginx/ssl/mycert.prv;
      }
runcmd:
  - secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
  - mkdir /etc/nginx/ssl
  - cp $secretsname.crt /etc/nginx/ssl/mycert.cert
  - cp $secretsname.prv /etc/nginx/ssl/mycert.prv
  - service nginx restart

Vytvoření zabezpečeného virtuálního počítače

Teď pomocí příkazu az vm create vytvořte virtuální počítač. Data certifikátu ze služby Key Vault se vloží pomocí parametru --secrets. Konfiguraci cloud-init předáte pomocí parametru --custom-data:

az vm create \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init-web-server.txt \
    --secrets "$vm_secret"

Vytvoření virtuálního počítače, instalace balíčků a spuštění aplikace trvá několik minut. Po vytvoření virtuálního počítače si poznamenejte hodnotu publicIpAddress zobrazenou v Azure CLI. Tato adresa slouží k přístupu k vašemu webu ve webovém prohlížeči.

Pokud chcete pro přístup k virtuálnímu počítači povolit zabezpečený webový provoz, otevřete port 443 z internetu pomocí příkazu az vm open-port:

az vm open-port \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --port 443

Testování zabezpečené webové aplikace

Teď můžete otevřít webový prohlížeč a do panelu Adresa zadat https://< publicIpAddress> . Zadejte vlastní veřejnou IP adresu získanou při vytváření virtuálního počítače. Pokud jste použili certifikát podepsaný svým držitelem, přijměte upozornění zabezpečení:

Přijetí upozornění zabezpečení ve webovém prohlížeči

Následně se zobrazí váš zabezpečený web NGINX, jak je znázorněno v následujícím příkladu:

Zobrazení spuštěného zabezpečeného webu NGINX

Další kroky

V tomto kurzu jste webový server NGINX zabezpečili certifikátem TLS/SSL uloženým v Azure Key Vault. Naučili jste se:

  • Vytvoření služby Azure Key Vault
  • Generování nebo nahrání certifikátu do služby Key Vault
  • Vytvoření virtuálního počítače a instalace webového serveru NGINX
  • Vložte certifikát do virtuálního počítače a nakonfigurujte NGINX pomocí vazby TLS.

Na tomto odkazu najdete předem připravené ukázky skriptů pro virtuální počítače.