OPENSSL-FIPSINSTALL(1ossl)

πŸ“¦
version 15.1 Β· 2 versions
, in freebsd 15.1

πŸ’– openssl-fipsinstall β€” OpenSSL manual page (OPENSSL-FIPSINSTALL(1ossl)) πŸ’–

okay bestie, welcome to the OpenSSL manual page for openssl-fipsinstall β€” aka OPENSSL-FIPSINSTALL(1ossl). It’s giving β€œFIPS config installation” main character energy, and we are literally about to get into it ✨.

🌸 NAME 🌸

openssl-fipsinstall β€” perform FIPS configuration installation.

Periodt. That’s the whole assignment: this command does the FIPS configuration installation thing πŸ’….

✨ SYNOPSIS ✨

This is the full invocation vibe, no cap β€” every flag and argument is right here:

openssl fipsinstall [-help] [-in configfilename] [-out configfilename]
[-module modulefilename] [-provider_name providername] [-section_name
sectionname] [-verify] [-mac_name macname] [-macopt nm:v] [-noout]
[-quiet] [-pedantic] [-no_conditional_errors] [-no_security_checks]
[-hmac_key_check] [-kmac_key_check] [-ems_check]
[-no_drbg_truncated_digests] [-signature_digest_check]
[-hkdf_digest_check] [-tls13_kdf_digest_check] [-tls1_prf_digest_check]
[-sshkdf_digest_check] [-sskdf_digest_check] [-x963kdf_digest_check]
[-dsa_sign_disabled] [-no_pbkdf2_lower_bound_check] [-no_short_mac]
[-tdes_encrypt_disabled] [-rsa_pkcs15_padding_disabled]
[-rsa_pss_saltlen_check] [-rsa_sign_x931_disabled] [-hkdf_key_check]
[-kbkdf_key_check] [-tls13_kdf_key_check] [-tls1_prf_key_check]
[-sshkdf_key_check] [-sskdf_key_check] [-x963kdf_key_check]
[-x942kdf_key_check] [-ecdh_cofactor_check] [-self_test_onload]
[-self_test_oninstall] [-corrupt_desc selftest_description]
[-corrupt_type selftest_type] [-config parent_config]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so here’s the tea β˜•: this command is used to generate a FIPS module configuration file. That configuration file can be used each time a FIPS module is loaded, so it can pass data to the FIPS module self tests. The FIPS module always verifies its MAC, but optionally it only needs to run the KAT’s once, at installation. iykyk.

The generated configuration file consists of:

  • A MAC of the FIPS module file.
  • A test status indicator. This indicates if the Known Answer Self Tests (KAT’s) have successfully run.
  • A MAC of the status indicator.
  • A control for conditional self tests errors. By default, if a continuous test (e.g a key pair test) fails, then the FIPS module will enter an error state, and no services or cryptographic algorithms will be able to be accessed after this point. The default value of '1' will cause the fips module error state to be entered. If the value is '0', then the module error state will not be entered. Regardless of whether the error state is entered or not, the current operation (e.g. key generation) will return an error. The user is responsible for retrying the operation if the module error state is not entered.
  • A control to indicate whether run-time security checks are done. This indicates if run-time checks related to enforcement of security parameters such as minimum security strength of keys and approved curve names are used. The default value of '1' will perform the checks. If the value is '0', the checks are not performed and FIPS compliance must be done by procedures documented in the relevant Security Policy.

This file is described in fips_config(5).

✨ OPTIONS ✨

