Oracle Database FIPS 140-2 and FIPS 140-3 Settings

Oracle supports the Federal Information Processing Standard (FIPS) standards for 140-2 and 140-3.

About the Oracle Database FIPS 140-2 Settings

Federal Information Processing Standards (FIPS) are standards and guidelines for federal computer systems that are developed by the U.S. National Institute of Standards and Technology (NIST).

FIPS was developed in accordance with the Federal Information Security Management Act (FISMA). Although FIPS was developed for use by the federal government, many private sector entities voluntarily use these standards.

Oracle Database 19c supports two FIPS 140 standard versions, depending on the active cryptographic provider:

Note: The National Institute of Standards and Technology (NIST) has announced that FIPS 140-2 will be moved to the historical list on September 22, 2026. After this date, NIST will no longer accept FIPS 140-2 validation submissions and will begin transitioning listed modules to the historical list.

Enabling FIPS Mode with the Legacy provider (Current 19c Default):

The legacy provider requires three settings to enable FIPS 140-2 mode:

  1. For TLS, set SSLFIPS_140=true in the fips.ora file, located by default in $ORACLE_HOME/ldap/admin.

  2. For NNE, set SQLNET.FIPS_140=TRUE in the sqlnet.ora file, located by default in $ORACLE_HOME/network/admin.

  3. For TDE and DBMS_CRYPTO, set the DBFIPS_140=true initialization parameter.

Enabling FIPS Mode with the Next-Generation provider:

The next-generation provider uses a simplified two-parameter model:

  1. Set FIPS_140=TRUE in the fips.ora file.

  2. Set FIPS_140_3=TRUE in the fips.ora file.

The FIPS_140_3 parameter enables FIPS 140-3 mode.

Only one cryptographic provider can be active at a time. You cannot run FIPS 140-2 and FIPS 140-3 simultaneously in the same database instance.

FIPS 140 Support by Cryptographic Provider

FIPS support depends on the active cryptographic provider.

Cryptographic Provider FIPS Standard Configuration
Legacy Dell BSAFE Crypto-C Micro Edition Suite (MES) provider FIPS 140-2 Use the existing FIPS 140-2 parameters.
Next-generation OpenSSL provider FIPS 140-3 Set FIPS_140=TRUE and FIPS_140_3=TRUE.

To enable FIPS mode in Oracle Database 19c, follow the configuration steps appropriate for the active cryptographic provider.

Configuring FIPS with the Legacy provider (Default):

The legacy provider requires three separate settings:

  1. For TLS: Set SSLFIPS_140=true in the fips.ora file (default location: $ORACLE_HOME/ldap/admin).

  2. For NNE: Set SQLNET.FIPS_140=TRUE in the sqlnet.ora file (default location: $ORACLE_HOME/network/admin).

  3. For TDE and DBMS_CRYPTO: Set the DBFIPS_140=true initialization parameter.

This enables FIPS 140-2 mode. The legacy provider supports only FIPS 140-2.

Configuring FIPS with the Next-Generation provider:

The next-generation provider uses a simplified configuration in the fips.ora file:

FIPS_140 = TRUE
FIPS_140_3 = TRUE

Set FIPS_140_3=TRUE to enable FIPS 140-3 mode with the OpenSSL FIPS provider.

The following legacy FIPS parameters are deprecated when the next-generation provider is active:

If both SSLFIPS_140 and FIPS_140 are present, FIPS_140 takes precedence.

Restart the database instance and Oracle Net listener after changing FIPS configuration.

To verify that FIPS mode is active, check the database alert log for a message indicating the FIPS mode is in effect.

Configuring FIPS 140-2 and FIPS 140-3 for Transparent Data Encryption and DBMS_CRYPTO

To enable FIPS mode for Transparent Data Encryption (TDE) and the DBMS_CRYPTO PL/SQL package in Oracle Database 19c, follow the configuration steps appropriate for the active cryptographic provider.

Configuring FIPS with the Legacy provider (Default):

For the legacy provider, set the DBFIPS_140=true initialization parameter. This enables FIPS 140-2 mode for TDE and DBMS_CRYPTO.

The effect of this parameter depends on the platform.

Linux or Windows on Intel x86_64:

Solaris 11.1+ on either SPARC T-series or Intel x86_64:

Other operating systems or hardware:

Be aware that setting DBFIPS_140 to TRUE and thus using the underlying library in FIPS mode incurs a certain amount of overhead when the library is first loaded for each process. This is due to the verification of the signature and the execution of the self tests on the library. Once the library is loaded, then there is no other impact on performance.

Configuring FIPS with the Next-Generation provider:

For the next-generation provider, use the simplified FIPS configuration in the fips.ora file:

FIPS_140 = TRUE
FIPS_140_3 = TRUE

