ssl.KeyManagerFactory.algorithm=PKIX ssl.TrustManagerFactory.algorithm=PKIX
FIPS 140-3 Compliance Support in Government Cloud
Configure Mule runtime engine (Mule) to run in a Federal Information Processing Standard (FIPS) 140-3 certified environment in MuleSoft Government Cloud.
Mule doesn’t run in FIPS security mode by default. To enable it, you must:
-
Install a certified cryptography module in your Java environment.
-
Adjust Mule runtime settings to run in FIPS security mode.
Follow the migration path that matches your scenario:
Compatibility
FIPS 140-3 support in MuleSoft Government Cloud requires:
-
Mule runtime engine 4.9 (Government Cloud supported version)
-
Java 17 or later
-
FIPS license from the license
.zipfile provided by MuleSoft (the non-FIPS license isn’t valid for FIPS mode)
Assumptions
This document assumes you are familiar with FIPS 140-3, the US government security standard that requires compliant parties to use only cryptographic algorithms and techniques certified by NIST.
These instructions use Bouncy Castle 2.0.0, the recommended FIPS 140-3 certified security provider for Mule runtime. If you use a different certified security provider, refer to that provider’s documentation for configuration instructions.
Migrating from FIPS 140-2 to FIPS 140-3
If you are currently running Mule in FIPS 140-2 mode and want to move to FIPS 140-3, apply these cipher and configuration changes.
Cipher and Protocol Changes
-
TLS and cipher suites:
FIPS 140-3 requires support for TLS 1.3 and TLS 1.2. Earlier TLS versions aren’t supported. Use only the FIPS 140-3 compliant cipher suites listed in the FIPS 140-3 Compliant Cipher Suites section. Remove or replace any custom TLS or cipher configuration that references FIPS 140-2-only or non–FIPS 140-3 cipher suites. -
Configuration file:
FIPS 140-3 uses the$MULE_HOME/conf/tls-fips140-3.conffile for TLS cipher configuration. Ensure your runtime uses this file and that you have removed or replaced references to any FIPS 140-2 TLS configuration file.
Security Provider and Java Configuration
-
Bouncy Castle version:
Replace the FIPS 140-2 Bouncy Castle provider (typically 1.x FIPS) with Bouncy Castle 2.0.0 FIPS. Install the JARs listed in Installing Bouncy Castle Security Provider and updatejava.securityto useBouncyCastleFipsProviderandBouncyCastleJsseProvideras shown there. -
KeyManagerFactoryandTrustManagerFactory:
In$JAVA_HOME/conf/security/java.security, set:
Runtime Configuration (wrapper.conf)
-
Security model:
Change the Mule security model from FIPS 140-2 to FIPS 140-3:# Enable FIPS 140-3 security mode (replace fips140-2) wrapper.java.additional.<n>=-Dmule.security.model=fips140-3
-
Approved-only mode:
Add or ensure:wrapper.java.additional.<n>=-Dorg.bouncycastle.fips.approved_only=true
-
Java 17+ module access:
Add:wrapper.java.additional.<n>=--add-opens=java.base/sun.security.provider=org.bouncycastle.fips.core
Keystore Format
-
BCFKS:
FIPS 140-3 requires keystores and truststores inBCFKSformat. If you are still usingPKCS12orJKSfrom your FIPS 140-2 setup, convert them toBCFKSusing the steps in FIPS 140-3 Compliant Keystore Formats. Update all TLS contexts in your Mule apps to reference the new keystores and settype="bcfks".
Migrating from Non-FIPS to FIPS 140-3
If you are running Mule in standard (non-FIPS) mode and need to move directly to FIPS 140-3, complete these steps.
Prerequisites
-
Mule runtime engine 4.9
-
Java 17 or later
-
A FIPS license from the license
.zipfile provided by MuleSoft.
Steps
-
Install the FIPS 140-3 certified cryptography provider:
Follow Installing Bouncy Castle Security Provider to install Bouncy Castle 2.0.0 FIPS and configurejava.security(providers andssl.KeyManagerFactory.algorithm/ssl.TrustManagerFactory.algorithm). -
Configure Mule for FIPS 140-3 mode:
In$MULE_HOME/conf/wrapper.conf, add the properties described in Running Mule in FIPS Security Mode (mule.security.model=fips140-3,org.bouncycastle.fips.approved_only=true, and the--add-opensoption). For Mule 4.9, set the keystore type explicitly:wrapper.java.additional.<n>=-Dmule.keystore.type=BCFKS
-
Convert keystores and truststores to BCFKS:
Standard Mule setups often usePKCS12orJKS. Convert all keystores and truststores used by your applications toBCFKSusing the procedure in FIPS 140-3 Compliant Keystore Formats. -
Update TLS configuration in Mule apps:
In your Mule configuration files, update everytls:contextto use the new BCFKS keystores and truststores withtype="bcfks"as shown in FIPS 140-3 Compliant Keystore Formats. -
Remove non-compliant cipher and protocol usage:
Don’t configure custom cipher suites or TLS versions that aren’t FIPS 140-3 compliant. Rely on the default FIPS 140-3 cipher suites (see FIPS 140-3 Compliant Cipher Suites) and ensure no connectors or custom code force non-approved algorithms. -
Verify connector compliance:
Only use connectors tagged asfips-140-3-verifiedin Anypoint Exchange. Replace or remove any connector that isn’t FIPS 140-3 verified (see Connectors Compatibility). -
Restart Mule and validate:
Save all changes, restart Mule, and confirm in startup logs that FIPS 140-3 security mode is enabled. Test connectivity and integrations that use TLS and cryptography.
Installing Bouncy Castle Security Provider
Mule runtime uses Bouncy Castle 2.0.0 as its FIPS 140-3 certified cryptography provider.
Installation Steps
These instructions show how to install and configure the Bouncy Castle security provider with Java 17 or later.
-
Verify that you are using Java 17 or later and
JAVA_HOMEis set. -
Download the Bouncy Castle 2.0.0 provider files from the Bouncy Castle website.
-
Copy the required JAR files to the
$MULE_HOME/lib/bootfolder:bc-fips-2.0.0.jar bctls-fips-2.0.19.jar bcpkix-fips-2.0.7.jar bcutil-fips-2.0.3.jar bcpg-fips-2.0.9.jar bcjmail-fips-2.0.5.jar
-
Configure the security providers in the
$JAVA_HOME/conf/security/java.securityfile:security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider security.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider fips:BCFIPS security.provider.3=SUN
-
Configure the key manager and trust manager algorithms in the same
java.securityfile:ssl.KeyManagerFactory.algorithm=PKIX ssl.TrustManagerFactory.algorithm=PKIX
Running Mule in FIPS Security Mode
After installing the Bouncy Castle provider, configure Mule to run in FIPS 140-3 mode:
-
Open your
wrapper.conffile (located in$MULE_HOME/conf). -
Add these properties. Replace
<n>with the next sequential number in your file:# Enable FIPS 140-3 security mode wrapper.java.additional.<n>=-Dmule.security.model=fips140-3 # Enable Bouncy Castle approved-only mode wrapper.java.additional.<n>=-Dorg.bouncycastle.fips.approved_only=true # Required for Java 17+ module access wrapper.java.additional.<n>=--add-opens=java.base/sun.security.provider=org.bouncycastle.fips.core # For Mule 4.9: set keystore type to BCFKS wrapper.java.additional.<n>=-Dmule.keystore.type=BCFKS
-
If you are using a clustered environment, also add the cluster encryption key:
wrapper.java.additional.<n>=-Dmule.cluster.network.encryption.key={your-encryption-key} -
Save your changes and start Mule runtime.
When Mule launches, the startup logs show that FIPS 140-3 security mode is enabled. Mule automatically restricts protocol negotiations to use only approved cryptographic cipher suites.
|
Not all connectors are FIPS 140-3 compliant. Only connectors tagged as |
FIPS 140-3 Compliant Cipher Suites
These cipher suites are enabled by default when running Mule in FIPS 140-3 mode. Use these when planning or validating migrations from FIPS 140-2 or non-FIPS runtimes.
TLS 1.3 Cipher Suites
-
TLS_AES_128_GCM_SHA256
-
TLS_AES_256_GCM_SHA384
-
TLS_AES_128_CCM_SHA256
-
TLS_AES_128_CCM_8_SHA256
TLS 1.2 Cipher Suites
-
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
-
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
-
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
-
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
-
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
-
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
-
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|
These cipher suites are configured in the |
FIPS 140-3 Compliant Keystore Formats
Keystores or truststores in Mule apps are often formatted as PKCS12 or JKS. These formats aren’t FIPS compliant. For compliance, convert them to BCFKS format:
-
Download the
bc-fips-2.0.0.jarfile from the Bouncy Castle website. -
Use this example command to convert a keystore to
BCFKSformat:
BC_FIPS_JAR=${BC_PATH}/bc-fips-2.0.0.jar # Replace with a correct path
OLD_KEYSTORE="keystore.jks" # Replace with the keystore to convert
OLD_PASSWD="changeit" # Replace with the keystore password
NEW_KEYSTORE="keystore.bcfks" # Replace with the new keystore
NEW_PASSWD="changeit" # Replace with the new keystore password
keytool -importkeystore \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-providerpath ${BC_FIPS_JAR} \
-srckeystore ${OLD_KEYSTORE} -srcstoretype JKS -srcstorepass ${OLD_PASSWD} \
-destkeystore ${NEW_KEYSTORE} -deststoretype BCFKS -deststorepass ${NEW_PASSWD}
If the source keystore is PKCS12, set -srcstoretype to PKCS12 in the keytool command.
|
-
Update the TLS configuration in your Mule configuration file to use the new keystore or truststore:
<tls:context> <tls:key-store type="bcfks" path="server.bcfks" password="changeit" keyPassword="changeit" alias="default" /> <tls:trust-store type="bcfks" path="client.bcfks" password="changeit" /> </tls:context>
Connectors Compatibility
Only connectors tagged as fips-140-3-verified in Anypoint Exchange are certified for use in FIPS 140-3 environments. To check compliance in Exchange before deploying:
-
Open Anypoint Exchange.
-
Search for the connector.
-
Check for the
fips-140-3-verifiedtag.
Tips and Limitations
-
Not all encryption schemes and signatures are FIPS 140-3 compliant. If your app uses a non-approved algorithm, you might see a runtime error such as:
Could not find encryption algorithm '<algorithm-name>'. You are running in FIPS mode, so please verify that the algorithm is compliant with FIPS.
-
Different environments can have different security configurations. Test before deploying to production.