okay bestie, this is the big one β€” the option buffet. grab a snack πŸ“

  • -help β€” prints a usage message, that's it, that's the whole vibe πŸ’…
  • -module filename β€” the filename of the FIPS module you want to do an integrity check on. heads up: the path you give in the filename is what gets used to load the module when it's activated, and this overrides the environment variable OPENSSL_MODULES. so like, this path is the main character, periodt πŸ‘‘
  • -out configfilename β€” filename where the configuration data gets written out. the default? standard output. classic. πŸŽ€
  • -in configfilename β€” input filename to load configuration data from. you must use this if you're using the -verify option. non-negotiable fr fr
  • -verify β€” verifies that the input configuration file actually contains the correct information. vibe check on the config file βœ…
  • -provider_name providername β€” the name of the provider inside the configuration file. default value is "fips".
  • -section_name sectionname β€” the name of the section inside the configuration file. default value is "fips_sect".
  • -mac_name name β€” specifies the name of a supported MAC algorithm that'll be used. which MAC mechanisms are available depends on the options used when building OpenSSL, so it's giving "your mileage may vary" πŸ’«. to see the list of supported MAC's, run openssl list -mac-algorithms. the default is HMAC.
  • -macopt nm:v β€” passes options to the MAC algorithm. you can find a comprehensive list of controls in the EVP_MAC implementation documentation. the common control strings used for this command are:
    • key:string β€” specifies the MAC key as an alphanumeric string (use this if the key contains printable characters only). the string length must conform to any restrictions of the MAC algorithm. a key must be specified for every MAC algorithm. if no key is provided, the default that was specified when OpenSSL was configured is used.
    • hexkey:string β€” specifies the MAC key in hexadecimal form (two hex digits per byte). the key length must conform to any restrictions of the MAC algorithm. a key must be specified for every MAC algorithm. if no key is provided, the default that was specified when OpenSSL was configured is used.
    • digest:string β€” used by HMAC as an alphanumeric string (use this if the key contains printable characters only). the string length must conform to any restrictions of the MAC algorithm. to see the list of supported digests, use the command openssl list -digest-commands. the default digest is SHA-256.
  • -noout β€” disables logging of the self tests. no logs, no stress 😌
  • -pedantic β€” configures the module so it's strictly FIPS compliant rather than backwards compatible. this enables conditional errors, security checks, etc. > ⚠️ note that any previous configuration options will be overwritten, and any subsequent configuration options that violate FIPS compliance will result in an error. so like, choose your path wisely bestie, this one does not play πŸ’€
  • -no_conditional_errors β€” configures the module to not enter an error state if a conditional self test fails as described above.
  • -no_security_checks β€” configures the module to not perform run-time security checks as described above. oh and psst β€” enabling the configuration option no-fips-securitychecks gives you another way to turn off the check at compile time πŸ‘€
  • -ems_check β€” configures the module to enable a run-time Extended Master Secret (EMS) check when using the TLS1_PRF KDF algorithm. this check is disabled by default. see RFC 7627 for the EMS lore πŸ“œ
  • -no_short_mac β€” configures the module to not allow short MAC outputs. see SP 800-185 8.4.2 and FIPS 140-3 ID C.D for details.
  • -hmac_key_check β€” configures the module to not allow small key sizes when using HMAC. see SP 800-131Ar2 for details.
  • -kmac_key_check β€” configures the module to not allow small key sizes when using KMAC. see SP 800-131Ar2 for details.
  • -no_drbg_truncated_digests β€” configures the module to not allow truncated digests to be used with Hash and HMAC DRBGs. see FIPS 140-3 IG D.R for details.
  • -signature_digest_check β€” configures the module to enforce signature algorithms to use digests that are explicitly permitted by the various standards.
  • -hkdf_digest_check β€” this option is deprecated. it's giving legacy, it's giving "we don't do that anymore" πŸ™ˆ
  • -tls13_kdf_digest_check β€” configures the module to enable a run-time digest check when deriving a key by TLS13 KDF. see RFC 8446 for details.
  • -tls1_prf_digest_check β€” configures the module to enable a run-time digest check when deriving a key by TLS_PRF. see NIST SP 800-135r1 for details.
  • -sshkdf_digest_check β€” configures the module to enable a run-time digest check when deriving a key by SSHKDF. see NIST SP 800-135r1 for details.
  • -sskdf_digest_check β€” this option is deprecated too. same energy πŸ’€
  • -x963kdf_digest_check β€” configures the module to enable a run-time digest check when deriving a key by X963KDF. see NIST SP 800-131Ar2 for details.
  • -dsa_sign_disabled β€” configures the module to not allow DSA signing (DSA signature verification is still allowed, she's still invited to the party). see FIPS 140-3 IG C.K for details.
  • -tdes_encrypt_disabled β€” configures the module to not allow Triple-DES encryption. Triple-DES decryption is still allowed for legacy purposes. see SP800-131Ar2 for details.
  • -rsa_pkcs15_padding_disabled β€” configures the module to not allow PKCS#1 version 1.5 padding to be used with RSA for key transport and key agreement. see NIST's SP 800-131A Revision 2 for details.
  • -rsa_pss_saltlen_check β€” configures the module to enable a run-time salt length check when generating or verifying a RSA-PSS signature. see FIPS 186-5 5.4 (g) for details.
  • -rsa_sign_x931_disabled β€” configures the module to not allow X9.31 padding to be used when signing with RSA. see FIPS 140-3 IG C.K for details.
  • -hkdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by HKDF. see NIST SP 800-131Ar2 for details.
  • -kbkdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by KBKDF. see NIST SP 800-131Ar2 for details.
  • -tls13_kdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by TLS13 KDF. see NIST SP 800-131Ar2 for details.
  • -tls1_prf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by TLS_PRF. see NIST SP 800-131Ar2 for details.
  • -sshkdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by SSHKDF. see NIST SP 800-131Ar2 for details.
  • -sskdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by SSKDF. see NIST SP 800-131Ar2 for details.
  • -x963kdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by X963KDF. see NIST SP 800-131Ar2 for details.
  • -x942kdf_key_check β€” configures the module to enable a run-time short key-derivation key check when deriving a key by X942KDF. see NIST SP 800-131Ar2 for details.
  • -no_pbkdf2_lower_bound_check β€” configures the module to not perform run-time lower bound check for PBKDF2. see NIST SP 800-132 for details.
  • -ecdh_cofactor_check β€” configures the module to enable a run-time check that ECDH uses the EC curves cofactor value when deriving a key. this only affects the 'B' and 'K' curves. see SP 800-56A r3 Section 5.7.1.2 for details.
  • -self_test_onload β€” does not write the two fields related to the "test status indicator" and "MAC status indicator" to the output configuration file. without these fields, the self tests KATS will run each time the module is loaded. this option could be used for cross compiling, since the self tests need to run at least once on each target machine. once the self tests have run on the target machine, the user could possibly then add the 2 fields into the configuration using some other mechanism. this option defaults to 0 for any OpenSSL FIPS 140-2 provider (OpenSSL 3.0.X). and it's not relevant for an OpenSSL FIPS 140-3 provider, since this is no longer allowed 🚫
  • -self_test_oninstall β€” the converse of -self_test_onload. the two fields related to the "test status indicator" and "MAC status indicator" are written to the output configuration file. this field is not relevant for an OpenSSL FIPS 140-3 provider, since this is no longer allowed.
  • -quiet β€” do not output pass/fail messages. implies -noout. 🀫
  • -corrupt_desc selftest_description, -corrupt_type selftest_type β€” the corrupt options can be used to test failure of one or more self tests by name. either option or both may be used to select the tests to corrupt. refer to the entries for st-desc and st-type in OSSL_PROVIDER-FIPS(7) for values that can be used. (yes this one is literally for breaking things on purpose, it's a whole mood πŸ§ͺ)
  • -config parent_config β€” test that a FIPS provider can be loaded from the specified configuration file. a previous call to this application needs to generate the extra configuration data that's included by the base "parent_config" configuration file. see config(5) for further information on how to set up a provider section. > ⚠️ all other options are ignored if '-config' is used. like, every single one. don't come for them, they're not here πŸ’€

🌸 NOTES 🌸

okay so, the self test results are logged by default if the options -quiet and -noout are not specified, or if either of the options -corrupt_desc or -corrupt_type are used. simple enough, right? 🫢

but here's the plot twist 😭 β€” if the base configuration file is set up to autoload the fips module, then the fips module will be loaded and self tested BEFORE the fipsinstall application has a chance to set up its own self test callback. and because of this, the self test output and the options -corrupt_desc and -corrupt_type will be ignored. so for normal usage, the base configuration file should use the default provider when generating the fips configuration file. that's the way, bestie ✨

the -self_test_oninstall option was added and the -self_test_onload option was made the default in OpenSSL 3.1. πŸ“…

and the command and all remaining options were added in OpenSSL 3.0. so if you're on something older, this whole page is giving "not for you" πŸ’…

✨ EXAMPLES ✨

Okay bestie, here's where it gets fun β€” actual stuff you can type πŸ’…


Example 1: mac it, test it, save it πŸŽ€

Say you wanna calculate the MAC of a FIPS module called fips.so, run a FIPS self test on it, and save the resulting config to fips.cnf β€” all in one go:

 openssl fipsinstall -module ./fips.so -out fips.cnf -provider_name fips

One command, three slays. Obsessed. ✨


Example 2: verify the vibes πŸ¦‹

Now you wanna double-check that fips.cnf actually contains the correct info (because trust issues are valid, ngl):

 openssl fipsinstall -module ./fips.so -in fips.cnf  -provider_name fips -verify

(Yes, there's a double space in there before -provider_name β€” that's just how she is, leave her alone πŸ™ˆ)


Example 3: chaos mode, but legal πŸ’€

Wanna corrupt any self test that has the description "SHA1"? Like, on purpose? Yeah, that's a thing, and it's literally what -corrupt_desc is for:

 openssl fipsinstall -module ./fips.so -out fips.cnf -provider_name fips \
        -corrupt_desc 'SHA1'

Note the line continuation backslash β€” she's a long one, bestie, give her room to breathe 🌸


Example 4: can the module even load? πŸ”₯

Validate that the FIPS module can be loaded from a base configuration file:

 export OPENSSL_CONF_INCLUDE=<path of configuration files>
 export OPENSSL_MODULES=<provider-path>
 openssl fipsinstall -config' 'default.cnf

Those first two lines are environment variables β€” swap in the actual <path of configuration files> and <provider-path> on your machine, obviously 🫢. And yes, that last line really is written -config' 'default.cnf β€” quirky little syntax moment, but it's exactly what the manpage says, so we keep it, periodt. πŸ‘‘


🌈 SEE ALSO 🌈

Go read these too, iykyk β€” they're all in the same friend group:


⭐ HISTORY ⭐

So like, when did all this even show up? Storytime 🧚

  • The openssl-fipsinstall application was added in OpenSSL 3.0.
  • The following options were added in OpenSSL 3.1: -ems_check, -self_test_oninstall
  • The following options were added in OpenSSL 3.2: -pedantic, -no_drbg_truncated_digests
  • The following options were added in OpenSSL 3.4: -hmac_key_check, -kmac_key_check, -signature_digest_check, -hkdf_digest_check, -tls13_kdf_digest_check, -tls1_prf_digest_check, -sshkdf_digest_check, -sskdf_digest_check, -x963kdf_digest_check, -dsa_sign_disabled, -no_pbkdf2_lower_bound_check, -no_short_mac, -tdes_encrypt_disabled, -rsa_pkcs15_padding_disabled, -rsa_pss_saltlen_check, -rsa_sign_x931_disabled, -hkdf_key_check, -kbkdf_key_check, -tls13_kdf_key_check, -tls1_prf_key_check, -sshkdf_key_check, -sskdf_key_check, -x963kdf_key_check, -x942kdf_key_check, -ecdh_cofactor_check

Like, that 3.4 list is a lot of options, and honestly? She ate. πŸ’…


Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.


And that's the whole page, bestie β€” you made it to the end 🫢✨ This particular glow-up is from OpenSSL 3.5.6, dated 2026-04-07, and it's the OPENSSL-FIPSINSTALL(1ossl) manual page. Go forth and fipsinstall responsibly πŸ’–πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from