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


Руководство. Использование 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

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

az group create --name myResourceGroupSecureWeb --location eastus

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

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. Следующий пример присваивает переменным результаты этих команд, чтобы их было удобно использовать в дальнейшем.

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-привязки.

Перейдите по этой ссылке, чтобы просмотреть готовые примеры скриптов виртуальной машины.