Compartir a través de


Configuración seguridad para una aplicación Tomcat, JBoss o Java SE en Azure App Service

En este artículo se muestra cómo configurar opciones de seguridad específicas de Java en App Service. Las aplicaciones de Java que se ejecutan en App Service presentan el mismo conjunto de procedimientos recomendados de seguridad que otras aplicaciones.

Azure App Service ejecuta aplicaciones web Java en un servicio totalmente administrado en tres variantes:

  • Java SE: puede ejecutar una aplicación implementada como un paquete JAR que contenga un servidor incrustado (como Spring Boot, Dropwizard, Quarkus o uno con un servidor de Tomcat o Jetty incrustado).
  • Tomcat: el servidor de Tomcat integrado puede ejecutar una aplicación implementada como un paquete WAR.
  • JBoss EAP: admitido para aplicaciones Linux en los niveles de precios Premium v3 y Aislado v2. El servidor JBoss EAP integrado puede ejecutar una aplicación implementada como un paquete WAR o EAR.

Nota:

Para las aplicaciones de Spring, se recomienda usar Azure Spring Apps. No obstante, todavía puede usar Azure App Service como destino. Consulte guía de destino de carga de trabajo de Java para obtener consejos.

Autenticación de usuarios (autenticación sencilla)

Configure la autenticación de la aplicación en Azure Portal con la opción Autenticación y autorización. Desde allí, puede habilitar la autenticación con Microsoft Entra ID o con inicios de sesión en redes sociales como Facebook, Google o GitHub. La configuración de Azure Portal solo funciona al configurar un proveedor de autenticación único. Para más información, consulte Configuración de una aplicación de App Service para usar el inicio de sesión de Microsoft Entra y los artículos relacionados de otros proveedores de identidades. Si tiene que habilitar varios proveedores de inicio de sesión, siga las instrucciones de Personalización del inicio y cierre de sesión.

Los desarrolladores de Spring Boot pueden usar el iniciador de Spring Boot para Microsoft Entra para proteger las aplicaciones mediante las anotaciones y las API conocidas de Spring Security. Asegúrese de aumentar el tamaño máximo del encabezado en el archivo application.properties. Se recomienda un valor de 16384.

La aplicación Tomcat puede acceder a las reclamaciones del usuario directamente desde el servlet mediante la conversión del objeto Principal a un objeto Map. El objeto Map asigna cada tipo de notificación a una colección de las notificaciones de dicho tipo. En el ejemplo de código siguiente, request es una instancia de HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Ahora puede inspeccionar el objeto Map de cualquier notificación específica. Por ejemplo, el fragmento de código siguiente recorre en iteración todos los tipos de notificación e imprime el contenido de cada colección.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Para cerrar la sesión de los usuarios, utilice la ruta de acceso /.auth/ext/logout. Para realizar otras acciones, consulte la documentación sobre la personalización de inicios y cierres de sesión. También hay documentación oficial acerca de la interfaz HttpServletRequest y sus métodos. Los siguientes métodos de servlet también se hidrata métodos según la configuración de App Service:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Para deshabilitar esta característica, cree una configuración de aplicación denominada WEBSITE_AUTH_SKIP_PRINCIPAL con un valor de 1. Para deshabilitar todos los filtros de servlet que ha agregado App Service, cree una configuración denominada WEBSITE_SKIP_FILTERS con un valor de 1.

Para JBoss EAP, consulte la pestaña Tomcat.

Configuración de TLS/SSL

Para cargar un certificado TLS/SSL existente y enlazarlo al nombre de dominio de la aplicación, siga las instrucciones de Protección de un nombre DNS personalizado con un enlace TLS/SSL en Azure App Service. También puede configurar la aplicación para aplicar TLS/SSL.

Uso de referencias de KeyVault

Azure KeyVault proporciona administración de secretos centralizada con directivas de acceso un historial de directivas. En KeyVault puede almacenar secretos (como contraseñas o cadenas de conexión) y acceder a ellos en la aplicación través de las variables de entorno.

En primer lugar, siga las instrucciones para conceder a su aplicación acceso a un almacén de claves y hacer una referencia de KeyVault a su secreto en una configuración de aplicación. Para validar que la referencia se resuelve en el secreto, imprima la variable de entorno mie3ntras acceder de forma remota al terminal de App Service.

En el caso de los archivos de configuración de Spring, consulte esta documentación acerca de las configuraciones externalizadas.

Para insertar estos secretos en el archivo de configuración de Spring, use la sintaxis de inserción de variables de entorno (${MY_ENV_VAR}).

Para insertar estos secretos en el archivo de configuración de Tomcat, use la sintaxis de inserción de variables de entorno (${MY_ENV_VAR}).

Uso del almacén de claves en Linux

De forma predeterminada, los certificados públicos o privados cargados en App Service Linux se cargan en los almacenes de claves de Java respectivos cuando se inicia el contenedor. Después de cargar el certificado, deberá reiniciar la instancia de App Service para que se cargue en el almacén de claves de Java. Los certificados públicos se cargan en el almacén de claves en $JRE_HOME/lib/security/cacerts, y los certificados privados se almacenan en $JRE_HOME/lib/security/client.jks.

Puede ser necesaria más configuración para el cifrado de la conexión de JDBC con certificados en el almacén de claves de Java. Consulte la documentación del controlador JDBC elegido.

Inicialización del almacén de claves de Java en Linux

Para inicializar el objeto import java.security.KeyStore, cargue el archivo de almacén de claves con la contraseña. La contraseña predeterminada para ambos almacenes de claves es changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Cargar manualmente el almacén de claves en Linux

Puede cargar los certificados manualmente en el almacén de claves. Cree una configuración de aplicación, SKIP_JAVA_KEYSTORE_LOAD, con un valor de 1 para deshabilitar en App Service la carga automática de los certificados en el almacén de claves. Todos los certificados públicos cargados en App Service a través de Azure Portal se almacenan en /var/ssl/certs/. Los certificados privados se almacenan en /var/ssl/private/.

Puede depurar o interactuar con la herramienta de claves de Java si abre una conexión SSH a la instancia de App Service y ejecuta el comando keytool. Consulte la documentación de la herramienta de claves para obtener una lista de comandos. Para más información sobre la API KeyStore, consulte la documentación oficial.

Pasos siguientes

Visite el centro de Azure para desarrolladores de Java para encontrar guías de inicio rápido de Azure, tutoriales y documentación de referencia de Java.