The DBFIPS_140 initialization parameter is no longer required with the next-generation provider. If both legacy FIPS parameters and next-generation FIPS parameters are present, the next-generation FIPS_140 setting takes precedence.

Restart the database instance after changing FIPS configuration.

Configuration of FIPS 140-2 and FIPS 140-3 for Transport Layer Security

The FIPS configuration parameters configure FIPS mode for Transport Layer Security (TLS).

Configuring FIPS Parameters for Transport Layer Security

To enable FIPS mode for TLS in Oracle Database 19c, follow the configuration steps appropriate for the active cryptographic provider.

Configuring FIPS with the Legacy provider (Default):

  1. Ensure that the fips.ora file is either located in the $ORACLE_HOME/ldap/admin directory, or is in a location pointed to by the FIPS_HOME environment variable.

  2. In the fips.ora file, set the SSLFIPS_140 parameter.

    SSLFIPS_140=TRUE

    This parameter is FALSE by default.

  3. If you are using Oracle Instant Client, then set SSLFIPS_LIB to the location of the FIPS library. For example:

    SSLFIPS_LIB=$ORACLE_HOME/lib
  4. Repeat this procedure in any Oracle Database home for any database server or client.

When you set SSLFIPS_140 to TRUE, Transport Layer Security cryptographic operations take place in the embedded RSA/Micro Edition Suite (MES) library in FIPS mode. These cryptographic operations are accelerated by the CPU when hardware acceleration is available and properly configured in the host hardware and software.

If you set SSLFIPS_140 to FALSE, then Transport Layer Security cryptographic operations take place in the embedded RSA/Micro Edition Suite (MES) library in non-FIPS mode, and as with the TRUE setting, the operations are accelerated if possible.

Configuring FIPS with the Next-Generation provider:

The next-generation provider uses a simplified configuration in the fips.ora file:

FIPS_140 = TRUE
FIPS_140_3 = TRUE

Set FIPS_140_3=TRUE to enable FIPS 140-3 mode with the OpenSSL FIPS provider.

The SSLFIPS_140 parameter is deprecated when the next-generation provider is active. Use FIPS_140 instead. If both SSLFIPS_140 and FIPS_140 are present, FIPS_140 takes precedence.

Restart the database instance and Oracle Net listener after changing FIPS configuration.

Note: The SSLFIPS_140 parameter replaces the SQLNET.SSLFIPS_140 parameter used in Oracle Database 10g release 2 (10.2). For the legacy provider, you must set the parameter in the fips.ora file, and not the sqlnet.ora file.

Approved TLS Cipher Suites for FIPS 140-2

A cipher suite is a set of authentication, encryption, and data integrity algorithms that exchange messages between network nodes.

During a TLS handshake, for example, the two nodes negotiate to see as to which cipher suite they will use when transmitting messages back and forth.

Configuring Specific Cipher Suites

Oracle Database TLS cipher suites are automatically set to FIPS approved cipher suites. If you want to configure specific cipher suites, then you can do so by setting the TLS_CIPHER_SUITES parameter in the sqlnet.ora or the listener.ora file.

TLS_CIPHER_SUITES=(TLS_cipher_suite1[,TLS_cipher_suite2[,..]])

You can also use Oracle Net Manager to set this parameter on the server and the client.

If a specific cipher suite is not specified, then Oracle Database will use the strongest cipher suite common to both the database server and client. The priority order of cipher suites to be selected are in order as they are listed in the preferred and less preferred cipher lists below. Oracle Database will not select 3DES cipher suites automatically due to their weakness; they must be configured explicitly.

Preferred Cipher Suites

The following cipher suites are approved for FIPS validation if you are using Transport Layer Security (TLS) version 1.2:

The following cipher suites are approved for FIPS validation if you are using Transport Layer Security (TLS) version 1, 1.1, or 1.2:

3DES-Based Cipher Suites

Oracle does not recommend 3DES-based cipher suites because of a weakness in their design. Oracle Database release 21c and later contains support for the following 3DES-based cipher suites. However, they are not enabled by default and must be explicitly configured through the TLS_CIPHER_SUITES parameter in the sqlnet.ora or the listener.ora file.

Configuration of FIPS 140-2 and FIPS 140-3 for Native Network Encryption

You can configure FIPS for native network encryption by setting parameters for the active cryptographic provider.

About Configuration of FIPS Mode for Native Network Encryption

The configuration of FIPS mode for native network encryption depends on the active cryptographic provider.

With the legacy provider, you enable FIPS 140-2 mode for native network encryption by setting SQLNET.FIPS_140=TRUE in the sqlnet.ora configuration file.

With the next-generation provider, you enable FIPS 140-3 mode by setting FIPS_140=TRUE and FIPS_140_3=TRUE in the fips.ora file.

