Configura el protocolo TLS para el router y el procesador de mensajes

De forma predeterminada en Apigee Edge para nube privada 4.54.00, el router (Nginx) y el Message Processor (Java 21) habilitan TLSv1.2 y TLSv1.3. Según las necesidades de tu empresa y las prácticas de seguridad es posible que desees restringir los protocolos permitidos o volver a habilitar los protocolos más antiguos. En este documento, se describe cómo configurar los protocolos TLS para el tráfico de entrada y salida en el router y el procesador de mensajes.

En el caso del router, también puedes configurar el protocolo para hosts virtuales individuales. Consulta Configura el acceso TLS a una API para la Nube privada para obtener más información.

En el caso del procesador de mensajes, puedes configurar el protocolo para un TargetEndpoint individual. Consulta Configura TLS del perímetro al backend (nube y nube privada) para obtener más información.

Configura el protocolo TLS en el router

Las siguientes propiedades te ayudan a configurar los protocolos TLS deseados en el router para la comunicación de entrada.

Para configurar el protocolo TLS en el router, establece las propiedades en el router.properties archivo:

  1. Abre el archivo router.properties en un editor. Si el archivo no existe, créalo:
    vi /opt/apigee/customer/application/router.properties
  2. Establece las propiedades según lo desees:
    # 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. Guarda los cambios.
  4. Asegúrate de que el archivo de propiedades sea propiedad del usuario apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. Reinicia el router:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Para verificar que el protocolo se actualizó correctamente, examina el archivo Nginx /opt/nginx/conf.d/0-default.conf:
    cat /opt/nginx/conf.d/0-default.conf

    Asegúrate de que el valor de ssl_protocols sea TLSv1.2.

  7. Si usas TLS bidireccional con un host virtual, también debes configurar el protocolo TLS en el host virtual como se describe en Configura el acceso TLS a una API para la Nube privada.

Configura el protocolo TLS en el procesador de mensajes

Las siguientes propiedades te ayudan a configurar los protocolos TLS deseados en el Message Processor para la comunicación de salida. En esta sección, también se describe cómo trabajar con protocolos y cifrados TLS inhabilitados.

Para configurar el protocolo TLS en el Message Processor, establece las propiedades en el message-processor.properties archivo:

  1. Abre el archivo message-processor.properties en un editor. Si el archivo no existe, créalo:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Configura las propiedades con la siguiente sintaxis:
    # 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[,...]

    Por ejemplo:

    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

    Para obtener una lista completa de las propiedades relacionadas, consulta Configura TLS entre un router y un Message Processor.

  3. Guarda los cambios.
  4. Asegúrate de que el archivo de propiedades sea propiedad del usuario apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Reinicia el procesador de mensajes:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Si usas TLS bidireccional con el backend, configura el protocolo TLS en el host virtual como se describe en Configura TLS del perímetro al backend (nube y nube privada).

Trabaja con cifrados y protocolos TLS más antiguos: Consulta las siguientes secciones si deseas trabajar con cifrados o protocolos más antiguos.

Trabaja con TLS más antiguo

En Java 21, los protocolos TLS heredados (TLSv1, TLSv1.1 y SSLv3) y las claves Diffie-Hellman débiles (DH keySize < 1024) están inhabilitados de forma predeterminada en jdk.tls.disabledAlgorithms. Para habilitarlos, usa una de las siguientes opciones:

  • Opción A: Moderniza los protocolos de backend: Actualiza los servidores de backend para admitir TLS 1.2 o TLS 1.3 y asegúrate de que los tamaños de los parámetros Diffie-Hellman sean de 2048 bits o más (>= 2048 bits).
  • Opción B: Vuelve a habilitar los protocolos heredados con CwC: Para mantener la compatibilidad con los backends heredados de TLS 1.0 o TLS 1.1, quita TLSv1, TLSv1.1 de conf_jvmsecurity_jdk.tls.disabledAlgorithms en /opt/apigee/customer/application/message-processor.properties con código con configuración (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

Trabaja con cifrados RSA estáticos

Apigee Edge para la Nube privada versión 4.54.00 se ejecuta en Java 21, donde los conjuntos de cifrado RSA estáticos (TLS_RSA_*) que carecen de intercambio de claves Diffie-Hellman efímero (ECDHE o DHE) están inhabilitados de forma predeterminada en jdk.tls.disabledAlgorithms (por ejemplo, TLS_RSA_WITH_AES_128_CBC_SHA o TLS_RSA_WITH_AES_256_CBC_SHA). Para admitir backends que requieren conjuntos de cifrado RSA estáticos, usa la siguiente opción:

  • Vuelve a habilitar los cifrados RSA estáticos con CwC: Para mantener la compatibilidad con los backends heredados, quita TLS_RSA_* de conf_jvmsecurity_jdk.tls.disabledAlgorithms en /opt/apigee/customer/application/message-processor.properties con código con configuración (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

Después de modificar las propiedades, reinicia el Message Processor con apigee-service:

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

Habilita TLS 1.3 para hosts

En esta sección, se explica cómo habilitar TLS 1.3 para hosts virtuales específicos. Para habilitar TLS 1.3, realiza los siguientes pasos en los nodos del servidor de administración:

  1. En cada nodo del servidor de administración, edita el archivo /opt/apigee/customer/application/management-server.properties y agrega la siguiente línea (si el archivo no existe, créalo):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    En este archivo, los protocolos están separados por comas y distinguen mayúsculas de minúsculas.

  2. Guarda el archivo.
  3. Asegúrate de que el archivo sea propiedad del usuario apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Reinicia el servidor de administración:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Repite los pasos anteriores en todos los nodos del servidor de administración uno por uno.
  6. Crea (o actualiza uno existente) un host virtual con la siguiente propiedad. Ten en cuenta que los protocolos están separados por espacios y distinguen mayúsculas de minúsculas:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    En el siguiente ejemplo, se muestra un vhost de muestra con esta propiedad:

    {
      "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
    }

Prueba TLS 1.3

Para probar TLS 1.3, ingresa el siguiente comando:

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

Ten en cuenta que solo puedes probar TLS 1.3 en clientes que admitan este protocolo. Si TLS 1.3 no está habilitado, verás un mensaje de error similar al siguiente:

sslv3 alert handshake failure