Настройка доступа TLS к API для частного облака

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

Виртуальный хост в Edge определяет домены и порты, на которых доступен прокси-сервер API, и, как следствие, URL-адрес, который приложения используют для доступа к прокси-серверу API.

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

Узнать больше:

Что нужно для создания виртуального хоста

Прежде чем создавать виртуальный хост, у вас должна быть следующая информация:

  • Общедоступное доменное имя виртуального хоста. Например, вы должны знать, является ли публичное имя api.myCompany.com , myapi.myCompany.com и т. д. Эта информация используется при создании виртуального хоста, а также при создании записи DNS для виртуального хоста.
  • Для одностороннего TLS вам необходимо создать хранилище ключей, в котором хранилище ключей будет содержать следующее:
    • Сертификат TLS — либо сертификат, подписанный центром сертификации (ЦС), либо цепочка сертификатов, в которой последний сертификат подписан ЦС.
    • Закрытый ключ — Edge поддерживает размеры ключей до 2048 бит. Парольная фраза не является обязательной.
  • Для двустороннего TLS вам необходимо хранилище ключей и хранилище доверенных сертификатов для хранения сертификата клиента и, при необходимости, цепочки ЦС сертификата. Вам понадобится хранилище доверенных сертификатов, даже если сертификат подписан центром сертификации.

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

Конфигурация виртуального хоста для TLS

Чтобы создать виртуальный хост, создайте объект XML, который определяет виртуальный хост. Следующий объект XML использует элемент <SSLInfo> для определения виртуального хоста для односторонней конфигурации TLS через HTTPS:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

В этом примере для элемента <Enabled> установлено значение true, чтобы включить односторонний TLS, а элементы <KeyStore> и < KeyAlias> указывают хранилище ключей и ключ, используемые соединением TLS.

Чтобы включить двусторонний TLS, задайте для элемента <ClientAuthEnabled> значение true и укажите хранилище доверенных сертификатов с помощью элемента <TrustStore> . В хранилище доверенных сертификатов хранится сертификат клиента и, при необходимости, цепочка ЦС сертификата.

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

В приведенном выше примере виртуального хоста вы указали хранилище ключей, используя ссылку . Ссылка — это переменная, которая содержит имя хранилища ключей, а не указывает имя хранилища ключей напрямую.

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

Альтернативно вы можете использовать буквальное имя хранилища ключей на виртуальном хосте. Однако если вы когда-либо измените виртуальный хост, чтобы изменить имя хранилища ключей, вам придется перезапустить пограничные маршрутизаторы.

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

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

  • Вы можете использовать ссылки на хранилище ключей и хранилище доверенных сертификатов на виртуальных хостах только в том случае, если вы поддерживаете SNI и отключили SSL на маршрутизаторах Apigee.
  • Если у вас есть балансировщик нагрузки перед маршрутизаторами Apigee и вы завершаете TLS на балансировщике нагрузки, вы не можете использовать ссылки на хранилище ключей и хранилище доверенных сертификатов на виртуальных хостах.

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

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

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

Настройка шифров и протоколов TLS для Edge 4.15.07 и более ранних версий

Если вы используете Edge версии 4.15.07 и более ранних версий, вы устанавливаете протокол TLS и шифры, используемые виртуальным хостом, с помощью дочерних тегов <Ciphers> и <Protocols> тега <SSLInfo> . Эти теги описаны в таблице ниже.

Например:

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

Тег <Cipher> использует имя шифра Java и JSSE. Например, для Java 8 см. http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites .

Указание шифров и протоколов TLS для Edge с 4.16.01 по 4.16.09.

В Edge с 4.16.01 по 4.16.09 вы устанавливаете шифры и протоколы по умолчанию для виртуальных хостов глобально на маршрутизаторе. Эти значения по умолчанию применяются ко всем виртуальным хостам.

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

  • Чтобы указать протоколы по умолчанию, используйте токен conf_load_balancing_load.balancing.driver.server.ssl.protocols .
  • Чтобы указать шифры по умолчанию для Маршрутизатора, используйте токен conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Значение токена conf_load_balancing_load.balancing.driver.server.ssl.protocols по умолчанию:

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

Этот параметр указывает, что маршрутизатор поддерживает TLS версий 1.0, 1.1 и 1.2. Укажите список значений, разделенных пробелами, для токена.

