Cómo configurar TLS para BaaS de API

Edge para la nube privada v4.18.01

TLS (seguridad de la capa de transporte, cuyo predecesor es SSL) es la tecnología de seguridad estándar para garantizar mensajería segura y encriptada en todo el entorno de la API. Puedes configurar TLS en el Portal de API de BaaS y los nodos de pila de BaaS de la API.

En la siguiente imagen, se muestra un diagrama de implementación típico del BaaS de la API con un solo nodo del portal de BaaS y tres nodos de pila de BaaS de la API.

Los desarrolladores usan un navegador para realizar solicitudes al Portal. De forma predeterminada, las solicitudes usan el protocolo HTTP en el puerto 9000 del nodo del portal.

Esta implementación incluye un balanceador de cargas entre los nodos del portal y los de pila. En esta configuración, el portal realiza solicitudes HTTP al balanceador de cargas y este las reenvía a uno de los nodos de pila. Este es el entorno de implementación recomendado para un sistema de producción.

Opciones de configuración de TLS

Cuando configuras TLS para el BaaS de la API, tienes varias opciones:

  • Configura TLS en el portal y en el balanceador de cargas para los nodos de pila.

    En esta configuración, los desarrolladores usan el protocolo HTTPS para acceder al portal, y el portal que se ejecuta en el navegador usa HTTPS para realizar solicitudes a los nodos de pila a través del balanceador de cargas. El balanceador de cargas usa HTTP para acceder a los nodos de pila.
  • Configura TLS en el portal, el balanceador de cargas y los nodos de pila

    Para mayor seguridad, configura el balanceador de cargas de modo que use TLS y acceda a los nodos de pila.
  • Configura TLS en el portal y en un solo nodo de pila.

    En un entorno pequeño, como un entorno de pruebas o desarrollo, es posible que solo tengas un nodo de pila. Esto significa que no es necesario incluir un balanceador de cargas. En esta configuración, configura TLS en los nodos del portal y de pila.
  • Configura TLS en un balanceador de cargas para el portal

    Una opción que no se muestra arriba es usar un balanceador de cargas frente al nodo del portal. En esa configuración, puedes configurar TLS en el balanceador de cargas y, de forma opcional, en la conexión entre el balanceador de cargas y el Portal.

Asegúrate de que el puerto TLS esté abierto

Los siguientes procedimientos configuran TLS en el puerto de portal predeterminado 9000 y el nodo de pila de 8080. Sin embargo, puedes cambiar este puerto si lo deseas.

Sin importar el puerto que uses, debes asegurarte de que esté abierto en el nodo. Por ejemplo, puedes usar el siguiente comando para abrir el puerto 8443:

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

Configura TLS en la pila BaaS de la API

De forma predeterminada, TLS está inhabilitado para la pila BaaS de la API. Luego, puedes acceder a la API de BaaS a través de HTTP con la dirección IP o el nombre de DNS del nodo de pila y el puerto 8080. Por ejemplo:

http://stack_IP:8080

Como alternativa, puedes configurar el acceso de TLS a la API de BaaS para que puedas acceder a ella de la siguiente forma:

https://stack_IP:8080

En este ejemplo, se configurará el acceso TLS para usar el puerto 8080. Sin embargo, el puerto 8080 no es necesario; puedes configurar la pila para que use otro puerto. El único requisito es que tu firewall permita el tráfico en el puerto especificado.

La pila solo puede admitir un tipo de solicitud (HTTP o HTTPS) a través de un solo puerto. Por lo tanto, si configuras el acceso HTTPS en el puerto 8080, no puedes usar HTTP para acceder al puerto 8080. Si configuras la pila para que use el puerto 8443 con HTTPS, ya no escuchará en el puerto 8080.

