Создание самозаверяющего сертификата Шлюза приложений Azure с помощью пользовательского корневого ЦС

Номер SKU Шлюз приложений версии 2 представляет использование доверенных корневых сертификатов для разрешения подключений TLS с внутренними серверами. Эта подготовка удаляет использование сертификатов проверки подлинности (отдельных конечных сертификатов), необходимых в номере SKU версии 1. Корневой сертификат — это закодированный в Base64 корневой сертификат формата X.509(.CER) из внутреннего сервера сертификатов. Он определяет корневой центр сертификации (ЦС), выдавший сертификат сервера. Затем сертификат сервера используется для обмена данными по протоколу TLS/SSL.

Шлюз приложений доверяет сертификату вашего веб-сайта по умолчанию, если он подписан известным центром сертификации (например, GoDaddy или DigiCert). В этом случае вам не нужно явно загружать корневой сертификат. Дополнительные сведения см. в статье Общие сведения о завершении TLS и сквозном подключении TLS с помощью Шлюза приложений. Однако если у вас есть среда разработки и тестирования, и вы не хотите приобрести проверенный сертификат ЦС, подписанный ЦС, можно создать собственный пользовательский корневой ЦС и конечный сертификат, подписанный этим корневым ЦС.

Примечание.

Самогенерированные сертификаты по умолчанию не являются доверенными и могут быть трудно поддерживать. Кроме того, они могут использовать устаревшие хэши и комплекты шифров, которые могут быть ненадежными. Для повышения безопасности приобретите сертификат, подписанный известным центром сертификации.

Для создания частного сертификата для внутренних подключений TLS можно использовать следующие параметры.

  1. Используйте средство генератора частных сертификатов с помощью одного щелчка мыши. Используя предоставленное доменное имя (общее имя), это средство выполняет те же действия, что и описано в этой статье для создания сертификатов root и server. С помощью созданных файлов сертификатов можно немедленно отправить корневой сертификат (. CER- файл в параметр серверной части шлюза и соответствующую цепочку сертификатов (). PFX) на внутренний сервер. Пароль для PFX-файла также предоставляется в скачанный ZIP-файл.

  2. Используйте команды OpenSSL для настройки и создания сертификатов в соответствии с вашими потребностями. Продолжайте следовать инструкциям в этой статье, если вы хотите сделать это полностью самостоятельно.

В этой статье раскрываются следующие темы:

  • создание пользовательского центра сертификации;
  • создание самозаверяющего сертификата, подписанного пользовательским центром сертификации;
  • передача самозаверяющего корневого сертификата в Шлюз приложений для аутентификации внутреннего сервера.

Необходимые компоненты

  • OpenSSL на компьютере под управлением Windows или Linux.

    Хотя для управления сертификатами могут быть доступны и другие инструменты, в этом учебнике используется OpenSSL. OpenSSL поставляется со многими дистрибутивами Linux, например Ubuntu.

  • Веб-сервер.

    Например, Apache, IIS или NGINX для тестирования сертификатов.

  • SKU Шлюза приложений версии 2.

    Если у вас нет существующего шлюза приложений, см. краткое руководство. Прямой веб-трафик с Шлюз приложений Azure — портал Azure.

Создание сертификата корневого ЦС

Создайте сертификат корневого ЦС с помощью OpenSSL.

Создание корневого ключа

  1. Войдите на компьютер, где установлен OpenSSL, и выполните следующую команду. Будет создан зашифрованный ключ.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

Создание корневого сертификата и его самозаверение

  1. Используйте следующую команду, чтобы создать запрос на подпись сертификата (CSR).

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. При появлении запроса введите пароль для корневого ключа и сведения об организации для пользовательского ЦС, такие как страна или регион, штат, организация, подразделение и полное доменное имя (домен издателя).

    create root certificate

  3. Чтобы создать корневой сертификат, используйте следующую команду.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    Предыдущие команды создают корневой сертификат. Вы будете использовать его для подписи сертификата сервера.

Создание сертификата сервера

Далее предстоит создать сертификат сервера с помощью OpenSSL.

Создание ключа сертификата

Используйте следующую команду, чтобы создать ключ для сертификата сервера.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

Создание запроса на подпись сертификата (CSR)

