OPENSSL-FIPSINSTALL(1ossl)
π 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 variableOPENSSL_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-verifyoption. 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, runopenssl 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 commandopenssl 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 optionno-fips-securitychecksgives 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 to0for 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 forst-descandst-typeinOSSL_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. seeconfig(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-fipsinstallapplication 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 π
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
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms