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), tidigare kallat 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äkra distributioner av certifikat till virtuella Linux-datorer i Azure. I den här självstudiekursen får du lära du 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
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 alla 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 <mittkeyvault> 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 inledande startprocessen finns det inga extra steg eller nödvändiga 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:
Din skyddade NGINX-webbplats visas sedan som i exemplet nedan:
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.