The algorithms that FIPS mode supports for native network encryption are as follows:

Configuring FIPS Parameters for Native Network Encryption

To enable FIPS mode for native network encryption in Oracle Database 19c, follow the configuration steps appropriate for the active cryptographic provider.

Configuring FIPS with the Legacy provider (Default):

  1. Locate the sqlnet.ora file that is used by the database client or database server.

  2. Add the following line to the sqlnet.ora file:

    SQLNET.FIPS_140=TRUE
  3. Repeat this procedure in any Oracle Database home for any database server or client.

When FIPS_140 is set to TRUE, native network encryption cryptographic operations take place in the embedded BSAFE Micro Edition Suite (MES) library in FIPS mode. These cryptographic operations are accelerated by the CPU when hardware acceleration is available and properly configured in the host hardware and software.

Configuring FIPS with the Next-Generation provider:

The next-generation provider uses a simplified configuration in the fips.ora file:

FIPS_140 = TRUE
FIPS_140_3 = TRUE

The SQLNET.FIPS_140 parameter in sqlnet.ora is no longer required with the next-generation provider. Restart the database instance and Oracle Net listener after changing FIPS configuration.

Postinstallation Checks for FIPS 140-2

After you configure the FIPS 140-2 settings, you must verify permissions in the operating system.

The permissions are as follows:

To comply with FIPS 140-2 Level 2 requirements, in the security policy, include procedures to prevent unauthorized users from reading, modifying or executing Oracle Cryptographic Libraries processes and the memory they are using in the operating system.

Verifying FIPS 140-2 Connections

You can use trace files and other methods to verify the FIPS 140-2 connections.

Verifying FIPS 140-2 Connections for Transport Layer Security

You can use trace files to check the FIPS 140-2 connections for Transport Layer Security (TLS).

  1. Add the following lines to sqlnet.ora to enable tracing:

    trace_directory_server=trace_directory
    trace_file_server=trace_file
    trace_level_server=trace_level

    For example:

    trace_directory=/private/oracle/owm
    trace_file_server=fips_trace.trc
    trace_level_server=16

    Trace level 16 is the minimum trace level required to check the results of the FIPS self-tests.

  2. Check the trace files by searching for Provider Type: FIPS140.

Verifying FIPS 140-2 Connections for Network Native Encryption

You can use trace files to check the FIPS 140-2 connections for network native encryption.

  1. Add the following lines to sqlnet.ora to enable tracing:
trace_directory_server=trace_directory
trace_file_server=trace_file
trace_level_server=trace_level
For example:
trace_directory=/private/oracle/owm
trace_file_server=fips_trace.trc
trace_level_server=16
Trace level 16 is the minimum trace level required to check the results of the FIPS self-tests.
  1. Check the trace files by searching for FIPS DAC check succeeded.

Verifying FIPS 140-2 Connections for Transparent Data Encryption and DBMS_CRYPTO

You can check if FIPS mode is enabled by using SQL*Plus.

  1. Connect to the database instance by using SQL*Plus.

  2. Execute the following SHOW PARAMETER command:

SHOW PARAMETER DBFIPS_140
Output similar to the following should appear:
NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------
DBFIPS_140                           boolean     TRUE

Ensuring Encryption Algorithms are FIPS 140-3 Compliant

FIPS 140-3 desupports 3DES (Triple Data Encryption Standard) encryption algorithms. 3DES encryption is outdated, slow, and no longer considered secure in the modern threat environment. In line with current security best practices, Oracle recommends transitioning to the Advanced Encryption Standard (AES). AES offers improved security, performance, and resistance to known attacks. Review your encryption configurations, including transparent data encryption and network encryption, to ensure that you do not use 3DES. If you have not done so already, convert Oracle Wallets created prior to Oracle Database 19.22 to use AES. If you find any use of 3DES, then transition to a more secure cipher such as AES.

In preparation for this move, you should complete the following checks.

  1. Validate that encrypted tablespaces do not use 3DES by running the following:

    select ENCRYPTIONALG from gv$encrypted_tablespaces where ENCRYPTIONALG like '3DES%';

    If any tablespaces are found that use 3DES, you should follow Rekeying an Existing Tablespace with Online Conversion in the Oracle Database Advanced Security Guide to rekey your encrypted tablespace with AES256.

  2. Validate that encrypted columns do not use 3DES by running the following:

    select encryption_alg from dba_encrypted_columns where ENCRYPTION_ALG like '%DES%';

    If any encrypted columns are found that use 3DES, you should follow Changing the Encryption Key or Algorithm for Tables with Encrypted Columns in the Oracle Database Advanced Security Guide to rekey your encrypted columns with AES256.

  3. Validate that your Oracle Wallets use AES256 instead of 3DES by running the following:

    openssl pkcs12 -info -in ./ewallet.p12 -password pass:"<wallet password>" -nodes |grep "PKCS7"

    This should bring back results with a line that looks something like this:

    PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 10000, PRF hmacWithSHA256

    If that line does not show AES-256-CBC, then you should follow the procedure at Converting an Oracle Wallet to Use the AES256 Algorithm to convert your wallet to AES256. Note: Wallets created prior to Oracle Database 19.22 (January 2024) are likely to have used 3DES unless explicitly created using AES256.

