Подключение к защищенной службе с помощью обратного прокси-сервера

В этой статье объясняется, как установить безопасное подключение между обратным прокси-сервером и службами, которое будет использоваться в качестве защищенного сквозного канала. Дополнительные сведения об обратном прокси-сервере, см. в разделе Обратный прокси-сервер в Azure Service Fabric.

Важно!

Подключение к защищенным службам поддерживается, только если обратный прокси-сервер настроен для прослушивания по протоколу HTTPS. В этой статье предполагается, что это так. Сведения о настройке обратного прокси-сервера в Azure Service Fabric см. в разделе Setup reverse proxy in Azure Service Fabric (Настройка обратного прокси-сервера в Azure Service Fabric).

Установление безопасного подключения между обратным прокси-сервером и службами

Обратный прокси-сервер проходит аутентификацию в службах

Обратный прокси-сервер идентифицирует себя в службах с помощью своего сертификата. Для кластеров Azure сертификат указывается с помощью свойства rReverseProxyCertificate ресурса Microsoft.ServiceFabric/clusters в разделе типов ресурсов шаблона Resource Manager. Для автономных кластеров сертификат указывается с помощью свойства ReverseProxyCertificate_ или _ReverseProxyCertificateCommonNames_ в разделе _Security файла ClusterConfig.json. Дополнительные сведения см. в разделе Enable reverse proxy on standalone clusters (Включение обратного прокси-сервера в автономных кластерах).

Службы могут реализовать логику для проверки сертификата, представленного обратным прокси-сервером. Службы могут указывать сведения о принятом сертификате клиента как параметры конфигурации в пакете конфигурации. Их можно считывать во время выполнения и использовать для проверки сертификата, представленного обратным прокси-сервером. Сведения о добавлении параметров конфигурации см. в статье Управление параметрами приложения.

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

Для выполнения проверки сертификатов, представленных службами, обратный прокси-сервер поддерживает следующие политики: None, ServiceCommonNameAndIssuer и ServiceCertificateThumbprints. Чтобы выбрать политику для обратного прокси-сервера, задайте свойство ApplicationCertificateValidationPolicy в разделе ApplicationGateway/Http в fabricSettings.

В следующем разделе приведены сведения о конфигурации для каждого из этих вариантов.

Параметры проверки сертификата службы

  • None: обратный прокси-сервер пропускает проверку сертификата службы, подключаемой через прокси-сервер, и устанавливает безопасное подключение. Это поведение установлено по умолчанию. Задайте для свойства ApplicationCertificateValidationPolicy значение None в разделе ApplicationGateway/Http.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "None"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCommonNameAndIssuer: обратный прокси-сервер проверяет сертификат, представленный службой, на основании общего имени сертификата и отпечатка непосредственного издателя. Задайте для свойства ApplicationCertificateValidationPolicy значение ServiceCommonNameAndIssuer в разделе ApplicationGateway/Http.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "ServiceCommonNameAndIssuer"
                   }
                 ]
               }
             ],
             ...
    }
    

    Чтобы указать список общих имен служб и отпечатков издателей, добавьте раздел ApplicationGateway/Http/ServiceCommonNameAndIssuer в fabricSettings, как показано ниже. В массив parameters можно добавить несколько пар общих имен сертификатов и отпечатков издателей.

    Если обратный прокси-сервер конечной точки подключается для представления сертификата, общее имя и отпечаток издателя которого соответствуют любому из указанных в элементе значений, создается TLS-подключение. Если соответствие для сведений о сертификате не найдено, обратный прокси-сервер не выполняет запрос клиента с кодом состояния 502 (неверный шлюз). В строке состояния HTTP также будет содержаться фраза "Недопустимый сертификат SSL".

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http/ServiceCommonNameAndIssuer",
                 "parameters": [
                   {
                     "name": "WinFabric-Test-Certificate-CN1",
                     "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 b4 22 11"
                   },
                   {
                     "name": "WinFabric-Test-Certificate-CN2",
                     "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 11 33 44"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCertificateThumbprints: обратный прокси-сервер будет проверять сертификат службы на основе отпечатка. Вы можете выбрать этот вариант, если для служб настроены самозаверяющие сертификаты: задайте для свойства ApplicationCertificateValidationPolicy значение ServiceCertificateThumbprints в разделе ApplicationGateway/Http.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "ServiceCertificateThumbprints"
                   }
                 ]
               }
             ],
             ...
    }
    

    Также укажите отпечатки с помощью записи ServiceCertificateThumbprints в разделе ApplicationGateway/Http. Можно указать несколько отпечатков в виде списка с разделителями-запятыми в поле значения, как показано ниже:

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                     ...
                   {
                     "name": "ServiceCertificateThumbprints",
                     "value": "78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 bf,78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 b9"
                   }
                 ]
               }
             ],
             ...
    }
    

    Если отпечаток сертификата сервера содержится в этой записи конфигурации, обратный прокси-сервер успешно устанавливает TLS-подключение. В противном случае — он завершает подключение и не выполняет запроса клиента с ошибкой 502 (неверный шлюз). В строке состояния HTTP также будет содержаться фраза "Недопустимый сертификат SSL".

