Java KeyStore (JKS) Integration Guide
Overview
The CBOM Secure Discover_Keystore sensor scans Java KeyStore (JKS) files and extracts cryptographic asset metadata. JKS is Java’s native format, used in Tomcat, JBoss, WebSphere, and middleware to store PrivateKeyEntry (keys + chains) and TrustedCertificateEntry (trusted certs). The sensor is read-only.
Note
JKS is deprecated since JDK 9; Oracle recommends PKCS12. The sensor supports both, use JKS discovery to plan migration.
Prerequisites
- JDK 8+ on the host with keytool available.
- CBOM Agent 2.4.0+ on the host (or one with filesystem access).
- Keystore paths (.jks / .keystore) and store passwords.
- Read-only filesystem access for the agent user, and a CBOM API token.
Step-by-Step Guide
Step 1: Locate and Inspect JKS Files
find /opt /etc /home /var/lib /usr/local \( -name "*.jks" -o -name "*.keystore" \) -type f 2>/dev/null keytool -list -v -keystore /opt/app/conf/keystore.jks -storepass changeit
Step 2: Configure a Least-Privilege Service Account
sudo useradd --system --no-create-home --shell /sbin/nologin cbom-sensor sudo setfacl -m u:cbom-sensor:r /opt/app/conf/keystore.jks sudo -u cbom-sensor keytool -list -keystore /opt/app/conf/keystore.jks -storepass changeit
Step 3: Store Keystore Passwords Securely
cbom-agent secret set jks_keystore_password "changeit" # or a systemd EnvironmentFile at /etc/cbom/jks-secrets.env (chmod 600)
Step 4: Configure the CBOM Secure Sensor
sensor:
name: Discover_Keystore
enabled: true
format: jks
cbom_platform:
endpoint: "https://cbom.example.com"
api_token: "${CBOM_API_TOKEN}"
discovery:
keystores:
- path: "/opt/app/conf/keystore.jks"
store_password: "${secret:jks_keystore_password}"
entry_types: [PrivateKeyEntry, TrustedCertificateEntry]
filesystem_scan:
enabled: true
scan_roots: ["/opt", "/etc", "/var/lib"]
patterns: ["*.jks", "*.keystore"]
max_depth: 10
reporting:
include_certificate_metadata: true
include_key_algorithm: true
include_validity_dates: true
agent:
run_as_user: "cbom-sensor"
sudo cbom-agent config validate /etc/cbom/sensors/discover_keystore.yaml sudo systemctl reload cbom-agent
Step 5: Validate
sudo cbom-agent sensor run Discover_Keystore --config /etc/cbom/sensors/discover_keystore.yaml tail -f /var/log/cbom/discover_keystore.log
Confirm entries are found per keystore and reported, then verify under Assets → Keystores with correct aliases, algorithms, sizes, and validity dates.
Common Errors
Keystore was tampered with, or password was incorrect
Cause: The store password does not match, or the file is corrupted.
Resolution: Verify with keytool -list; update the CBOM secret if changed; check file integrity.
Permission denied
Cause: The cbom-sensor user lacks read permission.
Resolution: Grant read via setfacl and confirm with sudo -u cbom-sensor keytool -list.
JKS not supported in FIPS mode
Cause: The JVM runs in FIPS mode, which disables the legacy JKS type.
Resolution: Convert the keystore to PKCS12 (keytool -importkeystore) and set format: pkcs12.
Security Recommendations
- Never store keystore passwords in plaintext, use the CBOM secret store or a secrets manager.
- Run the agent under a dedicated least-privilege account with file-level read only.
- Migrate JKS to PKCS12 (deprecated since JDK 9) for interoperability and stronger protection.
- Restrict keystore file permissions (chmod 640, owning app user + shared group).
- Rotate keystore passwords and use CBOM expiry alerts to plan renewals.
Conclusion
The Discover_Keystore sensor provides read-only discovery of private-key and trusted-certificate entries in JKS files and, since JKS is deprecated, the discovery data doubles as a migration plan toward PKCS12 across Java infrastructure.