Значение токена conf_load_balancing_load.balancing.driver.server.ssl.ciphers по умолчанию:

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

Этот параметр определяет:

  • Требуется длина ключа 128 бит или более ( HIGH ).
  • Исключить шифры без аутентификации ( !aNULL )
  • Исключить наборы шифров с помощью MD5 ( !MD5 )
  • Исключить наборы шифров, использующие DH (включая анонимный DH, эфемерный DH и фиксированный DH) И тройной DES ( !DH+3DES ).
  • Исключить наборы шифров с использованием обмена ключами RSA И тройного DES ( !RSA+3DES )

Информацию о синтаксисе и значениях, допустимых этим токеном, см. в разделе Шифры OpenSSL . Обратите внимание, что этот токен использует имена шифров OpenSSL, например AES128-SHA256, а не имена шифров Java/JSSE, например TLS_RSA_WITH_AES_128_CBC_SHA256.

Чтобы установить токен для маршрутизатора:

  1. Отредактируйте файл /opt/apigee/customer/application/router.properties . Если этот файл не существует, создайте его.
  2. Установите токен conf_load_balancing_load.balancing.driver.server.ssl.ciphers . Например, чтобы указать только TLSv1.2 и исключить наборы шифров с использованием предварительных общих ключей, добавьте !PSK :
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. Убедитесь, что файл router.properties принадлежит apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Перезапустите Edge Router:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Проверьте стоимость токена:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Настройка параметров виртуального хоста TLS для Edge версии 4.17.01 и более поздних версий

Если вы используете Edge версии 4.17.01 и более поздних версий, вы можете установить некоторые свойства TLS для отдельного виртуального хоста, например протокол и шифр TLS, с помощью дочернего тега <Properties> тега <VirtualHost> . Эти теги описаны в разделе «Справочник по свойствам виртуального хоста» .

Например:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

Информацию о синтаксисе и значениях, допустимых токеном ssl_ciphers , см. в разделе Шифры OpenSSL . Обратите внимание, что этот токен использует имена шифров OpenSSL, например AES128-SHA256, а не имена шифров Java/JSSE, например TLS_RSA_WITH_AES_128_CBC_SHA256.

Создание виртуального хоста, использующего HTTPS

В этом примере указывается хранилище ключей для виртуального хоста с помощью ссылки. Использование ссылки позволяет изменить хранилище ключей без перезапуска маршрутизаторов.

Используйте следующую процедуру для создания виртуального хоста:

  1. Создайте и настройте хранилище ключей с именем myTestKeystore, используя процедуру, описанную здесь: Хранилища ключей и хранилища доверенных сертификатов . Убедитесь, что хранилище ключей использует псевдоним myKeyAlias ​​для сертификата и закрытого ключа.
  2. Используйте следующий вызов POST API, чтобы создать ссылку с именем keystoreref на хранилище ключей, созданное вами выше:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    В ссылке указывается имя хранилища ключей и тип ссылки KeyStore .

    Для просмотра ссылки используйте следующий вызов GET API:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Создайте виртуальный хост с помощью API создания виртуального хоста , где <ms-IP> — это IP-адрес или доменное имя узла сервера управления.

    Обязательно укажите правильную ссылку на хранилище ключей и псевдоним ключа:

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. Создайте запись DNS для виртуального хоста, соответствующую псевдониму хоста.
  5. Если у вас есть существующие прокси-серверы API, добавьте виртуальный хост в элемент <HTTPConnection> в ProxyEndpoint. Виртуальный хост автоматически добавляется ко всем новым прокси-серверам API.

    См. Обновление прокси-сервера API после создания виртуального хоста в разделе О виртуальных хостах .

После обновления прокси-сервера API для использования виртуального хоста и создания записи DNS для псевдонима хоста вы можете получить доступ к прокси-серверу API, как показано ниже:

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

Например:

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

Создание и изменение ссылок на хранилище ключей или хранилище доверенных сертификатов.

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

Например, ниже показан виртуальный хост, который использует ссылку на хранилище ключей:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

Используйте следующий вызов POST API, чтобы создать ссылку с именем keystoreref :

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

В ссылке указывается имя хранилища ключей и его тип.

Для просмотра ссылки используйте следующий вызов GET API:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Чтобы позже изменить ссылку так, чтобы она указывала на другое хранилище ключей, гарантируя, что псевдоним имеет то же имя, используйте следующий вызов PUT:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password