JMX provides security controls for Java application monitoring interfaces through authentication and encryption protocols. When configuring remote JMX access, two primary security measures include credential verification and transport layer encryption.
1. Configuring Remote JMX Access
Enable JMX remote capabilities using JVM parameters:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Djava.rmi.server.hostname=192.168.1.100
jmxremote.port=9999: Listening port for JMX connectionsjmxremote.ssl=false: Disable SSL (recommended to enable in production)jmxremote.authenticate=true: Require credential validationjava.rmi.server.hostname: IP address for RMI endpoint
2. Credential Configuration
Access control is managed through two configuration files:
Access Control File
monitorUser viewOnly
adminUser fullAccess
viewOnly: Read-only access to metricsfullAccess: Full read/write permissions
Credentials File
monitorUser securePass1
adminUser masterKey2
Important security requirements:
- File permissions must be restricted:
chmod 600 /opt/jmx/credentials - Plain text passwords are discouraged in production environments
3. SSL Encryption (Optional)
Enhance security with SSL/TLS by adding these JVM options:
-Dcom.sun.management.jmxremote.ssl=true
-Djavax.net.ssl.trustStore=/etc/keystore/truststore.jks
-Djavax.net.ssl.trustStorePassword=secure123
4. Connecting to JMX
Use monitoring tools with the following connection URL:
service:jmx:rmi:///jndi/rmi://192.168.1.100:9999/jmxrmi
5. Production Best Practices
- Always enable authentication
- Implement network-level access controls
- Restrict JMX ports to internal networks
- Rotate credentials periodically
Java Authentication and Authorization Service (JAAS)
JAAS provides a pluggable architecture for identity verification and access control in Java applications. It supports multiple authentication methods including LDAP, Kerberos, and custom implementations.
Core Components
- Authentication Module: Implements specific verification logic
- Subject: Represents authenticated entity with associated credentials
- Principal: Identity identifier (e.g., username, role)
- Policy: Access control rules for resources
JAAS Integration with JMX
Replace default JMX authentication with JAAS configuration:
1. Configuration File
JMXAuth {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/jmx.keytab"
principal="jmx/service@REALM";
};
2. Kerberos Keytab File
Keytab files require proper protection: chmod 600 /etc/security/jmx.keytab
3. JVM Options
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.login.config=JMXAuth
-Djava.security.auth.login.config=/etc/jaas/jmx.config
Authentication Process
- Create
LoginContextinstance - Invoke
login()method - Retrieve authenticated
Subject - Execute operations with
Subject.doAs()
Enterprise Use Cases
- Single sign-on integration
- Role-based access control
- Multi-factor authentication
- Centralized identity management