Usa el siguiente procedimiento para configurar el acceso TLS a la pila:

  1. Genera el archivo JKS del almacén de claves que contiene tu certificación TLS y tu clave privada. Si quieres obtener más información, consulta Configura TLS/SSL para dispositivos perimetrales locales.
    Nota: Asegúrate de que la contraseña en el almacén de claves y en la clave sea la misma.
  2. Copia el archivo JKS del almacén de claves en un directorio del nodo de pila, como /opt/apigee/customer/application. El usuario de “Apigee” debe poder acceder al directorio.
  3. Cambia la propiedad del archivo JKS al usuario de “apigee”:
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks


    en el que keystore.jks es el nombre del archivo del almacén de claves.
  4. Edita el archivo /opt/apigee/customer/application/usergrid.properties para establecer las siguientes propiedades, incluida la ruta de acceso al archivo JKS y la contraseña del almacén de claves y la clave. Si ese archivo no existe, créalo:
    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
    tramcat-server_ssl1



    /opt/apigee/customer/application/keystore.jks
    # Usa esta propiedad para especificar un puerto diferente.
    # tomcat-server_port=8080


    Advertencia: El valor password debe estar en texto no encriptado. Por lo tanto, debes proteger a usergrid.properties del acceso no autorizado.

    Usa la propiedad tomcat-server_keyalias para especificar el alias del almacén de claves. Estableces el alias de la clave en el momento en que creaste la clave. Por ejemplo, puedes establecerlo usando la opción -alias para el comando keytool.

    Usa tomcat-server_ssl.protocols para configurar los protocolos TLS que admite la pila. Para obtener una lista de los protocolos compatibles con Java 8, consulta http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename.
  5. Configura el nodo de pila:
    >/opt/apigee/apigee-service/bin/apigee-service baas-usergrid configurar
  6. Reinicia la pila de BaaS:
    >/opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. Para confirmar que TLS esté funcionando, ejecuta el siguiente comando cURL en el nodo de pila con HTTPS:
    > curl -k https://localhost:8080/status -v

    Si TLS está configurado correctamente, deberías ver una respuesta que contiene información sobre el estado.

    Si configuraste el acceso TLS a través de un puerto que no sea 8080, modifica el comando anterior para usar el puerto correcto.
  8. Repite el procedimiento en todos los nodos de pila.
  9. Si tienes un balanceador de cargas frente a los nodos de pila, configúralo para realizar solicitudes a los nodos de pila mediante HTTPS. Consulta la documentación sobre el balanceador de cargas para obtener más información.

    Si el Portal realiza solicitudes directas a la Pila, configúralo para acceder a la Pila a través de HTTPS como se describe en la siguiente sección.
  10. Usa el procedimiento que aparece a continuación en “Configura nodos de pila de BaaS de API para TLS en la pila o el portal” a fin de asegurarte de que el nodo de la pila tenga las URLs de TLS correctas cuando generes las respuestas del usuario.

Configura el portal para acceder a la pila a través de TLS

El portal de BaaS que se ejecuta en un navegador funciona mediante llamadas a la API a la pila BaaS. Si configuras la pila BaaS para que use TLS, también debes configurar el Portal para que realice esas llamadas a través de HTTPS.

Por lo general, una instalación de API BaaS se configura de la siguiente manera:

  • Usa un balanceador de cargas entre los nodos del portal y de la pila

    Configura el balanceador de cargas para realizar solicitudes a los nodos de la pila mediante HTTPS. Consulta la documentación sobre el balanceador de cargas para obtener más información.

    En esta configuración, el portal puede acceder al balanceador de cargas a través de HTTP o HTTPS, según cómo lo configures. Si el balanceador de cargas usa TLS, usa el procedimiento que se indica a continuación para configurar el portal a fin de realizar solicitudes al balanceador de cargas de HTTPS.
  • Haz que el Portal realice solicitudes directas a la Pila

    Configura el Portal para acceder a la Pila a través de HTTPS como se describe a continuación.

Usa el siguiente procedimiento para configurar el Portal de BaaS de la API a fin de realizar llamadas a la API a través de HTTPS:

  1. Configura el acceso TLS en la pila BaaS como se describió antes o en el balanceador de cargas de los nodos de pila como se describe en la documentación de tu balanceador de cargas.
  2. Edita /opt/apigee/customer/application/portal.properties para configurar la siguiente propiedad. Si ese archivo no existe, créalo:
    baas.portal.config.overrideUrl=https://stackIP:port

    Especifica como el valor de esta propiedad la dirección IP o el nombre de DNS y el puerto del nodo de pila de la API para la instalación de un solo nodo, o del balanceador de cargas si tienes un balanceador de cargas frente a los nodos de la pila de BaaS de la API.
  3. Configura el nodo del portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Reinicia el portal con el siguiente comando:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. Si usaste un certificado autofirmado cuando configuraste el acceso TLS a la pila anterior, es posible que el navegador no permita solicitudes a la pila desde el portal. Si ves un error en el navegador que indica que no se permite el acceso HTTPS a la pila, solicita la siguiente URL en el navegador y agrega una excepción de seguridad para permitir el acceso:
    https://stackIP:port/status

    Especifica la dirección IP o el nombre de DNS y el puerto del nodo de pila de la API o del balanceador de cargas.

Configura TLS en el portal de BaaS de la API

De forma predeterminada, los usuarios acceden al Portal a través de solicitudes HTTP sin encriptar a través del puerto 9000 en el servidor del Portal. Puedes configurar el portal para que use HTTPS a fin de encriptar los datos que se envían hacia y desde el portal.

