Поделиться через


Руководство. Защита веб-сервера с помощью TLS/SSL-сертификатов

Область применения: ✔️ виртуальные машины Linux

Чтобы защитить веб-серверы, для шифрования веб-трафика можно использовать протокол TLS, который ранее назывался протоколом SSL. TLS/SSL-сертификаты могут храниться в Azure Key Vault и разрешать безопасное развертывание сертификатов на виртуальных машинах Linux в Azure. Из этого руководства вы узнаете, как выполнить следующие задачи:

  • создать Azure Key Vault;
  • создать или передать сертификат в Key Vault;
  • создание виртуальной машины и установка веб-сервера NGINX;
  • внедрение сертификата в виртуальную машину и настройка NGINX с помощью TLS-привязки.

При работе с этим руководством используется интерфейс командной строки (CLI) в Azure Cloud Shell, который всегда обновлен до последней версии. Чтобы открыть Cloud Shell, выберите Попробовать в верхнем углу любого блока кода.

Если вы решили установить и использовать интерфейс командной строки локально, в этом руководстве требуется, чтобы вы работали с Azure CLI версии 2.0.30 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Обзор

Azure Key Vault защищает криптографические ключи и секреты, в том числе сертификаты и пароли. Key Vault помогает оптимизировать управление сертификатами и позволяет контролировать ключи, которые предоставляют доступ к этим сертификатам. Можно создать самозаверяющий сертификат в Key Vault или передать существующий доверенный сертификат.

Вместо того чтобы использовать образ виртуальной машины, включающий встроенные сертификаты, можно внедрить сертификаты в работающую виртуальную машину. Этот процесс гарантирует установку на веб-сервер самых последних сертификатов во время развертывания. Если вы обновляете или заменяете сертификат, вам не нужно создавать новый пользовательский образ виртуальной машины. Последняя версия сертификатов автоматически внедряется при создании дополнительных виртуальных машин. При этом сертификат никогда не покидает платформу Azure и не отображается в скрипте, журнале командной строки или шаблоне.

создать Azure Key Vault;

Прежде чем создать Key Vault и сертификаты, выполните командлет az group create, чтобы создать группу ресурсов. В следующем примере создается группа ресурсов с именем myResourceGroupSecureWeb в расположении eastus:

az group create --name myResourceGroupSecureWeb --location eastus

Затем создайте Key Vault с помощью az keyvault create и включите его использование при развертывании виртуальной машины. У каждого хранилища ключей должно быть уникальное имя в нижнем регистре. Замените <mykeyvault> в следующем примере собственным уникальным именем Key Vault.

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

Создание сертификата и его сохранение в Key Vault

Для использования в рабочей среде следует импортировать действительный сертификат, подписанный доверенным поставщиком, выполнив команду az keyvault certificate import. В следующем примере в этом руководстве показано, как можно командой az keyvault certificate create создать самозаверяющий сертификат, использующий политику сертификата по умолчанию.

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

Подготовка сертификата для использования с виртуальной машиной

Чтобы использовать сертификата во время создания виртуальной машины, получите идентификатор сертификата, выполнив команду az keyvault secret list-versions. Преобразуйте сертификат, выполнив команду az vm secret format. Следующий пример присваивает переменным результаты этих команд, чтобы их было удобно использовать в дальнейшем.

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)

Создание конфигурации cloud-init для защиты сервера NGINX

Пакет cloud-init — широко используемое средство, используемое для настройки виртуальной машины Linux при ее первой загрузке. Вы можете использовать cloud-init для установки пакетов, записи файлов или настройки пользователей и параметров безопасности. При запуске cloud-init во время начального процесса загрузки нет дополнительных шагов или необходимых агентов для применения конфигурации.

При создании виртуальной машины сертификаты и ключи хранятся в защищенном каталоге /var/lib/waagent/. Используйте cloud-init, чтобы автоматизировать добавление сертификата виртуальной машины и настройку веб-сервера. В этом примере вы установите и настроите веб-сервер NGINX. Этот же процесс можно использовать для установки и настройки Apache.

Создайте файл cloud-init-web-server.txt и вставьте в него приведенную ниже конфигурацию:

#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

Создание защищенной виртуальной машины

Теперь создайте виртуальную машину командой az vm create. Данные сертификата внедряются из Key Vault с помощью параметра --secrets. Передайте конфигурацию cloud-init с параметром --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"

На создание виртуальной машины, установку пакетов и запуск приложения может потребоваться несколько минут. Когда виртуальная машина будет создана, запишите значение publicIpAddress, отображаемое Azure CLI. Этот адрес используется для доступа к сайту в веб-браузере.

Чтобы разрешить безопасную передачу веб-трафика для виртуальной машины, откройте порт 443 для Интернета командой az vm open-port.

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

Тестирование защищенного веб-приложения

Теперь можно открыть веб-браузер и ввести в адресной строке https://<publicIpAddress>. Укажите собственный общедоступный IP-адрес, настроенный при создании виртуальной машины. Если используется самозаверяющий сертификат, ответьте согласием на предупреждение системы безопасности.

Принятие предупреждения о безопасности веб-браузера

На экране отобразится защищенный веб-сайт NGINX, как в показано следующем примере:

Просмотр работающего защищенного сайта NGINX

Следующие шаги

Следуя указаниям этого учебника, вы защитили веб-сервер NGINX TLS/SSL-сертификатом, который хранится в Azure Key Vault. Вы научились выполнять следующие задачи:

  • создать Azure Key Vault;
  • создать или передать сертификат в Key Vault;
  • создание виртуальной машины и установка веб-сервера NGINX;
  • внедрение сертификата в виртуальную машину и настройка NGINX с помощью TLS-привязки.

Чтобы увидеть предварительно созданные примеры скриптов виртуальной машины, перейдите по ссылке ниже.