36 Enabling FIPS Mode
FIPS Overview
The Federal Information Processing Standards (FIPS) 140-3 is a standard that describes U.S. Federal government requirements for sensitive but unclassified use.
You can configure WebLogic Server as part of a FIPS 140-3 deployment by using Jipher JCE for cryptographic services and SunJSSE for TLS. The WebLogic Server procedures in this chapter configure the provider order and WebLogic Server keystore restrictions. They do not replace the application, SunJSSE, protocol, cipher suite, key material, named group, and Jipher enforcement guidance in Configuring an Application to Achieve FIPS 140-3 Compliance with Jipher in Jipher User Guide.
For supported versions of FIPS 140-3, see Supported FIPS 140 Standards and Cipher Suites.
Note:
Jipher 20 uses its security-patched OpenSSL FIPS module by default. The Jipher documentation distinguishes this default from use of the CMVP-validated module without additional security patches. Review the jipher.fips.deactivateSecurityPatches setting and its security tradeoff with your compliance and security owners, and disclose the selected module as described in the Jipher documentation.
Using Jipher JCE and SunJSSE Providers
The combination of the Jipher JCE, SUN, and SunJSSE providers creates the foundation of a FIPS-140-compliant implementation of WebLogic Server. Register Jipher JCE, SUN, and SunJSSE in positions one, two, and three, respectively, in the list of security providers. The SUN provider is required to verify the signature of the Jipher provider JAR.
Enabling FIPS 140-3 Mode with Jipher JCE and SunJSSE Providers
Configure the WebLogic Server provider order and keystore restrictions used as part of a FIPS 140-3 deployment with Jipher JCE and SunJSSE.
Configure the WebLogic Server portion of a FIPS 140-3 deployment by either creating your own java.security file and specifying Java options from the command line or by editing the installed JDK java.security file. Also complete the applicable configuration described in Configuring an Application to Achieve FIPS 140-3 Compliance with Jipher in Jipher User Guide.
Note:
The weblogic.security.autoRegisterJipherJceProvider property is not a substitute for either procedure in this section. It inserts only Jipher JCE at provider position one and preserves the relative order of the other providers. It does not configure the required SUN and SunJSSE positions, the default keystore type, strict WebLogic Server keystore enforcement, or the SunJSSE TLS requirements. See Automatically Register the Jipher JCE Provider for its general-purpose use and limitations.
Removing Dell JCE and Dell BSAFE JSSE Providers
Prior to WebLogic Server 14.1.2.0.0, FIPS 140 compliance was implemented using the Dell JCE and Dell BSAFE JSSE providers. FIPS 140 mode is now provided by the Jipher JCE and SunJSSE providers. You should remove references to the Dell providers from your WebLogic Server environment.
The Dell JCE and Dell BSAFE JSSE providers were previously known as RSA JCE and RSA BSAFE JSSE.
Note:
You only need to perform these steps if you are upgrading from WebLogic Server 14.1.1.0.0 or earlier and had previously modified your environment to be FIPS 140 compliant.To enable FIPS 140 mode, see Enabling FIPS 140-3 Mode with Jipher JCE and SunJSSE Providers.
Creating FIPS 140 Compliant Keystores
WebLogic Server can restrict keystore use to PKCS12, but the PKCS12 container type alone does not establish that the keystore was created or processed using only FIPS 140-3-allowed cryptography.
When WebLogic Server detects Jipher at provider position one, setting weblogic.security.fips140strictkeystores=true causes WebLogic Server to reject explicitly configured keystore types other than PKCS12. The java.security property keystore.type=pkcs12 must also set PKCS12 as the default keystore type. These settings enforce the container type; they do not validate which provider and algorithms created the keystore.
WARNING:
Jipher 20 does not provide a PKCS12 KeyStore service. The Jipher 20 documentation also states that, on JDK 25 and earlier, the JDK SUN provider's PKCS12 service uses HmacPBE algorithms based on the PKCS #12 key derivation function. Jipher's optional support for those algorithms deviates from FIPS 140-3.
Before enabling strict keystore enforcement in a deployment that requires FIPS 140-3 compliance, verify that the PKCS12 creation or conversion provider, integrity algorithm, provider order, and JVM and security properties meet the deployment's FIPS requirements. See Converting a Non-FIPS 140 Compliant Keystore Using the Jipher JCE Provider and Converting the Default JKS Keystore for FIPS 140 Compliance.
Converting a Non-FIPS 140 Compliant Keystore Using the Jipher JCE Provider
PKCS12 keystore conversion requires a provider and integrity algorithm that satisfy the deployment's FIPS requirements.
WARNING:
Do not specify -destprovidername JipherJCE for a PKCS12 keystore. Jipher 20 does not provide a PKCS12 KeyStore service; the JDK SUN provider supplies that service. In addition, the Jipher 20 documentation states that on JDK 25 and earlier the SUN PKCS12 service uses HmacPBE algorithms based on the PKCS #12 key derivation function. Enabling Jipher's optional support for those algorithms with jipher.nonfips.supportPkcs12Kdf=true deviates from FIPS 140-3.
Do not treat provider registration or successful keystore conversion alone as evidence of FIPS 140-3 compliance. Before converting a keystore, verify that the selected PKCS12 provider, integrity algorithm, provider order, and JVM and security properties meet the deployment's FIPS requirements.
For the current Jipher behavior, see Optionally Supported Non-FIPS 140-3 Allowed Algorithms and Registering Other Security Providers in Jipher User Guide.
Converting the Default JKS Keystore for FIPS 140 Compliance
PKCS12 keystore conversion requires a provider and integrity algorithm that satisfy the deployment's FIPS requirements.
WARNING:
Do not use -destprovidername JipherJCE with keytool. Jipher 20 does not provide a PKCS12 KeyStore service. The JDK SUN provider supplies the PKCS12 service, and the Jipher 20 documentation states that on JDK 25 and earlier this service uses HmacPBE algorithms based on the PKCS #12 key derivation function. Jipher can enable those algorithms only through jipher.nonfips.supportPkcs12Kdf=true, which the Jipher documentation identifies as a deviation from FIPS 140-3.
Before converting the JDK cacerts keystore, verify that the selected PKCS12 provider, integrity algorithm, provider order, and JVM and security properties meet the deployment's FIPS requirements. The JDK 21 and JDK 25 cacerts path is JAVA_HOME/lib/security/cacerts; correcting the path alone does not establish FIPS 140-3 compliance.
For the current Jipher behavior, see Optionally Supported Non-FIPS 140-3 Allowed Algorithms in Jipher User Guide.
Important Considerations When Using Web Services
When using web services in FIPS 140 mode, there are important considerations to keep in mind.
For example:
-
All certificates must have a key size length of 2048 bits.
SHA-1 Secure Hash Algorithm Not Supported
SHA-1 Secure Hash Algorithm is not supported in FIPS 140 mode. Therefore the following WS-SP <sp:AlgorithmSuite> values are not supported in FIPS 140 mode:
-
Basic256
-
Basic192
-
Basic128
-
TripleDes
-
Basic256Rsa15
-
Basic192Rsa15
-
Basic128Rsa15
-
TripleDesRsa15
As described in Using the SHA-256 Secure Hash Algorithm in Securing WebLogic Web Services for Oracle WebLogic Server, the WebLogic Server web service security policies support both the SHA-1 and much stronger SHA-2 (SHA-256) secure hash algorithms for hashing digital signatures. Specifically, Using the SHA-256 Policies describes which policies use the SHA-1 secure hash algorithm and their SHA-2 equivalents.
FIPS 140 mode requires an Extended Algorithm Suite when digital signatures are used. See Using the Extended Algorithm Suite (EAS) in Securing WebLogic Web Services for Oracle WebLogic Server.
If you enable FIPS 140 mode, change the <sp:AlgorithmSuite> element in the Security policy to one of the following supported <sp:AlgorithmSuite> values as described in Using the SHA-256 Secure Hash Algorithm:
-
Basic256Sha256
-
Basic192Sha256
-
Basic128Sha256
-
Basic256Exn256
-
Basic192Exn256
-
Basic128Exn256
-
TripleDesSha256
-
TripleDesExn256
-
Basic256Sha256Rsa15
-
Basic192Sha256Rsa15
-
Basic128Sha256Rsa15
-
Basic256Exn256Rsa15
-
Basic192Exn256Rsa15
-
Basic128Exn256Rsa15
-
TripleDesSha256Rsa15
-
TripleDesExn256Rsa15
For example, to edit an existing Basic256 Algorithm Suite to an EAS Algorithm Suite, then change the policy from
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
to
<sp:AlgorithmSuite>
<wsp:Policy>
<orasp:Basic256Exn256 xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy"/>
</wsp:Policy>
</sp:AlgorithmSuite>X509PKIPathv1 token Not Supported
The X509PKIPathv1 token is not supported for FIPS 140 mode in this release of WebLogic Server. If you use the X509PKIPathv1 token in a custom policy, change the policy to use the PKCS7 token instead.
Specifically, the following two policy assertions are not supported in FIPS 140 mode in this release of WebLogic Server:
-
<sp:WssX509PkiPathV1Token10/> -
<sp:WssX509PkiPathV1Token11/>
If you use these two policy assertions, change them to the following two assertions instead:
-
<sp:WssX509Pkcs7Token10/> -
<sp:WssX509Pkcs7Token11/>
For example, if the policy has the following assertion in the custom policy:
<wsp:Policy>
<sp:X509Token sp:IncludeToken=". . .">
<wsp:Policy>
<sp:WssX509PkiPathV1Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
replace it with the following policy assertion:
<wsp:Policy>
<sp:X509Token sp:IncludeToken=". . .">
<wsp:Policy>
<sp:WssX509Pkcs7Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
Or, if the policy has the following assertion in the custom policy:
<wsp:Policy>
<sp:X509Token sp:IncludeToken=". . .">
<wsp:Policy>
<sp:RequireThumbprintReference/>
<sp:WssX509PkiPathV1Token11/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
replace it with the following assertion:
<wsp:Policy>
<sp:X509Token sp:IncludeToken=". . .">
<wsp:Policy>
<sp:RequireThumbprintReference/>
<sp:WssX509Pkcs7Token11/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>