Доступ к информации о соединении TLS в прокси-сервере API

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Edge позволяет создавать виртуальные хосты, поддерживающие односторонний и двусторонний TLS. При одностороннем TLS клиент отправляет запрос на сессию виртуальному хосту, развернутому на маршрутизаторе Edge, а маршрутизатор отвечает сертификатом, содержащим открытый ключ виртуального хоста. Для получения подписанного сертификата клиент может затем отправить запрос в центр сертификации (CA) для аутентификации сертификата.

В двустороннем TLS-соединении и клиент, и пограничный сервер передают сертификаты, которые проверяются в рамках запроса:

  • Пограничный маршрутизатор предоставляет свой сертификат TLS-клиенту для аутентификации. Затем клиент проверяет подлинность сервера, прежде чем отправить свой сертификат серверу.
  • TLS-клиент предоставляет свой сертификат Edge для аутентификации.

Дополнительную информацию см. в разделе «О виртуальных хостах» .

Получение информации о TLS-соединении

При отправке запроса к API-прокси через виртуальный хост, поддерживающий TLS, Edge может получить информацию о TLS-соединении. Затем ваш API-прокси может получить доступ к этой информации через переменные потока для выполнения дополнительного анализа и проверки.

Тип информации TLS, захватываемой Edge, зависит от того, поддерживает ли виртуальный хост односторонний или двусторонний TLS. Например, при одностороннем TLS Edge может захватывать информацию о шифре TLS или протоколе TLS, используемом в TLS-соединении.

При двустороннем TLS-соединении Edge может захватывать всю ту же информацию, что и при одностороннем TLS-соединении, а также информацию о сертификате клиента. Например, Edge может захватить отпечаток SHA1 сертификата клиента и сам сертификат клиента в формате PEM.

Сбор информации как для одностороннего, так и для двустороннего TLS-соединения.

В следующей таблице перечислены переменные потока, содержащие информацию о TLS-соединении, полученную Edge и доступную для доступа через API-прокси. Эта информация собирается как для одностороннего, так и для двустороннего TLS путем установки параметра <ConnectionProperties> в значение true в определении виртуального хоста:

Потоковая переменная Описание
tls.cipher Шифр, используемый в TLS-соединении.
tls.protocol Протокол, используемый для TLS-соединения.
tls.server.name Запрошенное имя SNI-сервера.
tls.session.id

Идентификатор сессии.

Эта переменная потока доступна, если вы установите значение <ConnectionProperties> или <ClientProperties> равным true.

Получение дополнительной информации TLS во время двустороннего TLS-соединения.

В следующей таблице перечислены переменные потока, содержащие сведения о клиентском сертификате, полученные Edge в двустороннем TLS-соединении. Эта информация для двустороннего TLS-соединения собирается путем установки <ClientProperties> в значение true в определении виртуального хоста:

Потоковая переменная Описание
tls.client.s.dn Отличительное имя (DN) клиентского сертификата.
tls.client.i.dn Указывающее имя (DN) эмитента клиентского сертификата.
tls.client.raw.cert Сертификат клиента в формате PEM.
tls.client.cert.serial Серийный номер клиентского сертификата.
tls.client.cert.fingerprint SHA1-отпечаток клиентского сертификата.
tls.session.id

Идентификатор сессии.

Эта переменная потока доступна, если вы установите значение <ConnectionProperties> или <ClientProperties> равным true.

Настройка виртуального хоста для захвата информации TLS

Чтобы настроить виртуальный хост на захват информации TLS, установите для следующих свойств в разделе <PropagateTLSInformation> значение true .

  • <ConnectionProperties> : Включить захват информации о TLS-соединении как для одностороннего, так и для двустороннего TLS. Значение по умолчанию — false .
  • <ClientProperties> : Включить сбор дополнительной информации для двустороннего TLS. Значение по умолчанию — false .

Например, следующее определение виртуального хоста использует двусторонний TLS и позволяет захватывать оба типа информации TLS:

<VirtualHost name="secure">
    ....
    <SSLInfo>
        <Enabled>true</Enabled>
        # Enable two-way TLS.
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <IgnoreValidationErrors>false</IgnoreValidationErrors>
        <KeyAlias>ks-alias</KeyAlias>
        <KeyStore>ref://ks-ref</KeyStore>
        <TrustStore>ref://ts-ref</TrustStore>
    </SSLInfo>
    <PropagateTLSInformation>
        <ConnectionProperties>true</ConnectionProperties>
        <ClientProperties>true</ClientProperties>
    </PropagateTLSInformation>
</VirtualHost>

Если вы передаете JSON-тело, установите следующие свойства:

  "propagateTLSInformation" : {
    "connectionProperties" : true,
    "clientProperties" : true
  }

Установите ограничения на размер заголовка.

При включении захвата информации TLS на виртуальном хосте Edge передает эту информацию с помощью HTTP-заголовков. Поэтому необходимо убедиться, что ограничения на размер заголовков установлены соответствующим образом в зависимости от того, используете ли вы Edge для облака или Edge для частного облака:

  • Edge for the Cloud : Apigee устанавливает соответствующие размеры заголовков.
  • Edge для частного облака : функция недоступна.

Доступ к переменным потока в API-прокси

Из вашего API-прокси вы можете получить доступ к переменным потока TLS и просмотреть их. Например, вы можете использовать политику AssignMessage для доступа к ним, или же получить к ним доступ в JavaScript с помощью политики JavaScript.

Вы также можете ссылаться на переменные потока в элементе <Condition> прокси- или целевого потока, или в элементе <Step> или <RouteRule> . Например, вы можете направлять запрос к различным целям в зависимости от серийного номера клиента.

Для получения более подробной информации см.: