Självstudie: Använda TLS/SSL-certifikat för att skydda en webbserver

Gäller för: ✔️ Virtuella Linux-datorer

För att skydda webbservrar, TLS (Transport Layer Security), som tidigare kallades Secure Sockets Layer (SSL), kan certifikat användas för att kryptera webbtrafik. Dessa TLS/SSL-certifikat kan lagras i Azure Key Vault och tillåta säker distribution av certifikat till virtuella Linux-datorer i Azure. I den här guiden får du lära du dig hur man:

  • Skapa ett Azure Key Vault
  • Generera eller ladda upp ett certifikat till Key Vault
  • Skapa en virtuell dator och installera NGINX-webbservern
  • Mata in certifikatet i den virtuella datorn och konfigurera NGINX med en TLS-bindning

I den här självstudien används CLI i Azure Cloud Shell, som ständigt uppdateras till den senaste versionen. Öppna Cloud Shell genom att välja Prova längst upp i ett kodblock.

Om du väljer att installera och använda CLI lokalt kräver den här självstudien att du kör Azure CLI version 2.0.30 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Översikt

Azure Key Vault skyddar krypteringsnycklar och hemligheter, som certifikat och lösenord. Key Vault förenklar certifikathanteringen och låter dig behålla kontrollen över nycklar som kommer åt certifikaten. Du kan skapa ett självsignerat certifikat i Key Vault eller ladda upp ett befintligt, betrott certifikat som du redan äger.

Istället för att använda en anpassad VM-avbildning med inbyggda certifikat matar du in certifikat till en virtuell dator som körs. Den här processen garanterar att de mest uppdaterade certifikaten är installerade på en webbserver under distributionen. Om du förnyar eller ersätter ett certifikat behöver du inte skapa en ny anpassad VM-avbildning. De senaste certifikaten matas in automatiskt när du skapar fler virtuella datorer. Under hela processen lämnar certifikaten aldrig Azure-plattformen och exponeras inte i något skript, kommandoradshistorik eller mall.

Skapa ett Azure Key Vault

Innan du kan skapa ett Key Vault och certifikat skapar du en resursgrupp med az group create. I följande exempel skapas en resursgrupp med namnet myResourceGroupSecureWeb på platsen eastus:

az group create --name myResourceGroupSecureWeb --location eastus

Därefter skapar du ett Key Vault med az keyvault create och aktiverar den för användning när du distribuerar en virtuell dator. För varje Key Vault krävs ett unikt namn som ska skrivas med gemener. Ersätt <mykeyvault> i följande exempel med ditt eget unika Key Vault namn:

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

Generera ett certifikat och lagra det i Key Vault

För produktion bör du importera ett giltigt certifikat som är signerat av en betrodd provider med az keyvault certificate import. För den här självstudien visar följande exempel hur du kan generera ett självsignerat certifikat med az keyvault certificate create som använder standardprincipen för certifikat:

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

Förbereda ett certifikat för användning med en virtuell dator

För att använda certifikatet medan den virtuella datorn skapas ska du hämta certifikatets ID med az keyvault secret list-versions. Konvertera certifikatet med az vm secret format. Följande exempel tilldelar kommandonas resultat till variabler, vilket gör dem enklare att använda i nästa steg:

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)

Skapa en cloud-init-konfiguration för att skydda NGINX

Cloud-init är ett vanligt sätt att anpassa en virtuell Linux-dator när den startas för första gången. Du kan använda cloud-init till att installera paket och skriva filer eller för att konfigurera användare och säkerhet. Eftersom cloud-init körs under den första startprocessen finns det inga extra steg eller obligatoriska agenter för att tillämpa konfigurationen.

När du skapar en virtuella dator lagras certifikat och nycklar i den skyddade katalogen /var/lib/waagent/. Om du vill automatisera tillägg av certifikat till den virtuella datorn och konfigurera webbservern använder du cloud-init. I det här exemplet installerar och konfigurerar du NGINX-webbservern. Du kan använda samma process för att installera och konfigurera Apache.

Skapa en fil med namnet cloud-init-web-server.txt och klistra in följande konfiguration:

#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

Skapa en säker virtuell dator

Skapa nu en virtuell dator med az vm create. Certifikatdata matas in från Key Vault med parametern --secrets. Du skickar in cloud-init-konfigurationen med parametern --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"

Det tar några minuter innan den virtuella datorn skapas, paketen installeras och appen startar. När den virtuella datorn har skapats ska du anteckna publicIpAddress som visas av Azure CLI. Adressen används för att få åtkomst till din webbplats i en webbläsare.

För att låta säker webbtrafik nå din virtuella dator ska du öppna port 443 från Internet med az vm open-port:

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

Testa den säkra webbappen

Nu kan du öppna en webbläsare och ange https://< publicIpAddress> i adressfältet. Ange din offentliga IP-adress från skapandeprocessen av den virtuella datorn. Om du använder ett självsignerat certifikat ska du acceptera säkerhetsvarningen:

Acceptera webbläsarens säkerhetsvarning

Din skyddade NGINX-webbplats visas sedan som i exemplet nedan:

Visa skyddad NGINX-webbplats som körs

Nästa steg

I den här självstudien har du skyddat en NGINX-webbserver med ett TLS/SSL-certifikat som lagras i Azure Key Vault. Du har lärt dig att:

  • Skapa ett Azure Key Vault
  • Generera eller ladda upp ett certifikat till Key Vault
  • Skapa en virtuell dator och installera NGINX-webbservern
  • Mata in certifikatet i den virtuella datorn och konfigurera NGINX med en TLS-bindning

Klicka på den här länken om du vill se inbyggda skriptexempel för virtuella datorer.