Настройка TLS для API BaaS

Edge for Private Cloud v4.18.01

TLS (Transport Layer Security, предшественником которого является SSL) – это стандартная технология безопасности, обеспечивающая безопасный обмен зашифрованными сообщениями в среде API. Вы можете настроить TLS на портале API BaaS и узлах стека API BaaS.

На изображении ниже показана типичная схема развертывания API BaaS с одним узлом портала BaaS и тремя узлами стека API BaaS.

Разработчики используют браузер для отправки запросов на портал. По умолчанию запросы используют протокол HTTP на порту 9000 узла портала.

В этой конфигурации между узлами портала и стека размещается балансировщик нагрузки. В этой конфигурации портал отправляет HTTP-запросы балансировщику нагрузки, а тот пересылает их одному из узлов Stack. Это рекомендуемая среда развертывания для рабочей системы.

Параметры конфигурации TLS

При настройке TLS для API BaaS доступны следующие варианты:

  • Настройте TLS на портале и балансировщике нагрузки для узлов стека

    В этой конфигурации разработчики используют протокол HTTPS для доступа к порталу, а портал, работающий в браузере, использует HTTPS для отправки запросов к узлам стека через балансировщик нагрузки. Балансировщик нагрузки использует HTTP для доступа к узлам Stack.
  • Настройте TLS на портале, балансировщике нагрузки и узлах стека

    Для дополнительной безопасности настройте балансировщик нагрузки на использование TLS для доступа к узлам стека.
  • Настройте TLS на портале и на одном узле стека

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

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

Убедитесь, что порт TLS открыт

Ниже описано, как настроить TLS на портах по умолчанию: 9000 для портала и 8080 для узла Stack. Однако при необходимости вы можете изменить этот порт.

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

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

Настройка TLS в стеке API BaaS

По умолчанию TLS отключен для API BaaS Stack. Затем вы получаете доступ к API BaaS по протоколу HTTP, используя IP-адрес или имя DNS узла Stack и порт 8080. Пример:

http://stack_IP:8080

Вы также можете настроить доступ к BaaS API по протоколу TLS, чтобы обращаться к нему в следующем формате:

https://stack_IP:8080

В этом примере вы настраиваете доступ по протоколу TLS с использованием порта 8080. Однако порт 8080 не является обязательным – вы можете настроить Stack на использование другого порта. Единственное требование – чтобы брандмауэр разрешал трафик через указанный порт.

Стек может поддерживать только один тип запроса (HTTP или HTTPS) через один порт. Поэтому, если вы настроите доступ по протоколу HTTPS через порт 8080, вы не сможете использовать HTTP для доступа к порту 8080. Если вы настроите Stack на использование порта 8443 с HTTPS, Stack больше не будет прослушивать порт 8080.

Чтобы настроить доступ к стеку по протоколу TLS, выполните следующие действия:

  1. Создайте файл хранилища ключей JKS, содержащий сертификат TLS и закрытый ключ. Подробнее о том, как настроить TLS/SSL для локальной версии Edge…
    Примечание. Убедитесь, что пароли для хранилища ключей и ключа совпадают.
  2. Скопируйте файл хранилища ключей JKS в каталог на узле стека, например /opt/apigee/customer/application. Каталог должен быть доступен пользователю apigee.
  3. Измените владельца файла JKS на пользователя apigee:
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    где keystore.jks – название файла хранилища ключей.
  4. Измените файл /opt/apigee/customer/application/usergrid.properties, чтобы задать следующие свойства, включая путь к файлу JKS и пароль для хранилища ключей и ключа. Если такого файла нет, создайте его:
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # По умолчанию для доступа по протоколу TLS используется порт 8080.
    # Используйте это свойство, чтобы указать другой порт.
    # tomcat-server_port=8080


    Предупреждение. Значение password должно быть указано в виде обычного текста. Поэтому вам следует защитить файл usergrid.properties от несанкционированного доступа.

    Чтобы указать псевдоним хранилища ключей, используйте свойство tomcat-server_keyalias. Псевдоним ключа задается при создании ключа. Например, вы можете задать его, используя параметр -alias в команде keytool.

    Используйте tomcat-server_ssl.protocols, чтобы задать протоколы TLS, поддерживаемые стеком. Список протоколов, поддерживаемых Java 8, можно найти на странице http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename.
  5. Настройте узел Stack:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. Перезапустите стек BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. Чтобы убедиться, что TLS работает, выполните на узле стека следующую команду cURL с использованием HTTPS:
    > curl -k https://localhost:8080/status -v

    Если TLS настроен правильно, вы увидите ответ, содержащий информацию о статусе.

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

    Если портал отправляет прямые запросы к стеку, настройте портал для доступа к стеку по протоколу HTTPS, как описано в следующем разделе.
  10. Чтобы при создании ответов для пользователей узел стека имел правильные URL TLS, выполните описанную ниже процедуру из раздела "Как настроить узлы стека API BaaS для TLS в стеке или на портале".

Настройка доступа к стеку через TLS

Портал BaaS, работающий в браузере, выполняет вызовы API к стеку BaaS. Если вы настроили BaaS Stack на использование TLS, то вам также необходимо настроить портал на выполнение этих вызовов по протоколу HTTPS.

Установка API BaaS обычно настраивается одним из следующих способов:

  • Используйте балансировщик нагрузки между узлами портала и стека

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

    В этой конфигурации портал может получить доступ к балансировщику нагрузки по протоколу HTTP или HTTPS в зависимости от того, как вы настроили балансировщик нагрузки. Если балансировщик нагрузки использует TLS, выполните описанные ниже действия, чтобы настроить портал для отправки запросов к балансировщику нагрузки по протоколу HTTPS.
  • Настройте портал для отправки прямых запросов в стек

    Настройте портал для доступа к стеку по протоколу HTTPS, как описано ниже.