De forma predeterminada, puedes acceder al portal a través de HTTP con la dirección IP o el nombre de DNS del nodo del portal y el puerto 9000. Por ejemplo:

http://portal_IP:9000

Como alternativa, puedes configurar el acceso TLS al portal para poder acceder a él con el siguiente formato:

https://portal_IP:9443

En este ejemplo, se configurará el acceso TLS para usar el puerto 9443. Sin embargo, el puerto 9443 no es obligatorio. Puedes configurar el portal para que use otro puerto.

El portal solo puede admitir un tipo de solicitud (HTTP o HTTPS) a través de un solo puerto. Por lo tanto, si configuras el acceso HTTPS en el puerto 9000, no puedes usar HTTP para acceder al puerto 9000. Si configuras el portal para que use el puerto 9443 con HTTPS, este ya no escuchará en el puerto 9000.

Si deseas configurar TLS para el portal, haz lo siguiente:

  1. Crea un archivo de claves y un archivo de certificado en formato PEM.
    Nota: Asegúrate de que no haya ninguna contraseña ni frase de contraseña en la clave o el certificado.
  2. Copia los archivos PEM en un directorio del nodo del portal, como /opt/apigee/customer/application. El usuario de “Apigee” debe poder acceder al directorio.
  3. Cambia la propiedad de los archivos PEM al usuario de “apigee”:
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. Edita el archivo /opt/apigee/customer/application/portal.properties para configurar las siguientes propiedades. Si ese archivo no existe, créalo:
    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=TLS0.TLS1.TLSv.122xport.TLSv0,TLSv.TLSv.12vs.SSL,TLSv.TLS

    # Usa esta propiedad para especificar un puerto diferente.
    # baas.portal.listen=9000


    Usa baas.portal.ssl.protocols para configurar los protocolos de TLS que admite el portal. Para obtener una lista de los protocolos compatibles, consulta la lista de nombres de protocolo SSL definidos por Nginx: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols.
  5. Configura el nodo del portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Reinicia el portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. Usa el procedimiento que aparece a continuación en “Configura nodos de pila de BaaS de API para TLS en la pila o el portal” a fin de asegurarte de que el nodo de la pila tenga la URL TLS correcta para el portal.

Configura los nodos de BaaS de la API para TLS en la pila o el portal

Si incluyes un balanceador de cargas frente a los nodos de Pila o de Portal, o si habilitas TLS directamente en los nodos del Portal o la Pila, debes configurar los nodos con las URLs correctas para acceder a la Pila y el Portal. Por ejemplo, los nodos de pila requieren esta información en las siguientes situaciones:

  • Incluir una URL en las respuestas de las solicitudes a la API de BaaS
  • Agregar vínculos en plantillas de correo electrónico cuando se restablece una contraseña o se envían otras notificaciones
  • Redireccionar a los usuarios a páginas específicas del portal

Si usas un balanceador de cargas frente a los nodos de pila o configuras TLS en el nodo de pila, establece la siguiente propiedad en /opt/apigee/customer/application/usergrid.properties:

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

Reemplaza http://localhost:8080 por la URL del balanceador de cargas. Si el balanceador de cargas está configurado para usar TLS, usa el protocolo HTTPS. Solo debes incluir el puerto si usas un puerto no estándar, es decir, otro que no sea el puerto 80 para HTTP y el puerto 443 para HTTPS.

También debes configurar la siguiente propiedad en /opt/apigee/customer/application/portal.properties si usas un balanceador de cargas frente a los nodos de pila:

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

Reemplaza http://localhost:8080 por la URL del balanceador de cargas de la pila.

Si usas un balanceador de cargas frente al nodo del portal o configuras TLS en el nodo de pila, establece las siguientes propiedades en usergrid.properties:

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

Reemplaza http://localhost:9000 por la URL del balanceador de cargas. Si el balanceador de cargas está configurado para usar TLS, usa el protocolo HTTPS. Solo debes incluir el puerto si usas un puerto no estándar, es decir, otro que no sea el puerto 80 para HTTP y el puerto 443 para HTTPS.

Después de editar usergrid.properties, haz lo siguiente:

  1. Configura el nodo de pila:
    >/opt/apigee/apigee-service/bin/apigee-service baas-usergrid configurar
  2. Reinicia la pila de BaaS:
    >/opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. Si modificaste portal.properties, configura el nodo del portal:??
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Reinicia el portal de BaaS:
    >/opt/apigee/apigee-service/bin/apigee-service baas-portal restart