Логика выбора конечной точки, когда службы предоставляют защищенные и незащищенные конечные точки

Service Fabric поддерживает настройку нескольких конечных точек для службы. Дополнительные сведения см. в статье Указание ресурсов в манифесте службы.

Обратный прокси-сервер выбирает одну из конечных точек для пересылки запросов в зависимости от значения параметра запроса ListenerName в URI службы. Если параметр ListenerName не указан, обратный прокси-сервер может выбрать любую конечную точку из списка. В зависимости от конечных точек, настроенных для службы, это может быть конечная точка HTTP или HTTPS. Могут существовать сценарии или требования, когда нужно, чтобы обратный прокси-сервер работал в режиме "только для защиты", то есть защищенный обратный прокси-сервер не должен пересылать запросы в незащищенные конечные точки. Чтобы настроить для обратного прокси-сервера работу в режиме только для защиты, укажите запись конфигурации SecureOnlyMode со значением true в разделе ApplicationGateway/Http.

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
                ...
              {
                "name": "SecureOnlyMode",
                "value": true
              }
            ]
          }
        ],
        ...
}

Примечание

При работе в режиме SecureOnlyMode, если клиент указал значение ListenerName, соответствующее конечной точке HTTP (незащищенной), обратный прокси-сервер не выполняет запрос с кодом состояния HTTP 404 (не найдено).

Настройка проверки подлинности сертификата клиента через обратный прокси-сервер

Разрыв TLS-подключения выполняется на обратном прокси-сервере, и все данные сертификата клиента утрачиваются. Чтобы службы могли выполнять аутентификацию на основе сертификата клиента, задайте параметр ForwardClientCertificate в разделе ApplicationGateway/Http.

  1. Если для параметра ForwardClientCertificate задано значение false, обратный прокси-сервер не будет запрашивать сертификат клиента во время подтверждения TLS. Это поведение установлено по умолчанию.

  2. Если для параметра ForwardClientCertificate задано значение true, обратный прокси-сервер запрашивает сертификат клиента во время подтверждения TLS. Затем он пересылает данные сертификата клиента в пользовательский заголовок HTTP с именем X-Client-Certificate. Значение заголовка является строкой формата PEM в кодировке base64 сертификата клиента. Служба может успешно или неудачно выполнить запрос с соответствующим кодом состояния после проверки данных сертификата. Если клиент не представляет сертификат, обратный прокси-сервер пересылает пустой заголовок и передает принятие решения службе.

Примечание

Обратный прокси-сервер выступает только в качестве службы пересылки. Он не выполняет проверку сертификата клиента.

Дальнейшие действия