Чтобы настроить портал API BaaS для выполнения вызовов API по протоколу HTTPS, выполните следующие действия:

  1. Настройте доступ по протоколу TLS в стеке BaaS, как описано выше, или в балансировщике нагрузки для узлов стека, как описано в документации к балансировщику нагрузки.
  2. Измените файл /opt/apigee/customer/application/portal.properties, чтобы задать следующее свойство: Если такого файла нет, создайте его:
    baas.portal.config.overrideUrl=https://stackIP:port

    В качестве значения этого свойства укажите IP-адрес или DNS-имя и порт узла API Stack для установки с одним узлом или балансировщика нагрузки, если он используется перед узлами API BaaS Stack.
  3. Настройте узел портала:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Перезапустите портал с помощью команды:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. Если при настройке доступа к стеку по протоколу TLS, описанной выше, вы использовали самозаверяющий сертификат, браузер может не разрешить запросы к стеку с портала. Если в браузере появляется сообщение об ошибке, указывающее на то, что доступ к стеку по протоколу HTTPS запрещен, запросите в браузере следующий URL и добавьте исключение безопасности, чтобы разрешить доступ:
    https://stackIP:port/status

    Укажите IP-адрес или DNS-имя и порт узла стека API или балансировщика нагрузки.

Как настроить TLS на портале API BaaS

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

По умолчанию доступ к порталу осуществляется по протоколу HTTP с использованием IP-адреса или имени DNS узла портала и порта 9000. Пример:

http://portal_IP:9000

Вы также можете настроить доступ к порталу по протоколу TLS, чтобы получить доступ к нему в следующем формате:

https://portal_IP:9443

В этом примере вы настроите доступ TLS для использования порта 9443. Однако порт 9443 не является обязательным – вы можете настроить портал на использование другого порта.

Портал может поддерживать только один тип запроса (HTTP или HTTPS) через один порт. Поэтому, если вы настроите доступ по протоколу HTTPS через порт 9000, вы не сможете использовать HTTP для доступа к порту 9000. Если вы настроите портал на использование порта 9443 с HTTPS, портал больше не будет прослушивать порт 9000.

Чтобы настроить TLS для портала:

  1. Создайте файл ключа и файл сертификата в формате PEM.
    Примечание. Убедитесь, что у ключа или сертификата нет пароля.
  2. Скопируйте PEM-файлы в каталог на узле портала, например /opt/apigee/customer/application. Каталог должен быть доступен пользователю apigee.
  3. Измените владельца PEM-файлов на пользователя apigee:
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. Измените файл /opt/apigee/customer/application/portal.properties, чтобы задать следующие свойства. Если такого файла нет, создайте его:
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # По умолчанию для доступа по протоколу TLS используется порт 9000.
    # Используйте это свойство, чтобы указать другой порт.
    # baas.portal.listen=9000


    Используйте baas.portal.ssl.protocols, чтобы задать протоколы TLS, поддерживаемые порталом. Список поддерживаемых протоколов можно найти на странице http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols, где перечислены названия протоколов SSL, определенные Nginx.
  5. Настройте узел портала:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Перезапустите портал:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. Чтобы узел стека имел правильный URL TLS для портала, выполните описанную ниже процедуру из раздела "Настройка узлов стека API BaaS для TLS в стеке или на портале".

Как настроить узлы API BaaS для TLS в стеке или на портале

Если вы добавите балансировщик нагрузки перед узлами Stack или Portal или включите TLS непосредственно на узле Portal или Stack, вам нужно будет настроить узлы с правильными URL, чтобы получить доступ к Stack и Portal. Например, узлам Stack требуется эта информация в следующих случаях:

  • Включать URL в ответы на запросы BaaS API.
  • Добавление ссылок в шаблоны электронных писем при сбросе пароля или отправке других уведомлений.
  • перенаправлять пользователей на определенные страницы портала;

Если вы используете балансировщик нагрузки перед узлами Stack или настраиваете TLS на узле Stack, задайте следующее свойство в файле /opt/apigee/customer/application/usergrid.properties:

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

Замените http://localhost:8080 на URL балансировщика нагрузки. Если балансировщик нагрузки настроен на использование TLS, используйте протокол HTTPS. Указывать порт нужно только в том случае, если вы используете нестандартный порт, то есть не порт 80 для HTTP и не порт 443 для HTTPS.

Если вы используете балансировщик нагрузки перед узлами стека, вам также необходимо задать следующее свойство в файле /opt/apigee/customer/application/portal.properties :

baas.portal.config.overrideUrl=http://localhost:8080

Замените http://localhost:8080 на URL балансировщика нагрузки для стека.

Если вы используете балансировщик нагрузки перед узлом портала или настраиваете TLS на узле стека, задайте следующие свойства в файле usergrid.properties:

usergrid-deployment_portal.url=http://localhost:9000

Замените http://localhost:9000 на URL балансировщика нагрузки. Если балансировщик нагрузки настроен на использование TLS, используйте протокол HTTPS. Включать порт нужно только в том случае, если вы используете нестандартный порт, то есть не порт 80 для HTTP и не порт 443 для HTTPS.

После редактирования файла usergrid.properties:

  1. Настройте узел Stack:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  2. Перезапустите стек BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. Если вы изменили файл portal.properties, настройте узел портала:??
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Перезапустите портал BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart