Partilhar via


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

Aplica-se a: ✔️ Linux VMs

Para proteger servidores Web, um certificado TLS (Transport Layer Security), anteriormente conhecido como SSL (Secure Sockets Layer), pode ser usado para criptografar o tráfego da Web. Esses certificados TLS/SSL podem ser armazenados no Cofre de Chaves do Azure e permitir implantações seguras de certificados em máquinas virtuais (VMs) 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
  • Injete o certificado na VM e configure o NGINX com uma ligação TLS

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

Se você optar por instalar e usar a CLI localmente, este tutorial exigirá que você esteja executando a CLI do Azure versão 2.0.30 ou posterior. 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 injetados automaticamente à medida que você 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 nome exclusivo do seu Key Vault:

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. Como o cloud-init é executado durante o processo de inicialização inicial, não há etapas extras ou agentes necessários para aplicar 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 você pode abrir um navegador da Web e digitar 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

Próximos passos

Neste tutorial, você protegeu um servidor Web NGINX com um certificado TLS/SSL armazenado no Cofre da Chave do Azure. 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
  • Injete o certificado na VM e configure o NGINX com uma ligação TLS

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