CSR — это открытый ключ, предоставляемый ЦС при запросе сертификата. ЦС выдает сертификат для этого конкретного запроса.

Примечание.

Общее имя (CN) для сертификата сервера должно отличаться от имени домена издателя. Например, в данном случае общее имя издателя www.contoso.com, а сертификата сервера — www.fabrikam.com.

  1. Используйте следующую команду, чтобы создать CSR:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. При появлении запроса введите пароль для корневого ключа и сведения о организации для настраиваемого ЦС: страна или регион, штат, организация, подразделение и полное доменное имя. Это домен веб-сайта — он должен отличаться от издателя.

    Server certificate

Создание сертификата с использованием CSR и ключа, а также подписывание сертификата с помощью корневого ключа ЦС

  1. Используйте следующую команду, чтобы создать сертификат:

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

Проверка созданного сертификата

  1. Используйте следующую команду, чтобы напечатать выходные данные CRT-файла и проверить его содержимое:

    openssl x509 -in fabrikam.crt -text -noout
    

    Certificate verification

  2. Проверьте свой каталог и убедитесь, что в нем есть следующие файлы:

    • contoso.crt;
    • contoso.key;
    • fabrikam.crt;
    • fabrikam.key.

Настройка сертификата в параметрах TLS веб-сервера

На веб-сервере настройте TLS с помощью файлов fabrikam.crt и brikam.key. Если веб-сервер не может принять два файла, их можно объединить в один файл PEM или PFX с помощью команд OpenSSL.

IIS

Инструкции по импорту сертификатов и отправке их в качестве сертификата сервера в IIS см. в статье "Практическое руководство. Установка импортированных сертификатов на веб-сервере в Windows Server 2003".

Инструкции по привязке TLS см. в статье Как настроить SSL для IIS 7.

Apache

Ниже приведен пример конфигурации виртуального узла, настроенного для SSL в Apache:

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

Ниже приведен пример конфигурации серверного блока NGINX с конфигурацией TLS:

NGINX with TLS

Доступ к серверу для проверки конфигурации

  1. Добавьте корневой сертификат в доверенное корневое хранилище компьютера. Войдя на веб-сайт, убедитесь, что в браузере отображается вся цепочка сертификатов.

    Trusted root certificates

    Примечание.

    Предполагается, что DNS настроен для указания имени веб-сервера (в этом примере) www.fabrikam.comна IP-адрес веб-сервера. В противном случае можно изменить файл hosts, чтобы разрешить имя.

  2. Перейдите на свой веб-сайт и щелкните значок замка в поле адреса браузера, чтобы проверить сведения о сайте и сертификате.

Проверка конфигурации с помощью OpenSSL

Для проверки сертификата можно также использовать OpenSSL.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

OpenSSL certificate verification

Передача корневого сертификата в параметры HTTP Шлюза приложений

Чтобы передать сертификат в Шлюз приложений, необходимо экспортировать CRT-сертификат в формат CER с кодировкой Base-64. Поскольку CRT-файл уже содержит открытый ключ в формате Base-64, просто измените расширение файла с CRT на CER.

Портал Azure

Чтобы отправить доверенный корневой сертификат на портале, выберите серверную Параметры и выберите HTTPS в протоколе серверной части.

Screenshot of adding a certificate using the portal.

Azure PowerShell

Для отправки корневого сертификата можно также использовать Azure CLI или Azure PowerShell. Следующий код является примером для Azure PowerShell.

Примечание.

В следующем примере в шлюз приложений добавляется доверенный корневой сертификат, создается новый параметр HTTP и добавляется новое правило (предполагается, что серверный пул и прослушиватель уже существуют).

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

## Get the listener, backend pool and probe

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

## Get the configuration and update the Application Gateway

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Set-AzApplicationGateway -ApplicationGateway $gw

Проверка работоспособности серверной части шлюза приложений

  1. Выберите представление Оценка работоспособности серверной части вашего шлюза приложений, чтобы проверить работоспособность пробы.
  2. Для пробы HTTPS должно отображаться состояние Работоспособна.

HTTPS probe

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

Чтобы узнать больше о протоколе SSL/TLS в Шлюзе приложений, см. статью Общие сведения о завершении TLS и сквозном подключении TLS с помощью Шлюза приложений.