Delen via


Zelfstudie: TLS/SSL-certificaten gebruiken om een webserver te beveiligen

Van toepassing op: ✔️ Virtuele Linux-machines

Om webservers te beveiligen, kan een Transport Layer Security-certificaat (TLS), voorheen bekend als Secure Sockets Layer (SSL), worden gebruikt voor het versleutelen van internetverkeer. Deze TLS/SSL-certificaten kunnen worden opgeslagen in Azure Key Vault en beveiligde implementaties van certificaten aan virtuele Linux-machines (VM's) in Azure toestaan. In deze zelfstudie leert u het volgende:

  • Een Azure Key Vault maken
  • Een certificaat genereren of uploaden naar de Key Vault
  • Een virtuele machine maken en de NGINX-webserver installeren
  • Het certificaat invoeren in de virtuele machine en NGINX configureren met een TLS-binding

In deze zelfstudie wordt gebruikgemaakt van de CLI in de Azure Cloud Shell, die voortdurend wordt bijgewerkt naar de nieuwste versie. Als u de Cloud Shell wilt openen, selecteert u Probeer het bovenaan een willekeurig codeblok.

Als u ervoor kiest om de CLI lokaal te installeren en te gebruiken, moet u voor deze zelfstudie versie 2.0.30 of hoger van Azure CLI uitvoeren. Voer az --version uit om de versie te vinden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Overzicht

Azure Key Vault beschermt cryptografische sleutels en geheimen, zoals certificaten of wachtwoorden. Key Vault helpt het beheerproces voor certificaten te stroomlijnen en zorgt dat u de controle houdt over de sleutels waarmee deze certificaten toegankelijk zijn. U kunt een zelfondertekend certificaat in Key Vault maken of een bestaand, vertrouwd certificaat dat u al bezit uploaden.

In plaats van een aangepaste VM-installatiekopieën te gebruiken die certificaten bevat die zijn ingebouwd, injecteert u certificaten in een actieve VM. Dit proces zorgt ervoor dat de meest recente certificaten tijdens de implementatie op een webserver zijn geïnstalleerd. Als u een certificaat verlengt of vervangt, hoeft u geen nieuwe aangepaste VM-installatiekopieën te maken. De meest recente certificaten worden automatisch geïnjecteerd wanneer u meer VM's maakt. Tijdens het hele proces verlaten de certificaten nooit het Azure-platform of worden ze weergegeven in een script, opdrachtregelgeschiedenis of sjabloon.

Een Azure Key Vault maken

Voordat u een Key Vault en certificaten kunt maken, maakt u een resourcegroep met az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroupSecureWeb gemaakt op de locatie eastus :

az group create --name myResourceGroupSecureWeb --location eastus

Maak vervolgens een Key Vault met az keyvault create en schakel deze in voor gebruik wanneer u een VIRTUELE machine implementeert. Elke Sleutelkluis vereist een unieke naam en moet allemaal kleine letters bevatten. Vervang <mykeyvault> in het volgende voorbeeld door uw eigen unieke Key Vault-naam:

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

Een certificaat genereren en opslaan in Key Vault

Voor productiegebruik moet u een geldig certificaat importeren dat is ondertekend door een vertrouwde provider met az keyvault certificate import. Voor deze zelfstudie ziet u in het volgende voorbeeld hoe u een zelfondertekend certificaat kunt genereren met az keyvault certificate create dat gebruikmaakt van het standaardcertificaatbeleid:

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

Een certificaat voorbereiden voor gebruik met een VIRTUELE machine

Als u het certificaat wilt gebruiken tijdens het maken van de VM, haalt u de id van uw certificaat op met az keyvault secret list-versions. Converteer het certificaat met az vm secret format. Het volgende voorbeeld wijst de uitvoer van deze opdrachten toe aan variabelen voor eenvoudig gebruik in de volgende stappen:

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)

Een cloud-init-configuratie maken om NGINX te beveiligen

Cloud-init is een veelgebruikte benadering om een Virtuele Linux-machine aan te passen terwijl deze voor het eerst wordt opgestart. U kunt cloud-init gebruiken voor het installeren van pakketten en schrijven van bestanden, of om gebruikers en beveiliging te configureren. Wanneer cloud-init wordt uitgevoerd tijdens het eerste opstartproces, zijn er geen extra stappen of vereiste agents om uw configuratie toe te passen.

Wanneer u een virtuele machine maakt, worden certificaten en sleutels opgeslagen in de beveiligde map /var/lib/waagent/ . Gebruik cloud-init om het toevoegen van het certificaat aan de VIRTUELE machine en het configureren van de webserver te automatiseren. In dit voorbeeld installeert en configureert u de NGINX-webserver. U kunt hetzelfde proces gebruiken om Apache te installeren en te configureren.

Maak een bestand met de naamcloud-init-web-server.txt en plak de volgende configuratie:

#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

Een beveiligde VM maken

Maak nu een VIRTUELE machine met az vm create. De certificaatgegevens worden vanuit Key Vault geïnjecteerd met de --secrets parameter. U geeft de cloud-init-configuratie door met de --custom-data parameter:

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"

Het duurt enkele minuten voordat de virtuele machine is gemaakt, de pakketten zijn geïnstalleerd en de app wordt gestart. Wanneer de virtuele machine is gemaakt, let u op de publicIpAddress zoals weergegeven door de Azure CLI. Dit adres wordt gebruikt voor toegang tot uw site in een webbrowser.

Open poort 443 vanaf internet met az vm open-port om veilig webverkeer mogelijk te maken bij uw virtuele machine:

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

De beveiligde web-app testen

U kunt nu een webbrowser openen en https://< publicIpAddress> invoeren in de adresbalk. Geef uw eigen openbare IP-adres op bij het maken van een virtuele machine. Accepteer de beveiligingswaarschuwing als u een zelfondertekend certificaat hebt gebruikt:

Beveiligingswaarschuwing van webbrowser accepteren

Uw beveiligde NGINX-site wordt vervolgens weergegeven zoals in het volgende voorbeeld:

Beveiligde NGINX-site weergeven

Volgende stappen

In deze zelfstudie hebt u een NGINX-webserver beveiligd met een TLS/SSL-certificaat dat is opgeslagen in Azure Key Vault. U hebt geleerd hoe u het volgende kunt doen:

  • Een Azure Key Vault maken
  • Een certificaat genereren of uploaden naar de Key Vault
  • Een virtuele machine maken en de NGINX-webserver installeren
  • Het certificaat invoeren in de virtuele machine en NGINX configureren met een TLS-binding

Volg deze koppeling om vooraf gemaakte scriptvoorbeelden voor virtuele machines te bekijken.