Как получить информацию о подключении TLS в прокси-сервере API

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

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

При двустороннем TLS клиент и Edge передают сертификаты, которые проверяются в рамках запроса:

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

Подробнее о виртуальных хостах…

Как получить информацию о подключении TLS

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

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

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

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

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

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

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

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

Как собирать дополнительную информацию TLS при двустороннем TLS

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

Переменная потока Описание
tls.client.s.dn Уникальное имя субъекта клиентского сертификата.
tls.client.i.dn Уникальное имя эмитента сертификата клиента.
tls.client.raw.cert Сертификат клиента в формате PEM.
tls.client.cert.serial Серийный номер сертификата клиента.
tls.client.cert.fingerprint Отпечаток SHA1 сертификата клиента.
tls.session.id

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

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

Как настроить виртуальный хост для сбора информации о TLS

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

  • <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>. Например, вы можете направлять запрос к разным целевым объектам в зависимости от серийного номера клиента.

Дополнительная информация приведена в следующих статьях: