Как задать протокол TLS для маршрутизатора и процессора сообщений

По умолчанию в Apigee Edge для частного облака 4.54.00 маршрутизатор (Nginx) и процессор сообщений (Java 21) включают TLSv1.2 и TLSv1.3. В зависимости от потребностей вашей компании и правил безопасности вы можете ограничить разрешенные протоколы или повторно включить более старые протоколы. В этом документе описывается, как настроить протоколы TLS для входящего и исходящего трафика на маршрутизаторе и процессоре сообщений.

Для маршрутизатора вы также можете задать протокол для отдельных виртуальных хостов. Подробнее о том, как настроить доступ к API через TLS для Private Cloud…

Для процессора сообщений можно задать протокол для отдельной конечной точки TargetEndpoint. Подробнее о том, как настроить TLS от Edge до внутреннего сервиса (облачного или частного)…

Как настроить протокол TLS на маршрутизаторе

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

Чтобы задать протокол TLS на маршрутизаторе, укажите свойства в файле router.properties:

  1. Откройте файл router.properties в редакторе. Если файла нет, создайте его:
    vi /opt/apigee/customer/application/router.properties
  2. Задайте нужные свойства:
    # Possible values are space-delimited list of: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
  3. Сохраните изменения.
  4. Убедитесь, что файл свойств принадлежит пользователю apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. Перезапустите маршрутизатор
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Убедитесь, что протокол обновлен правильно, проверив файл Nginx /opt/nginx/conf.d/0-default.conf:
    cat /opt/nginx/conf.d/0-default.conf

    Убедитесь, что для ssl_protocols указано значение TLSv1.2.

  7. Если вы используете двусторонний протокол TLS с виртуальным хостом, вам также необходимо задать протокол TLS в виртуальном хосте, как описано в разделе Настройка доступа к API по протоколу TLS для частного облака.

Как задать протокол TLS в процессоре сообщений

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

Чтобы задать протокол TLS в Message Processor, установите свойства в файле message-processor.properties:

  1. Откройте файл message-processor.properties в редакторе. Если файла нет, создайте его:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Настройте свойства, используя следующий синтаксис:
    # Possible values are a comma-delimited list of TLSv1, TLSv1.1, TLSv1.2, and TLSv1.3
    conf/system.properties+https.protocols=[TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    # Possible values are a comma-delimited list of SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
    # SSLv3 is required
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3[,TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    
    # Specify the ciphers that the Message Processor supports. (You must separate ciphers with a comma.):
    conf_message-processor-communication_local.http.ssl.ciphers=cipher[,...]

    Пример:

    conf/system.properties+https.protocols=TLSv1.2
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1
    conf_message-processor-communication_local.http.ssl.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

    Полный список связанных свойств приведен в разделе Настройка TLS между маршрутизатором и процессором сообщений.

  3. Сохраните изменения.
  4. Убедитесь, что файл свойств принадлежит пользователю apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Перезапустите Message Processor:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Если вы используете двусторонний протокол TLS с серверной частью, настройте протокол TLS на виртуальном хосте, как описано в статье Настройка TLS от Edge до серверной части (Cloud и Private Cloud).

Работа со старыми шифрами и протоколами TLS. Если вы хотите работать со старыми шифрами или протоколами, ознакомьтесь с разделами ниже.

Как работать с более старыми версиями TLS

В Java 21 устаревшие протоколы TLS (TLSv1, TLSv1.1 и SSLv3) и слабые ключи протокола Диффи – Хеллмана (DH keySize < 1024) по умолчанию отключены в jdk.tls.disabledAlgorithms. Чтобы включить их, выполните одно из следующих действий:

  • Вариант А. Модернизация бэкенд-протоколов. Обновите бэкенд-серверы для поддержки TLS 1.2 или TLS 1.3 и убедитесь, что размер параметра протокола Диффи – Хеллмана составляет не менее 2048 бит (>= 2048 бит).
  • Вариант Б. Повторно включите устаревшие протоколы с помощью CwC. Чтобы сохранить совместимость с устаревшими серверными компонентами TLS 1.0 или TLS 1.1, удалите TLSv1, TLSv1.1 из conf_jvmsecurity_jdk.tls.disabledAlgorithms в /opt/apigee/customer/application/message-processor.properties с помощью кода с конфигурацией (CwC).
    # Re-enable TLS 1.0 and TLS 1.1 for legacy backend connectivity
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, TLS_RSA_*, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

Работа со статическими шифрами RSA

Apigee Edge для частного облака версии 4.54.00 работает на Java 21, где статические наборы шифров RSA (TLS_RSA_*), в которых отсутствует временный протокол Диффи – Хеллмана (ECDHE или DHE), по умолчанию отключены в jdk.tls.disabledAlgorithms (например, TLS_RSA_WITH_AES_128_CBC_SHA или TLS_RSA_WITH_AES_256_CBC_SHA). Чтобы поддерживать серверные части, которым требуются статические наборы шифров RSA, используйте следующий вариант:

  • Повторно включите статические шифры RSA с помощью CwC. Чтобы сохранить совместимость с устаревшими серверными системами, удалите TLS_RSA_* из conf_jvmsecurity_jdk.tls.disabledAlgorithms в /opt/apigee/customer/application/message-processor.properties с помощью кода с конфигурацией (CwC).
    # Re-enable Static RSA ciphers for backward compatibility with legacy Java 8 backends
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

После изменения свойств перезапустите Message Processor с помощью apigee-service:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Как включить TLS 1.3 для хостов

В этом разделе рассказывается, как включить TLS 1.3 для определенных виртуальных хостов. Чтобы включить TLS 1.3, выполните следующие действия на узлах сервера управления:

  1. На каждом узле сервера управления отредактируйте файл /opt/apigee/customer/application/management-server.properties и добавьте в него следующую строку (если файла нет, создайте его):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

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

  2. Сохраните файл.
  3. Убедитесь, что владельцем файла является пользователь apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Перезапустите сервер управления:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Повторите описанные выше шаги для всех узлов сервера управления по очереди.
  6. Создайте виртуальный хост или обновите существующий, указав следующее свойство: Обратите внимание, что протоколы разделяются пробелами и указываются с учетом регистра.
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    Ниже приведен пример виртуального хоста с этим свойством:

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }

Тестирование TLS 1.3

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

curl -v --tlsv1.3 "https://api.myCompany,com/testproxy"

Обратите внимание, что тестировать TLS 1.3 можно только на клиентах, которые поддерживают этот протокол. Если TLS 1.3 не включен, вы увидите сообщение об ошибке, похожее на следующее:

sslv3 alert handshake failure