4 This document describes installation on all supported operating
5 systems: the Unix/Linux family (including macOS), OpenVMS,
11 - [Prerequisites](#prerequisites)
12 - [Notational Conventions](#notational-conventions)
13 - [Quick Installation Guide](#quick-installation-guide)
14 - [Building OpenSSL](#building-openssl)
15 - [Installing OpenSSL](#installing-openssl)
16 - [Configuration Options](#configuration-options)
17 - [API Level](#api-level)
18 - [Cross Compile Prefix](#cross-compile-prefix)
19 - [Build Type](#build-type)
20 - [Directories](#directories)
21 - [Compiler Warnings](#compiler-warnings)
22 - [Compression Algorithm Flags](#compression-algorithm-flags)
23 - [Seeding the Random Generator](#seeding-the-random-generator)
24 - [Setting the FIPS HMAC key](#setting-the-FIPS-HMAC-key)
25 - [Enable and Disable Features](#enable-and-disable-features)
26 - [Displaying configuration data](#displaying-configuration-data)
27 - [Installation Steps in Detail](#installation-steps-in-detail)
28 - [Configure](#configure-openssl)
29 - [Build](#build-openssl)
30 - [Test](#test-openssl)
31 - [Install](#install-openssl)
32 - [Advanced Build Options](#advanced-build-options)
33 - [Environment Variables](#environment-variables)
34 - [Makefile Targets](#makefile-targets)
35 - [Running Selected Tests](#running-selected-tests)
36 - [Troubleshooting](#troubleshooting)
37 - [Configuration Problems](#configuration-problems)
38 - [Build Failures](#build-failures)
39 - [Test Failures](#test-failures)
41 - [Notes on multi-threading](#notes-on-multi-threading)
42 - [Notes on shared libraries](#notes-on-shared-libraries)
43 - [Notes on random number generation](#notes-on-random-number-generation)
44 - [Notes on assembler modules compilation](#notes-on-assembler-modules-compilation)
49 To install OpenSSL, you will need:
51 * A "make" implementation
52 * Perl 5 with core modules (please read [NOTES-PERL.md](NOTES-PERL.md))
53 * The Perl module `Text::Template` (please read [NOTES-PERL.md](NOTES-PERL.md))
55 * POSIX C library (at least POSIX.1-2008), or compatible types and
57 * a development environment in the form of development libraries and C
59 * a supported operating system
61 For additional platform specific requirements, solutions to specific
62 issues and other details, please read one of these:
64 * [Notes for UNIX-like platforms](NOTES-UNIX.md)
65 * [Notes for Android platforms](NOTES-ANDROID.md)
66 * [Notes for Windows platforms](NOTES-WINDOWS.md)
67 * [Notes for the DOS platform with DJGPP](NOTES-DJGPP.md)
68 * [Notes for the OpenVMS platform](NOTES-VMS.md)
69 * [Notes for the HPE NonStop platform](NOTES-NONSTOP.md)
70 * [Notes on POSIX](NOTES-POSIX.md)
71 * [Notes on Perl](NOTES-PERL.md)
72 * [Notes on Valgrind](NOTES-VALGRIND.md)
74 Notational conventions
75 ======================
77 Throughout this document, we use the following conventions.
82 Any line starting with a dollar sign is a command line.
86 The dollar sign indicates the shell prompt and is not to be entered as
92 Several words in curly braces separated by pipe characters indicate a
93 **mandatory choice**, to be replaced with one of the given words.
96 $ echo { WORD1 | WORD2 | WORD3 }
98 represents one of the following three commands
106 One or several words in square brackets separated by pipe characters
107 denote an **optional choice**. It is similar to the mandatory choice,
108 but it can also be omitted entirely.
112 $ echo [ WORD1 | WORD2 | WORD3 ]
114 represents one of the four commands
127 **Optional Arguments** are enclosed in square brackets.
131 A trailing ellipsis means that more than one could be specified.
133 Quick Installation Guide
134 ========================
136 If you just want to get OpenSSL installed without bothering too much
137 about the details, here is the short version of how to build and install
138 OpenSSL. If any of the following steps fails, please consult the
139 [Installation in Detail](#installation-steps-in-detail) section below.
144 Use the following commands to configure, build and test OpenSSL.
145 The testing is optional, but recommended if you intend to install
146 OpenSSL for production use.
148 ### Unix / Linux / macOS / NonStop
156 Use the following commands to build OpenSSL:
164 If you are using Visual Studio, open a Developer Command Prompt and
165 issue the following commands to build OpenSSL.
171 As mentioned in the [Choices](#choices) section, you need to pick one
172 of the four Configure targets in the first command.
174 Most likely you will be using the `VC-WIN64A`/`VC-WIN64A-HYBRIDCRT` target for
175 64bit Windows binaries (AMD64) or `VC-WIN32`/`VC-WIN32-HYBRIDCRT` for 32bit
176 Windows binaries (X86).
177 The other two options are `VC-WIN64I` (Intel IA64, Itanium) and
178 `VC-CE` (Windows CE) are rather uncommon nowadays.
183 The following commands will install OpenSSL to a default system location.
185 **Danger Zone:** even if you are impatient, please read the following two
186 paragraphs carefully before you install OpenSSL.
188 For security reasons the default system location is by default not writable
189 for unprivileged users. So for the final installation step administrative
190 privileges are required. The default system location and the procedure to
191 obtain administrative privileges depends on the operating system.
192 It is recommended to compile and test OpenSSL with normal user privileges
193 and use administrative privileges only for the final installation step.
195 On some platforms OpenSSL is preinstalled as part of the Operating System.
196 In this case it is highly recommended not to overwrite the system versions,
197 because other applications or libraries might depend on it.
198 To avoid breaking other applications, install your copy of OpenSSL to a
199 [different location](#installing-to-a-different-location) which is not in
200 the global search path for system libraries.
202 Finally, if you plan on using the FIPS module, you need to read the
203 [Post-installation Notes](#post-installation-notes) further down.
205 ### Unix / Linux / macOS / NonStop
207 Depending on your distribution, you need to run the following command as
208 root user or prepend `sudo` to the command:
212 By default, OpenSSL will be installed to
216 More precisely, the files will be installed into the subdirectories
223 depending on the file type, as it is custom on Unix-like operating systems.
227 Use the following command to install OpenSSL.
231 By default, OpenSSL will be installed to
237 If you are using Visual Studio, open the Developer Command Prompt _elevated_
238 and issue the following command.
242 The easiest way to elevate the Command Prompt is to press and hold down both
243 the `<CTRL>` and `<SHIFT>` keys while clicking the menu item in the task menu.
245 The default installation location is
247 C:\Program Files\OpenSSL
249 for native binaries, or
251 C:\Program Files (x86)\OpenSSL
253 for 32bit binaries on 64bit Windows (WOW64).
255 #### Installing to a different location
257 To install OpenSSL to a different location (for example into your home
258 directory for testing purposes) run `Configure` as shown in the following
261 The options `--prefix` and `--openssldir` are explained in further detail in
262 [Directories](#directories) below, and the values used here are mere examples.
266 $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl
270 $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
272 Note: if you do add options to the configuration command, please make sure
273 you've read more than just this Quick Start, such as relevant `NOTES-*` files,
274 the options outline below, as configuration options may change the outcome
275 in otherwise unexpected ways.
277 Configuration Options
278 =====================
280 There are several options to `./Configure` to customize the build (note that
281 for Windows, the defaults for `--prefix` and `--openssldir` depend on what
282 configuration is used and what Windows implementation OpenSSL is built on.
283 For more information, see the [Notes for Windows platforms](NOTES-WINDOWS.md).
290 Build the OpenSSL libraries to support the API for the specified version.
291 If [no-deprecated](#no-deprecated) is also given, don't build with support
292 for deprecated APIs in or below the specified version number. For example,
295 --api=1.1.0 no-deprecated
297 will remove support for all APIs that were deprecated in OpenSSL version
298 1.1.0 or below. This is a rather specialized option for developers.
299 If you just intend to remove all deprecated APIs up to the current version
300 entirely, just specify [no-deprecated](#no-deprecated).
301 If `--api` isn't given, it defaults to the current (minor) OpenSSL version.
306 --cross-compile-prefix=<PREFIX>
308 The `<PREFIX>` to include in front of commands for your toolchain.
310 It is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler
311 as `a-b-c-gcc`, etc. Unfortunately cross-compiling is too case-specific to put
312 together one-size-fits-all instructions. You might have to pass more flags or
313 set up environment variables to actually make it work. Android and iOS cases
314 are discussed in corresponding `Configurations/15-*.conf` files. But there are
315 cases when this option alone is sufficient. For example to build the mingw64
316 target on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works. Naturally
317 provided that mingw packages are installed. Today Debian and Ubuntu users
318 have option to install a number of prepackaged cross-compilers along with
319 corresponding run-time and development packages for "alien" hardware. To give
320 another example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such
323 For cross compilation, you must [configure manually](#manual-configuration).
324 Also, note that `--openssldir` refers to target's file system, not one you are
332 Build OpenSSL with debugging symbols and zero optimization level.
336 Build OpenSSL without debugging symbols. This is the default.
340 Build OpenSSL with gcov profiling information included
344 Build OpenSSL optimized using gcov data obtained from --coverage build
353 The name of the directory under the top of the installation directory tree
354 (see the `--prefix` option) where libraries will be installed. By default
355 this is `lib`. Note that on Windows only static libraries (`*.lib`) will
356 be stored in this location. Shared libraries (`*.dll`) will always be
357 installed to the `bin` directory.
359 Some build targets have a multilib postfix set in the build configuration.
360 For these targets the default libdir is `lib<multilib-postfix>`. Please use
361 `--libdir=lib` to override the libdir if adding the postfix is undesirable.
367 Directory for OpenSSL configuration files, and also the default certificate
368 and key store. Defaults are:
371 Windows: C:\Program Files\Common Files\SSL
372 OpenVMS: SYS$COMMON:[OPENSSL-COMMON]
374 For 32bit Windows applications on Windows 64bit (WOW64), always replace
375 `C:\Program Files` by `C:\Program Files (x86)`.
381 The top of the installation directory tree. Defaults are:
384 Windows: C:\Program Files\OpenSSL
385 OpenVMS: SYS$COMMON:[OPENSSL]
392 This is a developer flag that switches on various compiler options recommended
393 for OpenSSL development. It only works when using gcc or clang as the compiler.
394 If you are developing a patch for OpenSSL then it is recommended that you use
395 this option where possible.
397 Compression Algorithm Flags
398 ---------------------------
400 ### with-brotli-include
402 --with-brotli-include=DIR
404 The directory for the location of the brotli include files (i.e. the location
405 of the **brotli** include directory). This option is only necessary if
406 [enable-brotli](#enable-brotli) is used and the include files are not already
407 on the system include path.
411 --with-brotli-lib=LIB
413 **On Unix**: this is the directory containing the brotli libraries.
414 If not provided, the system library path will be used.
416 The names of the libraries are:
418 * libbrotlicommon.a or libbrotlicommon.so
419 * libbrotlidec.a or libbrotlidec.so
420 * libbrotlienc.a or libbrotlienc.so
422 **On Windows:** this is the directory containing the brotli libraries.
423 If not provided, the system library path will be used.
425 The names of the libraries are:
431 ### with-zlib-include
433 --with-zlib-include=DIR
435 The directory for the location of the zlib include file. This option is only
436 necessary if [zlib](#zlib) is used and the include file is not
437 already on the system include path.
443 **On Unix**: this is the directory containing the zlib library.
444 If not provided the system library path will be used.
446 **On Windows:** this is the filename of the zlib library (with or
447 without a path). This flag must be provided if the
448 [zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used
449 then this flag is optional and defaults to `ZLIB1` if not provided.
451 **On VMS:** this is the filename of the zlib library (with or without a path).
452 This flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32`
453 or `GNV$LIBZSHR64` is used by default depending on the pointer size chosen.
455 ### with-zstd-include
457 --with-zstd-include=DIR
459 The directory for the location of the Zstd include file. This option is only
460 necessary if [enable-std](#enable-zstd) is used and the include file is not
461 already on the system include path.
463 OpenSSL requires Zstd 1.4 or greater. The Linux kernel source contains a
464 *zstd.h* file that is not compatible with the 1.4.x Zstd distribution, the
465 compilation will generate an error if the Linux *zstd.h* is included before
466 (or instead of) the Zstd distribution header.
472 **On Unix**: this is the directory containing the Zstd library.
473 If not provided the system library path will be used.
475 **On Windows:** this is the filename of the Zstd library (with or
476 without a path). This flag must be provided if the
477 [enable-zstd-dynamic](#enable-zstd-dynamic) option is not also used.
478 If `zstd-dynamic` is used then this flag is optional and defaults
479 to `LIBZSTD` if not provided.
481 Seeding the Random Generator
482 ----------------------------
484 --with-rand-seed=seed1[,seed2,...]
486 A comma separated list of seeding methods which will be tried by OpenSSL
487 in order to obtain random input (a.k.a "entropy") for seeding its
488 cryptographically secure random number generator (CSPRNG).
489 The current seeding methods are:
493 Use a trusted operating system entropy source.
494 This is the default method if such an entropy source exists.
498 Use the [getrandom(2)][man-getrandom] or equivalent system call.
500 [man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html
504 Use the first device from the `DEVRANDOM` list which can be opened to read
505 random bytes. The `DEVRANDOM` preprocessor constant expands to
507 "/dev/urandom","/dev/random","/dev/srandom"
509 on most unix-ish operating systems.
513 Check for an entropy generating daemon.
514 This source is ignored by the FIPS provider.
518 Use the `RDSEED` or `RDRAND` command on x86 or `RNDRRS` command on aarch64
519 if provided by the CPU.
523 Disable automatic seeding. This is the default on some operating systems where
524 no suitable entropy source exists, or no support for it is implemented yet.
525 This option is ignored by the FIPS provider.
527 For more information, see the section [Notes on random number generation][rng]
528 at the end of this document.
530 [rng]: #notes-on-random-number-generation
534 When configured with `enable-jitter`, a "JITTER" RNG is compiled that
535 can provide an alternative software seed source. It can be configured
536 by setting `seed` option in `openssl.cnf`. A minimal `openssl.cnf` is
539 openssl_conf = openssl_init
547 It uses a statically linked [jitterentropy-library] as the seed source.
549 Additional configuration flags available:
551 --with-jitter-include=DIR
553 The directory for the location of the jitterentropy.h include file, if
554 it is outside the system include path.
556 --with-jitter-lib=DIR
558 This is the directory containing the static libjitterentropy.a
559 library, if it is outside the system library path.
561 Setting the FIPS HMAC key
562 -------------------------
566 As part of its self-test validation, the FIPS module must verify itself
567 by performing a SHA-256 HMAC computation on itself. The default key is
568 the SHA256 value of "holy hand grenade of antioch" and is sufficient
569 for meeting the FIPS requirements.
571 To change the key to a different value, use this flag. The value should
572 be a hex string no more than 64 characters.
574 Enable and Disable Features
575 ---------------------------
577 Feature options always come in pairs, an option to enable feature
578 `xxxx`, and an option to disable it:
580 [ enable-xxxx | no-xxxx ]
582 Whether a feature is enabled or disabled by default, depends on the feature.
583 In the following list, always the non-default variant is documented: if
584 feature `xxxx` is disabled by default then `enable-xxxx` is documented and
585 if feature `xxxx` is enabled by default then `no-xxxx` is documented.
589 Don't build the AFALG engine.
591 This option will be forced on a platform that does not support AFALG.
595 Build with Kernel TLS support.
597 This option will enable the use of the Kernel TLS data-path, which can improve
598 performance and allow for the use of sendfile and splice system calls on
599 TLS sockets. The Kernel may use TLS accelerators if any are available on the
600 system. This option will be forced off on systems that do not support the
601 Kernel TLS data-path.
605 Build with the Address sanitiser.
607 This is a developer option only. It may not work on all platforms and should
608 never be used in production environments. It will only work when used with
609 gcc or clang and should be used in conjunction with the [no-shared](#no-shared)
612 ### enable-acvp-tests
614 Build support for Automated Cryptographic Validation Protocol (ACVP)
617 This is required for FIPS validation purposes. Certain ACVP tests require
618 access to algorithm internals that are not normally accessible.
619 Additional information related to ACVP can be found at
620 <https://github.com/usnistgov/ACVP>.
624 Do not build apps, e.g. the openssl program. This is handy for minimization.
625 This option also disables tests.
629 Do not use assembler code.
631 This should be viewed as debugging/troubleshooting option rather than for
632 production use. On some platforms a small amount of assembler code may still
633 be used even with this option.
637 Do not build support for async operations.
641 Do not use `atexit()` in libcrypto builds.
643 `atexit()` has varied semantics between platforms and can cause SIGSEGV in some
644 circumstances. This option disables the atexit registration of OPENSSL_cleanup.
645 By default, NonStop configurations use `no-atexit`.
649 Don't automatically load all supported ciphers and digests.
651 Typically OpenSSL will make available all of its supported ciphers and digests.
652 For a statically linked application this may be undesirable if small executable
653 size is an objective. This only affects libcrypto. Ciphers and digests will
654 have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
655 if this option is used. This option will force a non-shared build.
659 Don't automatically load all libcrypto/libssl error strings.
661 Typically OpenSSL will automatically load human readable error strings. For a
662 statically linked application this may be undesirable if small executable size
667 Build with support for brotli compression/decompression.
669 ### enable-brotli-dynamic
671 Like the enable-brotli option, but has OpenSSL load the brotli library dynamically
674 This is only supported on systems where loading of shared libraries is supported.
676 ### no-autoload-config
678 Don't automatically load the default `openssl.cnf` file.
680 Typically OpenSSL will automatically load a system config file which configures
683 ### enable-buildtest-c++
685 While testing, generate C++ buildtest files that simply check that the public
686 OpenSSL header files are usable standalone with C++.
688 Enabling this option demands extra care. For any compiler flag given directly
689 as configuration option, you must ensure that it's valid for both the C and
690 the C++ compiler. If not, the C++ build test will most likely break. As an
691 alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
695 Use the specified text instead of the default banner at the end of
700 On platforms where the choice of 32-bit or 64-bit architecture
701 is not explicitly specified, `Configure` will print a warning
702 message and wait for a few seconds to let you interrupt the
703 configuration. Using this flag skips the wait.
707 Build only some minimal set of features.
708 This is a developer option used internally for CI build tests of the project.
712 Never cache algorithms when they are fetched from a provider. Normally, a
713 provider indicates if the algorithms it supplies can be cached or not. Using
714 this option will reduce run-time memory usage but it also introduces a
715 significant performance penalty. This option is primarily designed to help
716 with detecting incorrect reference counting.
720 Don't build the CAPI engine.
722 This option will be forced if on a platform that does not support CAPI.
726 Don't build support for Certificate Management Protocol (CMP)
727 and Certificate Request Message Format (CRMF).
731 Don't build support for Cryptographic Message Syntax (CMS).
735 Don't build support for SSL/TLS compression.
737 If this option is enabled (the default), then compression will only work if
738 the zlib or `zlib-dynamic` options are also chosen.
740 ### enable-crypto-mdebug
742 This now only enables the `failed-malloc` feature.
744 ### enable-crypto-mdebug-backtrace
746 This is a no-op; the project uses the compiler's address/leak sanitizer instead.
750 Don't build support for Certificate Transparency (CT).
754 Don't build with support for deprecated APIs up until and including the version
755 given with `--api` (or the current version, if `--api` wasn't specified).
759 Don't build support for datagram based BIOs.
761 Selecting this option will also force the disabling of DTLS.
765 Don't build and install documentation, i.e. manual pages in various forms.
769 Don't build support for loading Dynamic Shared Objects (DSO)
771 ### enable-devcryptoeng
773 Build the `/dev/crypto` engine.
775 This option is automatically selected on the BSD platform, in which case it can
776 be disabled with `no-devcryptoeng`.
778 ### no-dynamic-engine
780 Don't build the dynamically loaded engines.
782 This only has an effect in a shared build.
786 Don't build support for Elliptic Curves.
790 Don't build support for binary Elliptic Curves
792 ### no-tls-deprecated-ec
794 Disable legacy TLS EC groups that were deprecated in RFC8422. These are the
795 Koblitz curves, B<secp160r1>, B<secp160r2>, B<secp192r1>, B<secp224r1>, and the
796 binary Elliptic curves that would also be disabled by C<no-ec2m>.
798 ### enable-ec_nistp_64_gcc_128
800 Enable support for optimised implementations of some commonly used NIST
803 This option is only supported on platforms:
805 - with little-endian storage of non-byte types
806 - that tolerate misaligned memory references
807 - where the compiler:
808 - supports the non-standard type `__uint128_t`
809 - defines the built-in macro `__SIZEOF_INT128__`
813 Build support for gathering entropy from the Entropy Gathering Daemon (EGD).
817 Don't build support for loading engines.
821 Don't compile in any error strings.
823 ### enable-external-tests
825 Enable building of integration with external test suites.
827 This is a developer option and may not work on all platforms. The following
828 external test suites are currently supported:
830 - GOST engine test suite
831 - Python PYCA/Cryptography test suite
834 See the file [test/README-external.md](test/README-external.md)
839 Don't compile in filename and line number information (e.g. for errors and
844 Build (and install) the FIPS provider
846 ### no-fips-securitychecks
848 Don't perform FIPS module run-time checks related to enforcement of security
849 parameters such as minimum security strength of keys.
853 Don't perform FIPS module Power On Self Tests.
855 This option MUST be used for debugging only as it makes the FIPS provider
856 non-compliant. It is useful when setting breakpoints in FIPS algorithms.
858 ### enable-fips-jitter
860 Use the CPU Jitter library as a FIPS validated entropy source.
862 This option will only produce a compliant FIPS provider if you have:
864 1. independently performed the required [SP 800-90B] entropy assessments;
865 2. meet the minimum required entropy as specified by [jitterentropy-library];
866 3. obtain an [ESV] certificate for the [jitterentropy-library] and
867 4. have had the resulting FIPS provider certified by the [CMVP].
869 Failure to do all of these will produce a non-compliant FIPS provider.
871 ### enable-fuzz-libfuzzer, enable-fuzz-afl
873 Build with support for fuzzing using either libfuzzer or AFL.
875 These are developer options only. They may not work on all platforms and
876 should never be used in production environments.
878 See the file [fuzz/README.md](fuzz/README.md) for further details.
882 Don't build support for GOST based ciphersuites.
884 Note that if this feature is enabled then GOST ciphersuites are only available
885 if the GOST algorithms are also available through loading an externally supplied
890 Disable HTTP support.
894 Don't build the legacy provider.
896 Disabling this also disables the legacy algorithms: MD2 (already disabled by default).
900 Don't generate dependencies.
904 Disable Module-Lattice-Based Digital Signature Standard (ML-DSA) support.
905 ML-DSA is based on CRYSTALS-DILITHIUM. See [FIPS 204].
909 Disable Module-Lattice-Based Key-Encapsulation Mechanism Standard (ML-KEM)
910 support. ML-KEM is based on CRYSTALS-KYBER. See [FIPS 203].
914 Don't build any dynamically loadable engines.
916 This also implies `no-dynamic-engine`.
920 Don't build support for writing multiple records in one go in libssl
922 Note: this is a different capability to the pipelining functionality.
926 Don't build support for the Next Protocol Negotiation (NPN) TLS extension.
930 Don't build support for Online Certificate Status Protocol (OCSP).
934 Don't build the padlock engine.
938 As synonym for `no-padlockeng`. Deprecated and should not be used.
942 Don't build with support for Position Independent Code.
946 Build with support for Position Independent Execution.
950 Don't pin the shared libraries.
952 By default OpenSSL will attempt to stay in memory until the process exits.
953 This is so that libcrypto and libssl can be properly cleaned up automatically
954 via an `atexit()` handler. The handler is registered by libcrypto and cleans
955 up both libraries. On some platforms the `atexit()` handler will run on unload of
956 libcrypto (if it has been dynamically loaded) rather than at process exit.
958 This option can be used to stop OpenSSL from attempting to stay in memory until the
959 process exits. This could lead to crashes if either libcrypto or libssl have
960 already been unloaded at the point that the atexit handler is invoked, e.g. on a
961 platform which calls `atexit()` on unload of the library, and libssl is unloaded
962 before libcrypto then a crash is likely to happen.
964 Note that shared library pinning is not automatically disabled for static builds,
965 i.e., `no-shared` does not imply `no-pinshared`. This may come as a surprise when
966 linking libcrypto statically into a shared third-party library, because in this
967 case the shared library will be pinned. To prevent this behaviour, you need to
968 configure the static build using `no-shared` and `no-pinshared` together.
970 Applications can suppress running of the `atexit()` handler at run time by
971 using the `OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
972 See the man page for it for further details.
976 Don't use POSIX IO capabilities.
980 Don't build support for Pre-Shared Key based ciphersuites.
984 Don't use hardware RDRAND capabilities.
988 Don't build support for RFC3779, "X.509 Extensions for IP Addresses and
993 Build support for Stream Control Transmission Protocol (SCTP).
997 Do not create shared libraries, only static ones.
999 See [Notes on shared libraries](#notes-on-shared-libraries) below.
1003 Disable Stateless Hash Based Digital Signature Standard support.
1004 (SLH-DSA is based on SPHINCS+. See [FIPS 205])
1008 Disable using the SM2 precomputed table on aarch64 to make the library smaller.
1012 Don't build support for socket BIOs.
1016 Don't build support for Secure Remote Password (SRP) protocol or
1017 SRP based ciphersuites.
1021 Don't build Secure Real-Time Transport Protocol (SRTP) support.
1025 Exclude SSE2 code paths from 32-bit x86 assembly modules.
1027 Normally SSE2 extension is detected at run-time, but the decision whether or not
1028 the machine code will be executed is taken solely on CPU capability vector. This
1029 means that if you happen to run OS kernel which does not support SSE2 extension
1030 on Intel P4 processor, then your application might be exposed to "illegal
1031 instruction" exception. There might be a way to enable support in kernel, e.g.
1032 FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
1033 disengage SSE2 code paths upon application start-up, but if you aim for wider
1034 "audience" running such kernel, consider `no-sse2`. Both the `386` and `no-asm`
1035 options imply `no-sse2`.
1039 Don't build with SSL Trace capabilities.
1041 This removes the `-trace` option from `s_client` and `s_server`, and omits the
1042 `SSL_trace()` function from libssl.
1044 Disabling `ssl-trace` may provide a small reduction in libssl binary size.
1046 ### no-static-engine
1048 Don't build the statically linked engines.
1050 This only has an impact when not built "shared".
1054 Don't use anything from the C header file `stdio.h` that makes use of the `FILE`
1055 type. Only libcrypto and libssl can be built in this way. Using this option will
1056 suppress building the command line applications. Additionally, since the OpenSSL
1057 tests also use the command line applications, the tests will also be skipped.
1061 Don't build test programs or run any tests.
1065 Build with support for TCP Fast Open (RFC7413). Supported on Linux, macOS and FreeBSD.
1069 Don't build with QUIC support.
1073 Don't build with support for multi-threaded applications.
1077 Build with support for multi-threaded applications. Most platforms will enable
1078 this by default. However, if on a platform where this is not the case then this
1079 will usually require additional system-dependent options!
1081 See [Notes on multi-threading](#notes-on-multi-threading) below.
1085 Don't build with support for thread pool functionality.
1089 Build with thread pool functionality. If enabled, OpenSSL algorithms may
1090 use the thread pool to perform parallel computation. This option in itself
1091 does not enable OpenSSL to spawn new threads. Currently the only supported
1092 thread pool mechanism is the default thread pool.
1094 ### no-default-thread-pool
1096 Don't build with support for default thread pool functionality.
1098 ### default-thread-pool
1100 Build with default thread pool functionality. If enabled, OpenSSL may create
1101 and manage threads up to a maximum number of threads authorized by the
1102 application. Supported on POSIX compliant platforms and Windows.
1106 Build with support for the integrated tracing api.
1108 See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
1110 ### enable-sslkeylog
1112 Build with support for the SSLKEYLOGFILE environment variable
1114 When enabled, setting SSLKEYLOGFILE to a file path records the keys exchanged
1115 during a TLS handshake for use in analysis tools like wireshark. Note that the
1116 use of this mechanism allows for decryption of application payloads found in
1117 captured packets using keys from the key log file and therefore has significant
1118 security consequences. See Section 3 of
1119 [the draft standard for SSLKEYLOGFILE](https://datatracker.ietf.org/doc/draft-ietf-tls-keylogfile/)
1123 Don't build Time Stamping (TS) Authority support.
1127 Build with the Undefined Behaviour sanitiser (UBSAN).
1129 This is a developer option only. It may not work on all platforms and should
1130 never be used in production environments. It will only work when used with
1131 gcc or clang and should be used in conjunction with the `-DPEDANTIC` option
1132 (or the `--strict-warnings` option).
1136 Don't build with the User Interface (UI) console method
1138 The User Interface console method enables text based console prompts.
1140 ### enable-unit-test
1142 Enable additional unit test APIs.
1144 This should not typically be used in production deployments.
1148 Don't build support for UPLINK interface.
1150 ### enable-weak-ssl-ciphers
1152 Build support for SSL/TLS ciphers that are considered "weak"
1154 Enabling this includes for example the RC4 based ciphersuites.
1158 Build with support for zlib compression/decompression.
1162 Like the zlib option, but has OpenSSL load the zlib library dynamically
1165 This is only supported on systems where loading of shared libraries is supported.
1169 Build with support for Zstd compression/decompression.
1171 ### enable-zstd-dynamic
1173 Like the enable-zstd option, but has OpenSSL load the Zstd library dynamically
1176 This is only supported on systems where loading of shared libraries is supported.
1178 ### enable-unstable-qlog
1180 Enables qlog output support for the QUIC protocol. This functionality is
1181 unstable and implements a draft version of the qlog specification. The qlog
1182 output from OpenSSL will change in incompatible ways in future, and is not
1183 subject to any format stability or compatibility guarantees at this time. See
1184 the manpage openssl-qlog(7) for details.
1188 In 32-bit x86 builds, use the 80386 instruction set only in assembly modules
1190 The default x86 code is more efficient, but requires at least an 486 processor.
1191 Note: This doesn't affect compiler generated code, so this option needs to be
1192 accompanied by a corresponding compiler-specific option.
1196 no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
1198 Don't build support for negotiating the specified SSL/TLS protocol.
1200 If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
1202 Similarly `no-dtls` will disable `dtls1` and `dtls1_2`. The `no-ssl` option is
1203 synonymous with `no-ssl3`. Note this only affects version negotiation.
1204 OpenSSL will still provide the methods for applications to explicitly select
1205 the individual protocol versions.
1207 ### no-integrity-only-ciphers
1209 Don't build support for integrity only ciphers in tls.
1211 ### no-{protocol}-method
1213 no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
1215 Analogous to `no-{protocol}` but in addition do not build the methods for
1216 applications to explicitly select individual protocol versions. Note that there
1217 is no `no-tls1_3-method` option because there is no application method for
1220 Using individual protocol methods directly is deprecated. Applications should
1221 use `TLS_method()` instead.
1223 ### enable-{algorithm}
1227 Build with support for the specified algorithm.
1231 no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1232 des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ml-dsa|
1233 ml-kem|ocb|poly1305|rc2|rc4|rmd160|scrypt|
1234 seed|siphash|siv|sm2|sm3|sm4|whirlpool}
1236 Build without support for the specified algorithm.
1238 The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
1240 ### Compiler-specific options
1242 -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
1244 These system specific options will be recognised and passed through to the
1245 compiler to allow you to define preprocessor symbols, specify additional
1246 libraries, library directories or other compiler options. It might be worth
1247 noting that some compilers generate code specifically for processor the
1248 compiler currently executes on. This is not necessarily what you might have
1249 in mind, since it might be unsuitable for execution on other, typically older,
1250 processor. Consult your compiler documentation.
1252 Take note of the [Environment Variables](#environment-variables) documentation
1253 below and how these flags interact with those variables.
1257 Additional options that are not otherwise recognised are passed through as
1258 they are to the compiler as well. Unix-style options beginning with a
1259 `-` or `+` and Windows-style options beginning with a `/` are recognised.
1260 Again, consult your compiler documentation.
1262 If the option contains arguments separated by spaces, then the URL-style
1263 notation `%20` can be used for the space character in order to avoid having
1264 to quote the option. For example, `-opt%20arg` gets expanded to `-opt arg`.
1265 In fact, any ASCII character can be encoded as %xx using its hexadecimal
1268 Take note of the [Environment Variables](#environment-variables) documentation
1269 below and how these flags interact with those variables.
1271 ### Environment Variables
1275 Assign the given value to the environment variable `VAR` for `Configure`.
1277 These work just like normal environment variable assignments, but are supported
1278 on all platforms and are confined to the configuration scripts only.
1279 These assignments override the corresponding value in the inherited environment,
1282 The following variables are used as "`make` variables" and can be used as an
1283 alternative to giving preprocessor, compiler and linker options directly as
1284 configuration. The following variables are supported:
1286 AR The static library archiver.
1287 ARFLAGS Flags for the static library archiver.
1288 AS The assembler compiler.
1289 ASFLAGS Flags for the assembler compiler.
1291 CFLAGS Flags for the C compiler.
1292 CXX The C++ compiler.
1293 CXXFLAGS Flags for the C++ compiler.
1294 CPP The C/C++ preprocessor.
1295 CPPFLAGS Flags for the C/C++ preprocessor.
1296 CPPDEFINES List of CPP macro definitions, separated
1297 by a platform specific character (':' or
1298 space for Unix, ';' for Windows, ',' for
1299 VMS). This can be used instead of using
1300 -D (or what corresponds to that on your
1301 compiler) in CPPFLAGS.
1302 CPPINCLUDES List of CPP inclusion directories, separated
1303 the same way as for CPPDEFINES. This can
1304 be used instead of -I (or what corresponds
1305 to that on your compiler) in CPPFLAGS.
1306 HASHBANGPERL Perl invocation to be inserted after '#!'
1307 in public perl scripts (only relevant on
1309 LD The program linker (not used on Unix, $(CC)
1311 LDFLAGS Flags for the shared library, DSO and
1313 LDLIBS Extra libraries to use when linking.
1314 Takes the form of a space separated list
1315 of library specifications on Unix and
1316 Windows, and as a comma separated list of
1318 RANLIB The library archive indexer.
1319 RC The Windows resource compiler.
1320 RCFLAGS Flags for the Windows resource compiler.
1321 RM The command to remove files and directories.
1323 These cannot be mixed with compiling/linking flags given on the command line.
1324 In other words, something like this isn't permitted.
1326 $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
1328 Backward compatibility note:
1330 To be compatible with older configuration scripts, the environment variables
1331 are ignored if compiling/linking flags are given on the command line, except
1334 AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1336 For example, the following command will not see `-DBAR`:
1338 $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
1340 However, the following will see both set variables:
1342 $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
1344 If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
1345 compiler are in the same "family". This becomes relevant with
1346 `enable-external-tests` and `enable-buildtest-c++`.
1353 Reconfigure from earlier data.
1355 This fetches the previous command line options and environment from data
1356 saved in `configdata.pm` and runs the configuration process again, using
1357 these options and environment. Note: NO other option is permitted together
1358 with `reconf`. Note: The original configuration saves away values for ALL
1359 environment variables that were used, and if they weren't defined, they are
1360 still saved away with information that they weren't originally defined.
1361 This information takes precedence over environment variables that are
1362 defined when reconfiguring.
1364 Displaying configuration data
1365 -----------------------------
1367 The configuration script itself will say very little, and finishes by
1368 creating `configdata.pm`. This perl module can be loaded by other scripts
1369 to find all the configuration data, and it can also be used as a script to
1370 display all sorts of configuration data in a human readable form.
1372 For more information, please do:
1374 $ ./configdata.pm --help # Unix
1378 $ perl configdata.pm --help # Windows and VMS
1380 Installation Steps in Detail
1381 ============================
1386 ### Automatic Configuration
1388 In previous version, the `config` script determined the platform type and
1389 compiler and then called `Configure`. Starting with version 3.0, they are
1392 #### Unix / Linux / macOS
1394 $ ./Configure [options...]
1398 $ perl Configure [options...]
1402 $ perl Configure [options...]
1404 ### Manual Configuration
1406 OpenSSL knows about a range of different operating system, hardware and
1407 compiler combinations. To see the ones it knows about, run
1409 $ ./Configure LIST # Unix
1413 $ perl Configure LIST # All other platforms
1415 For the remainder of this text, the Unix form will be used in all examples.
1416 Please use the appropriate form for your platform.
1418 Pick a suitable name from the list that matches your system. For most
1419 operating systems there is a choice between using cc or gcc.
1420 When you have identified your system (and if necessary compiler) use this
1421 name as the argument to `Configure`. For example, a `linux-elf` user would
1424 $ ./Configure linux-elf [options...]
1426 ### Creating your own Configuration
1428 If your system isn't listed, you will have to create a configuration
1429 file named `Configurations/YOURFILENAME.conf` (replace `YOURFILENAME`
1430 with a filename of your choosing) and add the correct
1431 configuration for your system. See the available configs as examples
1432 and read [Configurations/README.md](Configurations/README.md) and
1433 [Configurations/README-design.md](Configurations/README-design.md)
1434 for more information.
1436 The generic configurations `cc` or `gcc` should usually work on 32 bit
1439 `Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1440 and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1441 and defines various macros in `include/openssl/configuration.h` (generated
1442 from `include/openssl/configuration.h.in`.
1444 If none of the generated build files suit your purpose, it's possible to
1445 write your own build file template and give its name through the environment
1446 variable `BUILDFILE`. For example, Ninja build files could be supported by
1447 writing `Configurations/build.ninja.tmpl` and then configure with `BUILDFILE`
1448 set like this (Unix syntax shown, you'll have to adapt for other platforms):
1450 $ BUILDFILE=build.ninja perl Configure [options...]
1452 ### Out of Tree Builds
1454 OpenSSL can be configured to build in a build directory separate from the
1455 source code directory. It's done by placing yourself in some other
1456 directory and invoking the configuration commands from there.
1460 $ mkdir /var/tmp/openssl-build
1461 $ cd /var/tmp/openssl-build
1462 $ /PATH/TO/OPENSSL/SOURCE/Configure [options...]
1464 #### OpenVMS example
1466 $ set default sys$login:
1467 $ create/dir [.tmp.openssl-build]
1468 $ set default [.tmp.openssl-build]
1469 $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [options...]
1471 #### Windows example
1474 $ mkdir \temp-openssl
1476 $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [options...]
1478 Paths can be relative just as well as absolute. `Configure` will do its best
1479 to translate them to relative paths whenever possible.
1484 Build OpenSSL by running:
1487 $ mms ! (or mmk) OpenVMS
1490 This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
1491 Unix, corresponding on other platforms) and the OpenSSL binary
1492 (`openssl`). The libraries will be built in the top-level directory,
1493 and the binary will be in the `apps/` subdirectory.
1495 If the build fails, take a look at the [Build Failures](#build-failures)
1496 subsection of the [Troubleshooting](#troubleshooting) section.
1501 After a successful build, and before installing, the libraries should
1505 $ mms test ! OpenVMS
1506 $ nmake test # Windows
1508 **Warning:** you MUST run the tests from an unprivileged account (or disable
1509 your privileges temporarily if your platform allows it).
1511 See [test/README.md](test/README.md) for further details how run tests.
1513 See [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
1518 If everything tests ok, install OpenSSL with
1520 $ make install # Unix
1521 $ mms install ! OpenVMS
1522 $ nmake install # Windows
1524 Note that in order to perform the install step above you need to have
1525 appropriate permissions to write to the installation directory.
1527 The above commands will install all the software components in this
1528 directory tree under `<PREFIX>` (the directory given with `--prefix` or
1531 ### Unix / Linux / macOS
1533 bin/ Contains the openssl binary and a few other
1536 Contains the header files needed if you want
1537 to build your own programs that use libcrypto
1539 lib Contains the OpenSSL library files.
1540 lib/engines Contains the OpenSSL dynamically loadable engines.
1542 share/man/man1 Contains the OpenSSL command line man-pages.
1543 share/man/man3 Contains the OpenSSL library calls man-pages.
1544 share/man/man5 Contains the OpenSSL configuration format man-pages.
1545 share/man/man7 Contains the OpenSSL other misc man-pages.
1547 share/doc/openssl/html/man1
1548 share/doc/openssl/html/man3
1549 share/doc/openssl/html/man5
1550 share/doc/openssl/html/man7
1551 Contains the HTML rendition of the man-pages.
1555 'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
1556 'sover' is replaced with the shared library version (`0101` for 1.1), and
1557 'pz' is replaced with the pointer size OpenSSL was built with:
1559 [.EXE.'arch'] Contains the openssl binary.
1560 [.EXE] Contains a few utility scripts.
1562 Contains the header files needed if you want
1563 to build your own programs that use libcrypto
1565 [.LIB.'arch'] Contains the OpenSSL library files.
1566 [.ENGINES'sover''pz'.'arch']
1567 Contains the OpenSSL dynamically loadable engines.
1568 [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1569 These define appropriate logical names and
1571 [.SYSTEST] Contains the installation verification procedure.
1572 [.HTML] Contains the HTML rendition of the manual pages.
1574 ### Additional Directories
1576 Additionally, install will add the following directories under
1577 OPENSSLDIR (the directory given with `--openssldir` or its default)
1578 for you convenience:
1580 certs Initially empty, this is the default location
1581 for certificate files.
1582 private Initially empty, this is the default location
1583 for private key files.
1584 misc Various scripts.
1586 The installation directory should be appropriately protected to ensure
1587 unprivileged users cannot make changes to OpenSSL binaries or files, or
1588 install engines. If you already have a pre-installed version of OpenSSL as
1589 part of your Operating System it is recommended that you do not overwrite
1590 the system version and instead install to somewhere else.
1592 Package builders who want to configure the library for standard locations,
1593 but have the package installed somewhere else so that it can easily be
1596 $ make DESTDIR=/tmp/package-root install # Unix
1597 $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
1599 The specified destination directory will be prepended to all installation
1602 Compatibility issues with previous OpenSSL versions
1603 ---------------------------------------------------
1605 ### COMPILING existing applications
1607 Starting with version 1.1.0, OpenSSL hides a number of structures that were
1608 previously open. This includes all internal libssl structures and a number
1609 of EVP types. Accessor functions have been added to allow controlled access
1610 to the structures' data.
1612 This means that some software needs to be rewritten to adapt to the new ways
1613 of doing things. This often amounts to allocating an instance of a structure
1614 explicitly where you could previously allocate them on the stack as automatic
1615 variables, and using the provided accessor functions where you would previously
1616 access a structure's field directly.
1618 Some APIs have changed as well. However, older APIs have been preserved when
1621 Post-installation Notes
1622 -----------------------
1624 With the default OpenSSL installation comes a FIPS provider module, which
1625 needs some post-installation attention, without which it will not be usable.
1626 This involves using the following command:
1628 $ openssl fipsinstall
1630 See the openssl-fipsinstall(1) manual for details and examples.
1632 Advanced Build Options
1633 ======================
1635 Environment Variables
1636 ---------------------
1638 A number of environment variables can be used to provide additional control
1639 over the build process. Typically these should be defined prior to running
1640 `Configure`. Not all environment variables are relevant to all platforms.
1643 The name of the ar executable to use.
1646 Use a different build file name than the platform default
1647 ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1648 "descrip.mms" on OpenVMS). This requires that there is a
1649 corresponding build file template.
1650 See [Configurations/README.md](Configurations/README.md)
1651 for further information.
1654 The compiler to use. Configure will attempt to pick a default
1655 compiler for your platform but this choice can be overridden
1656 using this variable. Set it to the compiler executable you wish
1657 to use, e.g. gcc or clang.
1660 This environment variable has the same meaning as for the
1661 "--cross-compile-prefix" Configure flag described above. If both
1662 are set then the Configure flag takes precedence.
1665 The command string for the Perl executable to insert in the
1666 #! line of perl scripts that will be publicly installed.
1667 Default: /usr/bin/env perl
1668 Note: the value of this variable is added to the same scripts
1669 on all platforms, but it's only relevant on Unix-like platforms.
1672 This can be the value `32` or `64` to specify the architecture
1673 when it is not "obvious" to the configuration. It should generally
1674 not be necessary to specify this environment variable.
1677 The name of the nm executable to use.
1679 OPENSSL_LOCAL_CONFIG_DIR
1680 OpenSSL comes with a database of information about how it
1681 should be built on different platforms as well as build file
1682 templates for those platforms. The database is comprised of
1683 ".conf" files in the Configurations directory. The build
1684 file templates reside there as well as ".tmpl" files. See the
1685 file [Configurations/README.md](Configurations/README.md)
1686 for further information about the format of ".conf" files
1687 as well as information on the ".tmpl" files.
1688 In addition to the standard ".conf" and ".tmpl" files, it is
1689 possible to create your own ".conf" and ".tmpl" files and
1690 store them locally, outside the OpenSSL source tree.
1691 This environment variable can be set to the directory where
1692 these files are held and will be considered by Configure
1693 before it looks in the standard directories.
1696 The name of the Perl executable to use when building OpenSSL.
1697 Only needed if building should use a different Perl executable
1698 than what is used to run the Configure script.
1701 The name of the ranlib executable to use.
1704 The name of the rc executable to use. The default will be as
1705 defined for the target platform in the ".conf" file. If not
1706 defined then "windres" will be used. The WINDRES environment
1707 variable is synonymous to this. If both are defined then RC
1716 The `Configure` script generates a Makefile in a format relevant to the specific
1717 platform. The Makefiles provide a number of targets that can be used. Not all
1718 targets may be available on all platforms. Only the most common targets are
1719 described here. Examine the Makefiles themselves for the full list.
1722 The target to build all the software components and
1726 Build all the software components.
1727 THIS IS THE DEFAULT TARGET.
1730 Build all documentation components.
1733 On unix platforms, this target can be used to create .debug
1734 libraries, which separate the DWARF information in the
1735 shared library ELF files into a separate file for use
1736 in post-mortem (core dump) debugging
1739 Remove all build artefacts and return the directory to a "clean"
1743 Rebuild the dependencies in the Makefiles. This is a legacy
1744 option that no longer needs to be used since OpenSSL 1.1.0.
1747 Install all OpenSSL components.
1750 Only install the OpenSSL software components.
1753 Only install the OpenSSL documentation components.
1756 Only install the OpenSSL man pages (Unix only).
1759 Only install the OpenSSL HTML documentation.
1762 Install the FIPS provider module configuration file.
1765 Prints a list of all the self test names.
1768 Build and run the OpenSSL self tests.
1771 Uninstall all OpenSSL components.
1775 Re-run the configuration process, as exactly as the last time
1779 This is a developer option. If you are developing a patch for
1780 OpenSSL you may need to use this if you want to update
1781 automatically generated files; add new error codes or add new
1782 (or change the visibility of) public API functions. (Unix only).
1784 Running Selected Tests
1785 ----------------------
1787 You can specify a set of tests to be performed
1788 using the `make` variable `TESTS`.
1790 See the section [Running Selected Tests of
1791 test/README.md](test/README.md#running-selected-tests).
1796 Configuration Problems
1797 ----------------------
1799 ### Selecting the correct target
1801 The `./Configure` script tries hard to guess your operating system, but in some
1802 cases it does not succeed. You will see a message like the following:
1805 Operating system: x86-whatever-minix
1806 This system (minix) is not supported. See file INSTALL.md for details.
1808 Even if the automatic target selection by the `./Configure` script fails,
1809 chances are that you still might find a suitable target in the `Configurations`
1810 directory, which you can supply to the `./Configure` command,
1811 possibly after some adjustment.
1813 The `Configurations/` directory contains a lot of examples of such targets.
1814 The main configuration file is [10-main.conf], which contains all targets that
1815 are officially supported by the OpenSSL team. Other configuration files contain
1816 targets contributed by other OpenSSL users. The list of targets can be found in
1817 a Perl list `my %targets = ( ... )`.
1822 inherit_from => [ "base-target" ],
1824 cflags => add("..."),
1826 perlasm_scheme => "...",
1831 If you call `./Configure` without arguments, it will give you a list of all
1832 known targets. Using `grep`, you can lookup the target definition in the
1833 `Configurations/` directory. For example the `android-x86_64` can be found in
1834 [Configurations/15-android.conf](Configurations/15-android.conf).
1836 The directory contains two README files, which explain the general syntax and
1837 design of the configuration files.
1839 - [Configurations/README.md](Configurations/README.md)
1840 - [Configurations/README-design.md](Configurations/README-design.md)
1842 If you need further help, try to search the [openssl-users] mailing list
1843 or the [GitHub Issues] for existing solutions. If you don't find anything,
1844 you can [raise an issue] to ask a question yourself.
1846 More about our support resources can be found in the [SUPPORT] file.
1848 ### Configuration Errors
1850 If the `./config` or `./Configure` command fails with an error message,
1851 read the error message carefully and try to figure out whether you made
1852 a mistake (e.g., by providing a wrong option), or whether the script is
1853 working incorrectly. If you think you encountered a bug, please
1854 [raise an issue] on GitHub to file a bug report.
1856 Along with a short description of the bug, please provide the complete
1857 configure command line and the relevant output including the error message.
1859 Note: To make the output readable, please add a 'code fence' (three backquotes
1860 ` ``` ` on a separate line) before and after your output:
1863 ./Configure [your arguments...]
1872 If the build fails, look carefully at the output. Try to locate and understand
1873 the error message. It might be that the compiler is already telling you
1874 exactly what you need to do to fix your problem.
1876 There may be reasons for the failure that aren't problems in OpenSSL itself,
1877 for example if the compiler reports missing standard or third party headers.
1879 If the build succeeded previously, but fails after a source or configuration
1880 change, it might be helpful to clean the build tree before attempting another
1881 build. Use this command:
1884 $ mms clean ! (or mmk) OpenVMS
1885 $ nmake clean # Windows
1887 Assembler error messages can sometimes be sidestepped by using the `no-asm`
1888 configuration option. See also [notes](#notes-on-assembler-modules-compilation).
1890 Compiling parts of OpenSSL with gcc and others with the system compiler will
1891 result in unresolved symbols on some systems.
1893 If you are still having problems, try to search the [openssl-users] mailing
1894 list or the [GitHub Issues] for existing solutions. If you think you
1895 encountered an OpenSSL bug, please [raise an issue] to file a bug report.
1896 Please take the time to review the existing issues first; maybe the bug was
1897 already reported or has already been fixed.
1902 If some tests fail, look at the output. There may be reasons for the failure
1903 that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
1905 You may want increased verbosity, that can be accomplished as described in
1906 section [Test Failures of test/README.md](test/README.md#test-failures).
1908 You may also want to selectively specify which test(s) to perform. This can be
1909 done using the `make` variable `TESTS` as described in section [Running
1910 Selected Tests of test/README.md](test/README.md#running-selected-tests).
1912 If you find a problem with OpenSSL itself, try removing any
1913 compiler optimization flags from the `CFLAGS` line in the Makefile and
1914 run `make clean; make` or corresponding.
1916 To report a bug please open an issue on GitHub, at
1917 <https://github.com/openssl/openssl/issues>.
1922 Notes on multi-threading
1923 ------------------------
1925 For some systems, the OpenSSL `Configure` script knows what compiler options
1926 are needed to generate a library that is suitable for multi-threaded
1927 applications. On these systems, support for multi-threading is enabled
1928 by default; use the `no-threads` option to disable (this should never be
1931 On other systems, to enable support for multi-threading, you will have
1932 to specify at least two options: `threads`, and a system-dependent option.
1933 (The latter is `-D_REENTRANT` on various systems.) The default in this
1934 case, obviously, is not to include support for multi-threading (but
1935 you can still use `no-threads` to suppress an annoying warning message
1936 from the `Configure` script.)
1938 OpenSSL provides built-in support for two threading models: pthreads (found on
1939 most UNIX/Linux systems), and Windows threads. No other threading models are
1940 supported. If your platform does not provide pthreads or Windows threads then
1941 you should use `Configure` with the `no-threads` option.
1943 For pthreads, all locks are non-recursive. In addition, in a debug build,
1944 the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1945 available on your platform, you might have to add
1946 `-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1947 (On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1948 ifdef test cannot be used.)
1950 Notes on shared libraries
1951 -------------------------
1953 For most systems the OpenSSL `Configure` script knows what is needed to
1954 build shared libraries for libcrypto and libssl. On these systems
1955 the shared libraries will be created by default. This can be suppressed and
1956 only static libraries created by using the `no-shared` option. On systems
1957 where OpenSSL does not know how to build shared libraries the `no-shared`
1958 option will be forced and only static libraries will be created.
1960 Shared libraries are named a little differently on different platforms.
1961 One way or another, they all have the major OpenSSL version number as
1962 part of the file name, i.e. for OpenSSL 1.1.x, `1.1` is somehow part of
1965 On most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1966 and `libssl.so.1.1`.
1968 on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1969 with import libraries `libcrypto.dll.a` and `libssl.dll.a`.
1971 On Windows build with MSVC or using MingW, shared libraries are named
1972 `libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1973 `libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1974 and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1975 With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1976 while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
1978 On VMS, shareable images (VMS speak for shared libraries) are named
1979 `ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`. However, when
1980 OpenSSL is specifically built for 32-bit pointers, the shareable images
1981 are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
1982 instead, and when built for 64-bit pointers, they are named
1983 `ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
1985 Notes on random number generation
1986 ---------------------------------
1988 Availability of cryptographically secure random numbers is required for
1989 secret key generation. OpenSSL provides several options to seed the
1990 internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
1991 to deliver random bytes and a "PRNG not seeded error" will occur.
1993 The seeding method can be configured using the `--with-rand-seed` option,
1994 which can be used to specify a comma separated list of seed methods.
1995 However, in most cases OpenSSL will choose a suitable default method,
1996 so it is not necessary to explicitly provide this option. Note also
1997 that not all methods are available on all platforms. The FIPS provider will
1998 silently ignore seed sources that were not validated.
2000 I) On operating systems which provide a suitable randomness source (in
2001 form of a system call or system device), OpenSSL will use the optimal
2002 available method to seed the CSPRNG from the operating system's
2003 randomness sources. This corresponds to the option `--with-rand-seed=os`.
2005 II) On systems without such a suitable randomness source, automatic seeding
2006 and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
2007 to install additional support software to obtain a random seed and reseed
2008 the CSPRNG manually. Please check out the manual pages for `RAND_add()`,
2009 `RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
2011 Notes on assembler modules compilation
2012 --------------------------------------
2014 Compilation of some code paths in assembler modules might depend on whether the
2015 current assembler version supports certain ISA extensions or not. Code paths
2016 that use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
2017 Apart from that, the minimum requirements for the assembler versions are shown
2020 | ISA extension | GNU as | nasm | llvm |
2021 |---------------|--------|--------|---------|
2022 | AVX | 2.19 | 2.09 | 3.0 |
2023 | AVX2 | 2.22 | 2.10 | 3.1 |
2024 | ADCX/ADOX | 2.23 | 2.10 | 3.3 |
2025 | AVX512 | 2.25 | 2.11.8 | 3.6 (*) |
2026 | AVX512IFMA | 2.26 | 2.11.8 | 6.0 (*) |
2027 | VAES | 2.30 | 2.13.3 | 6.0 (*) |
2031 (*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
2032 an explicit -march flag was apparently required to compile assembly modules. But
2033 then the compiler generates processor-specific code, which in turn contradicts
2034 the idea of performing dispatch at run-time, which is facilitated by the special
2035 variable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
2036 around the problem by forcing the build procedure to use the following script:
2039 exec clang -no-integrated-as "$@"
2041 instead of the real clang. In which case it doesn't matter what clang version
2042 is used, as it is the version of the GNU assembler that will be checked.
2044 Notes on profile guided optimization
2045 ------------------------------------
2047 Some compilers support the concept of profile guided optimization. This feature
2048 allows a user to build openssl and use profiling data gathered while running an
2049 application such that it can then be rebuilt in a way that is optimized specifically
2050 for that application, increasing performance. Currently this feature is built into
2051 the openssl build system for x86_64 only.
2053 1) Configure openssl with the --coverage option. This will configure the compiler to
2054 record profiling data for the libcrypto and libssl libraries
2055 2) Run the application(s) which you wish to optimize for, ensuring that they use
2056 the libraries compiled in step (1) (note this may entail the use of LD_LIBRARY_PATH)
2057 3) Clean the openssl build with make clean. Note that the profile data (the .gcda and .gcno
2058 files are retained through the clean operation). This is intentional.
2059 4) Configure openssl again, but this time select the --pgo build type. This will use the
2060 profiled data to optimize code layout for the application in question.
2067 <https://mta.openssl.org/mailman/listinfo/openssl-users>
2073 <https://github.com/openssl/openssl/issues>
2076 <https://github.com/openssl/openssl/issues/new/choose>
2079 Configurations/10-main.conf
2082 <https://csrc.nist.gov/projects/cryptographic-module-validation-program>
2085 <https://csrc.nist.gov/Projects/cryptographic-module-validation-program/entropy-validations>
2088 <https://csrc.nist.gov/pubs/fips/203/final>
2091 <https://csrc.nist.gov/pubs/fips/204/final>
2094 <https://csrc.nist.gov/pubs/sp/800/90/b/final>
2096 [jitterentropy-library]:
2097 <https://github.com/smuellerDD/jitterentropy-library>
2100 <https://csrc.nist.gov/pubs/fips/205/final>