Tutorial: Utilizar certificados TLS/SSL para proteger um servidor Web

Aplica-se a: ✔️ VMs do Linux

Para proteger os servidores Web, um certificado TLS (Transport Layer Security), anteriormente conhecido como Secure Sockets Layer (SSL), pode ser utilizado para encriptar o tráfego Web. Estes certificados TLS/SSL podem ser armazenados no Azure Key Vault e permitir implementações seguras de certificados em máquinas virtuais (VMs) do Linux no Azure. Neste tutorial, ficará a saber como:

  • Criar um Azure Key Vault
  • Gerar ou carregar um certificado para o Key Vault
  • Criar uma VM e instalar o servidor Web NGINX
  • Injetar o certificado na VM e configurar o NGINX com um enlace TLS

Este tutorial utiliza a CLI na Cloud Shell do Azure, que é constantemente atualizada para a versão mais recente. Para abrir o Cloud Shell, selecione Experimentar na parte superior de qualquer bloco de código.

Se optar por instalar e utilizar a CLI localmente, este tutorial requer que esteja a executar a versão 2.0.30 ou posterior da CLI do Azure. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Descrição Geral

O Azure Key Vault salvaguarda as chaves criptográficas e os segredos, como os certificados ou as palavras-passe. O Key Vault ajuda a simplificar o processo de gestão de chaves e permite-lhe manter o controlo das chaves que acedem a esses certificados. Pode criar um certificado autoassinado no Key Vault ou carregar um certificado fidedigno que já possui.

Em vez de utilizar uma imagem de VM personalizada, que inclua certificados integrados, pode inserir certificados numa VM em execução. Este processo garante que são instalados os certificados mais atualizados num servidor Web durante a implementação. Se renovar ou substituir um certificado, também não tem de criar uma nova imagem de VM personalizada. Os certificados mais recentes são automaticamente injetados à medida que cria mais VMs. Durante todo o processo, os certificados nunca saem da plataforma do Azure nem são expostos num script, histórico de linha de comandos ou modelo.

Criar um Azure Key Vault

Para poder criar um Key Vault e certificados, crie primeiro um grupo de recursos com az group create. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroupSecureWeb na localização eastus:

az group create --name myResourceGroupSecureWeb --location eastus

Em seguida, crie um Key Vault com az keyvault create e ative-o para utilização quando implementar uma VM. Cada Key Vault requer um nome exclusivo com todas as letras minúsculas. Substitua <mykeyvault> no exemplo seguinte pelo seu próprio nome de Key Vault exclusivo:

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

Gerar um certificado e armazená-lo no Key Vault

Para efeitos de produção, deve importar um certificado válido assinado por um fornecedor fidedigno com az keyvault certificate import. Para este tutorial, o exemplo seguinte mostra como pode gerar um certificado autoassinado com az keyvault certificate create que utiliza a política de certificado predefinida:

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

Preparar um certificado para utilização numa VM

Para utilizar o certificado durante o processo de criação da VM, obtenha o ID do certificado com az keyvault secret list-versions. Converta o certificado com az vm secret format. O exemplo seguinte atribui o resultado destes comandos a variáveis para uma utilização mais fácil nos passos que se seguem:

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)

Criar uma configuração cloud-init para proteger o NGINX

Cloud-init é uma abordagem amplamente utilizada para personalizar uma VM com Linux quando arranca pela primeira vez. Pode utilizar o cloud-init para instalar pacotes e escrever ficheiros ou para configurar utilizadores e segurança. À medida que o cloud-init é executado durante o processo de arranque inicial, não existem passos adicionais ou agentes necessários para aplicar a sua configuração.

Quando criar uma VM, os certificados e as chaves são armazenados no diretório /var/lib/waagent/ protegido. Para automatizar a adição do certificado à VM e configurar o servidor Web, utilize o cloud-init. Neste exemplo, vai instalar e configurar o servidor Web NGINX. Pode utilizar o mesmo processo para instalar e configurar o Apache.

Crie um ficheiro com o nome cloud-init-web-server.txt e cole a seguinte configuração:

#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

Criar uma VM segura

Agora, crie uma VM com az vm create. Os dados do certificado são inseridos a partir do Key Vault com o parâmetro --secrets. Transmite a configuração de cloud-init com o parâmetro --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"

Demora alguns minutos até a VM ser criada, os pacotes serem instalados e a aplicação ser iniciada. Quando a VM tiver sido criada, tome nota do publicIpAddress apresentado pela CLI do Azure. Este endereço é utilizado para aceder ao seu site num browser.

Para permitir que o tráfego da Web seguro aceda à VM, abra a porta 443 a partir da Internet com az vm open-port:

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

Testar a aplicação Web segura

Agora, pode abrir um browser e introduzir https://< publicIpAddress> na barra de endereço. Forneça o seu próprio endereço IP público a partir do processo de criação da VM. Aceite o aviso de segurança se utilizou um certificado autoassinado:

Aceitar o aviso de segurança do browser

O site NGINX protegido é apresentado como no exemplo seguinte:

Ver site NGINX seguro em execução

Passos seguintes

Neste tutorial, garantiu um servidor Web NGINX com um certificado TLS/SSL armazenado no Azure Key Vault. Aprendeu a:

  • Criar um Azure Key Vault
  • Gerar ou carregar um certificado para o Key Vault
  • Criar uma VM e instalar o servidor Web NGINX
  • Injetar o certificado na VM e configurar o NGINX com um enlace TLS

Siga esta ligação para ver os exemplos de scripts de máquina virtual pré-criados.