FIPS 140-3 Algorithm Restrictions

When FIPS 140-3 mode is active (next-generation provider with FIPS_140=TRUE and FIPS_140_3=TRUE), the following algorithm restrictions apply in addition to the standard next-generation provider restrictions:

FIPS 140-3 desupports 3DES. 3DES encryption is outdated, slow, and no longer considered secure. Oracle recommends transitioning to AES.

Algorithms Not Available in FIPS 140-3 Mode:

Algorithms Supported in FIPS 140-3 Mode:

Minimum Key Strengths in FIPS Mode:

Note: In non-FIPS mode, the default minimum security strength is 80 bits.

Note: PQC algorithms (ML-KEM, ML-DSA) are supported in FIPS 140-3 mode and non-FIPS mode, but are not available in FIPS 140-2 mode.

Migrating from FIPS 140-2 to FIPS 140-3

To migrate from FIPS 140-2 (legacy provider) to FIPS 140-3 (next-generation provider), perform the following steps:

  1. Audit the current cryptographic configuration.

    • Identify all TLS connections using TLS 1.0 or TLS 1.1. These must be upgraded to TLS 1.2 or later before migration.
    • Identify all configurations, like TDE, DBMS_CRYPTO, and Oracle Wallet, using 3DES. FIPS 140-3 desupports 3DES. 3DES encryption is outdated, slow, and no longer considered secure. Oracle recommends transitioning to AES.
    • Identify all certificates signed with SHA-1 or MD5. These must be replaced with certificates using SHA-256 or stronger. Check certificate details with orapki wallet display -wallet wallet_dir -complete -details.
    • Identify all configurations using DES (deprecated), RC2, RC4 (deprecated), RC5, SEED (desupported), GOST (desupported), or ARIA (only supported in non-FIPS mode). These algorithms are not available when moving to FIPS 140-3.
    • Check wallet encryption. Wallets created before Oracle Database 19.22 may use 3DES. Check with openssl pkcs12 -info -in ./ewallet.p12 -nodes. Convert with orapki wallet convert -wallet wallet_location -compat_v12.
    • Verify RSA key lengths meet FIPS minimums (2048-bit minimum; NIST recommends 3072-bit after 2030). Verify ECC key lengths (224-bit minimum).
  2. Remediate identified incompatibilities.

    • Update TLS version configurations to use TLS 1.2 or TLS 1.3.
    • Replace 3DES with AES in all encryption configurations. If SQLNET.ENCRYPTION_TYPES_SERVER is not set, no changes are needed. If the parameter is set, remove deprecated algorithms and use:

      SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
    • Re-issue certificates using SHA-256 or stronger signing algorithms.
    • Replace legacy encryption algorithms with AES equivalents.
    • Convert any 3DES-encrypted wallets to AES-256.
    • If you use explicit NNE checksum configuration, update the checksum to SHA512:

      SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA512)
  3. Update FIPS configuration parameters.

    Remove the following legacy FIPS settings:

    • SSLFIPS_140=true from fips.ora
    • SQLNET.FIPS_140=TRUE from sqlnet.ora
    • DBFIPS_140=true initialization parameter

    Add the following next-generation provider FIPS settings in fips.ora:

    FIPS_140 = TRUE
    FIPS_140_3 = TRUE
  4. Switch the cryptographic provider:

    $ python $ORACLE_HOME/bin/set_crypto_provider.py --provider openssl
  5. Restart the database instance and Oracle Net listener.

  6. Verify FIPS 140-3 mode is active by checking the database alert log.

  7. Test all TLS connections, encryption operations, and certificate-based authentication.

Note: This migration cannot be performed incrementally. You must resolve all incompatibilities before switching providers, as the switch is an all-or-nothing operation for the entire database instance.

Rollback Procedure:

If issues arise after switching to the next-generation provider, you can revert to the legacy provider:

  1. Switch back:

    python $ORACLE_HOME/bin/set_crypto_provider.py --provider mes
  2. Restore the legacy provider FIPS settings: SSLFIPS_140, SQLNET.FIPS_140, and DBFIPS_140.

  3. Restart the database instance and Oracle Net listener.

Note: PQC certificates (ML-DSA) created while the next-generation provider was active will not function with the legacy provider.