]> git.ipfire.org Git - thirdparty/openssl.git/blame - INSTALL.md
e_os2: add ossl_static_assert_type_eq
[thirdparty/openssl.git] / INSTALL.md
CommitLineData
6ede7d73
DMSP
1Build and Install
2=================
3
4This document describes installation on all supported operating
5systems (the Unix/Linux family, including macOS), OpenVMS,
6and Windows).
7
8Table of Contents
9=================
10
11 - [Prerequisites](#prerequisites)
12 - [Notational Conventions](#notational-conventions)
13 - [Quick Installation Guide](#quick-installation-guide)
257e9d03
RS
14 - [Building OpenSSL](#building-openssl)
15 - [Installing OpenSSL](#installing-openssl)
6ede7d73 16 - [Configuration Options](#configuration-options)
257e9d03
RS
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)
12e96a23 22 - [Compression Algorithm Flags](#compression-algorithm-flags)
257e9d03 23 - [Seeding the Random Generator](#seeding-the-random-generator)
31214258 24 - [Setting the FIPS HMAC key](#setting-the-FIPS-HMAC-key)
257e9d03
RS
25 - [Enable and Disable Features](#enable-and-disable-features)
26 - [Displaying configuration data](#displaying-configuration-data)
6ede7d73 27 - [Installation Steps in Detail](#installation-steps-in-detail)
257e9d03
RS
28 - [Configure](#configure-openssl)
29 - [Build](#build-openssl)
30 - [Test](#test-openssl)
31 - [Install](#install-openssl)
6ede7d73 32 - [Advanced Build Options](#advanced-build-options)
257e9d03
RS
33 - [Environment Variables](#environment-variables)
34 - [Makefile Targets](#makefile-targets)
35 - [Running Selected Tests](#running-selected-tests)
6ede7d73 36 - [Troubleshooting](#troubleshooting)
257e9d03
RS
37 - [Configuration Problems](#configuration-problems)
38 - [Build Failures](#build-failures)
39 - [Test Failures](#test-failures)
6ede7d73 40 - [Notes](#notes)
257e9d03
RS
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)
203c18f1 44 - [Notes on assembler modules compilation](#notes-on-assembler-modules-compilation)
79e259e3 45
6ede7d73
DMSP
46Prerequisites
47=============
2acd8ec7 48
6ede7d73 49To install OpenSSL, you will need:
2acd8ec7 50
3a0b3cc9 51 * A "make" implementation
9f1fe6a9
DMSP
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))
6ede7d73
DMSP
54 * an ANSI C compiler
55 * a development environment in the form of development libraries and C
56 header files
57 * a supported operating system
79e259e3 58
6ede7d73
DMSP
59For additional platform specific requirements, solutions to specific
60issues and other details, please read one of these:
ea24fe29 61
4148581e
DMSP
62 * [Notes for UNIX-like platforms](NOTES-UNIX.md)
63 * [Notes for Android platforms](NOTES-ANDROID.md)
64 * [Notes for Windows platforms](NOTES-WINDOWS.md)
65 * [Notes for the DOS platform with DJGPP](NOTES-DJGPP.md)
66 * [Notes for the OpenVMS platform](NOTES-VMS.md)
67 * [Notes on Perl](NOTES-PERL.md)
68 * [Notes on Valgrind](NOTES-VALGRIND.md)
ea24fe29 69
6ede7d73
DMSP
70Notational conventions
71======================
ea24fe29 72
6ede7d73 73Throughout this document, we use the following conventions.
ea24fe29 74
6ede7d73
DMSP
75Commands
76--------
ea24fe29 77
6ede7d73 78Any line starting with a dollar sign is a command line.
ea24fe29 79
6ede7d73 80 $ command
ea24fe29 81
6ede7d73
DMSP
82The dollar sign indicates the shell prompt and is not to be entered as
83part of the command.
ea24fe29 84
6ede7d73
DMSP
85Choices
86-------
ea24fe29 87
6ede7d73
DMSP
88Several words in curly braces separated by pipe characters indicate a
89**mandatory choice**, to be replaced with one of the given words.
90For example, the line
ea24fe29 91
6ede7d73 92 $ echo { WORD1 | WORD2 | WORD3 }
ea24fe29 93
6ede7d73 94represents one of the following three commands
ea24fe29 95
6ede7d73
DMSP
96 $ echo WORD1
97 - or -
98 $ echo WORD2
99 - or -
100 $ echo WORD3
ea24fe29 101
6ede7d73
DMSP
102One or several words in square brackets separated by pipe characters
103denote an **optional choice**. It is similar to the mandatory choice,
104but it can also be omitted entirely.
79e259e3 105
6ede7d73 106So the line
79e259e3 107
6ede7d73
DMSP
108 $ echo [ WORD1 | WORD2 | WORD3 ]
109
110represents one of the four commands
111
112 $ echo WORD1
113 - or -
114 $ echo WORD2
115 - or -
116 $ echo WORD3
117 - or -
118 $ echo
119
120Arguments
121---------
122
a4ffb33e 123**Optional Arguments** are enclosed in square brackets.
6ede7d73 124
a4ffb33e 125 [option...]
6ede7d73 126
a4ffb33e 127A trailing ellipsis means that more than one could be specified.
6ede7d73 128
6ede7d73
DMSP
129Quick Installation Guide
130========================
131
132If you just want to get OpenSSL installed without bothering too much
133about the details, here is the short version of how to build and install
134OpenSSL. If any of the following steps fails, please consult the
bf4cdd4a 135[Installation in Detail](#installation-steps-in-detail) section below.
6ede7d73
DMSP
136
137Building OpenSSL
138----------------
139
140Use the following commands to configure, build and test OpenSSL.
141The testing is optional, but recommended if you intend to install
142OpenSSL for production use.
143
257e9d03 144### Unix / Linux / macOS
2acd8ec7 145
16b0e0fc 146 $ ./Configure
2acd8ec7
RL
147 $ make
148 $ make test
2acd8ec7 149
257e9d03 150### OpenVMS
6ede7d73
DMSP
151
152Use the following commands to build OpenSSL:
2acd8ec7 153
16b0e0fc 154 $ perl Configure
2acd8ec7
RL
155 $ mms
156 $ mms test
79e259e3 157
257e9d03 158### Windows
6ede7d73
DMSP
159
160If you are using Visual Studio, open a Developer Command Prompt and
8c1cbc72 161issue the following commands to build OpenSSL.
b32b8961 162
16b0e0fc 163 $ perl Configure
b32b8961
RL
164 $ nmake
165 $ nmake test
6ede7d73
DMSP
166
167As mentioned in the [Choices](#choices) section, you need to pick one
168of the four Configure targets in the first command.
169
18891efd 170Most likely you will be using the `VC-WIN64A`/`VC-WIN64A-HYBRIDCRT` target for
17164bit Windows binaries (AMD64) or `VC-WIN32`/`VC-WIN32-HYBRIDCRT` for 32bit
172Windows binaries (X86).
9afbb681
DDO
173The other two options are `VC-WIN64I` (Intel IA64, Itanium) and
174`VC-CE` (Windows CE) are rather uncommon nowadays.
6ede7d73
DMSP
175
176Installing OpenSSL
177------------------
178
179The following commands will install OpenSSL to a default system location.
180
181**Danger Zone:** even if you are impatient, please read the following two
182paragraphs carefully before you install OpenSSL.
183
184For security reasons the default system location is by default not writable
185for unprivileged users. So for the final installation step administrative
186privileges are required. The default system location and the procedure to
8c1cbc72 187obtain administrative privileges depends on the operating system.
6ede7d73
DMSP
188It is recommended to compile and test OpenSSL with normal user privileges
189and use administrative privileges only for the final installation step.
190
191On some platforms OpenSSL is preinstalled as part of the Operating System.
192In this case it is highly recommended not to overwrite the system versions,
193because other applications or libraries might depend on it.
194To avoid breaking other applications, install your copy of OpenSSL to a
195[different location](#installing-to-a-different-location) which is not in
196the global search path for system libraries.
197
41149648
RL
198Finally, if you plan on using the FIPS module, you need to read the
199[Post-installation Notes](#post-installation-notes) further down.
200
257e9d03 201### Unix / Linux / macOS
6ede7d73
DMSP
202
203Depending on your distribution, you need to run the following command as
204root user or prepend `sudo` to the command:
205
206 $ make install
207
208By default, OpenSSL will be installed to
209
210 /usr/local
211
212More precisely, the files will be installed into the subdirectories
213
214 /usr/local/bin
215 /usr/local/lib
216 /usr/local/include
217 ...
218
219depending on the file type, as it is custom on Unix-like operating systems.
220
257e9d03 221### OpenVMS
6ede7d73
DMSP
222
223Use the following command to install OpenSSL.
224
225 $ mms install
226
227By default, OpenSSL will be installed to
228
d8c1cafb 229 SYS$COMMON:[OPENSSL]
6ede7d73 230
257e9d03 231### Windows
6ede7d73
DMSP
232
233If you are using Visual Studio, open the Developer Command Prompt _elevated_
234and issue the following command.
235
8c16829e 236 $ nmake install
b32b8961 237
98663afc
TM
238The easiest way to elevate the Command Prompt is to press and hold down both
239the `<CTRL>` and `<SHIFT>` keys while clicking the menu item in the task menu.
6ede7d73
DMSP
240
241The default installation location is
242
243 C:\Program Files\OpenSSL
7c03bb9f 244
6ede7d73 245for native binaries, or
b1fe6b43 246
6ede7d73 247 C:\Program Files (x86)\OpenSSL
2acd8ec7 248
6ede7d73 249for 32bit binaries on 64bit Windows (WOW64).
2acd8ec7 250
257e9d03 251#### Installing to a different location
79e259e3 252
6ede7d73 253To install OpenSSL to a different location (for example into your home
9afbb681 254directory for testing purposes) run `Configure` as shown in the following
43a70f02 255examples.
6ede7d73 256
d8c1cafb
RL
257The options `--prefix` and `--openssldir` are explained in further detail in
258[Directories](#directories) below, and the values used here are mere examples.
259
43a70f02 260On Unix:
2acd8ec7 261
16b0e0fc 262 $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl
2acd8ec7 263
43a70f02 264On OpenVMS:
2acd8ec7 265
16b0e0fc 266 $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
79e259e3 267
6ede7d73 268Note: if you do add options to the configuration command, please make sure
1dc1ea18 269you've read more than just this Quick Start, such as relevant `NOTES-*` files,
6ede7d73
DMSP
270the options outline below, as configuration options may change the outcome
271in otherwise unexpected ways.
272
6ede7d73
DMSP
273Configuration Options
274=====================
275
9afbb681
DDO
276There are several options to `./Configure` to customize the build (note that
277for Windows, the defaults for `--prefix` and `--openssldir` depend on what
16b0e0fc 278configuration is used and what Windows implementation OpenSSL is built on.
9f1fe6a9 279For more information, see the [Notes for Windows platforms](NOTES-WINDOWS.md).
6ede7d73
DMSP
280
281API Level
282---------
283
284 --api=x.y[.z]
285
286Build the OpenSSL libraries to support the API for the specified version.
287If [no-deprecated](#no-deprecated) is also given, don't build with support
288for deprecated APIs in or below the specified version number. For example,
473664aa 289adding
6ede7d73
DMSP
290
291 --api=1.1.0 no-deprecated
292
293will remove support for all APIs that were deprecated in OpenSSL version
2941.1.0 or below. This is a rather specialized option for developers.
295If you just intend to remove all deprecated APIs up to the current version
296entirely, just specify [no-deprecated](#no-deprecated).
297If `--api` isn't given, it defaults to the current (minor) OpenSSL version.
298
6ede7d73
DMSP
299Cross Compile Prefix
300--------------------
301
9afbb681 302 --cross-compile-prefix=<PREFIX>
6ede7d73 303
9afbb681 304The `<PREFIX>` to include in front of commands for your toolchain.
6ede7d73 305
9afbb681
DDO
306It is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler
307as `a-b-c-gcc`, etc. Unfortunately cross-compiling is too case-specific to put
6ede7d73 308together one-size-fits-all instructions. You might have to pass more flags or
16b0e0fc
RL
309set up environment variables to actually make it work. Android and iOS cases
310are discussed in corresponding `Configurations/15-*.conf` files. But there are
311cases when this option alone is sufficient. For example to build the mingw64
312target on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works. Naturally
313provided that mingw packages are installed. Today Debian and Ubuntu users
314have option to install a number of prepackaged cross-compilers along with
315corresponding run-time and development packages for "alien" hardware. To give
316another example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such
317case.
318
319For cross compilation, you must [configure manually](#manual-configuration).
320Also, note that `--openssldir` refers to target's file system, not one you are
321building on.
6ede7d73 322
6ede7d73
DMSP
323Build Type
324----------
325
326 --debug
327
328Build OpenSSL with debugging symbols and zero optimization level.
329
330 --release
331
332Build OpenSSL without debugging symbols. This is the default.
333
6ede7d73
DMSP
334Directories
335-----------
336
257e9d03 337### libdir
6ede7d73
DMSP
338
339 --libdir=DIR
340
341The name of the directory under the top of the installation directory tree
342(see the `--prefix` option) where libraries will be installed. By default
bd32bdb8 343this is `lib`. Note that on Windows only static libraries (`*.lib`) will
6ede7d73 344be stored in this location. Shared libraries (`*.dll`) will always be
bd32bdb8
TM
345installed to the `bin` directory.
346
347Some build targets have a multilib postfix set in the build configuration.
348For these targets the default libdir is `lib<multilib-postfix>`. Please use
349`--libdir=lib` to override the libdir if adding the postfix is undesirable.
6ede7d73 350
257e9d03 351### openssldir
6ede7d73
DMSP
352
353 --openssldir=DIR
354
355Directory for OpenSSL configuration files, and also the default certificate
356and key store. Defaults are:
357
358 Unix: /usr/local/ssl
359 Windows: C:\Program Files\Common Files\SSL
360 OpenVMS: SYS$COMMON:[OPENSSL-COMMON]
361
362For 32bit Windows applications on Windows 64bit (WOW64), always replace
363`C:\Program Files` by `C:\Program Files (x86)`.
364
257e9d03 365### prefix
6ede7d73
DMSP
366
367 --prefix=DIR
368
369The top of the installation directory tree. Defaults are:
370
371 Unix: /usr/local
372 Windows: C:\Program Files\OpenSSL
d8c1cafb 373 OpenVMS: SYS$COMMON:[OPENSSL]
6ede7d73 374
6ede7d73
DMSP
375Compiler Warnings
376-----------------
377
378 --strict-warnings
379
380This is a developer flag that switches on various compiler options recommended
381for OpenSSL development. It only works when using gcc or clang as the compiler.
382If you are developing a patch for OpenSSL then it is recommended that you use
383this option where possible.
384
12e96a23
TS
385Compression Algorithm Flags
386---------------------------
387
388### with-brotli-include
389
390 --with-brotli-include=DIR
391
392The directory for the location of the brotli include files (i.e. the location
393of the **brotli** include directory). This option is only necessary if
394[enable-brotli](#enable-brotli) is used and the include files are not already
395on the system include path.
396
397### with-brotli-lib
398
399 --with-brotli-lib=LIB
400
401**On Unix**: this is the directory containing the brotli libraries.
402If not provided, the system library path will be used.
403
404The names of the libraries are:
405
406* libbrotlicommon.a or libbrotlicommon.so
407* libbrotlidec.a or libbrotlidec.so
408* libbrotlienc.a or libbrotlienc.so
409
410**On Windows:** this is the directory containing the brotli libraries.
411If not provided, the system library path will be used.
412
413The names of the libraries are:
414
415* brotlicommon.lib
416* brotlidec.lib
417* brotlienc.lib
6ede7d73 418
257e9d03 419### with-zlib-include
6ede7d73
DMSP
420
421 --with-zlib-include=DIR
422
423The directory for the location of the zlib include file. This option is only
bf4cdd4a 424necessary if [zlib](#zlib) is used and the include file is not
6ede7d73
DMSP
425already on the system include path.
426
257e9d03 427### with-zlib-lib
6ede7d73
DMSP
428
429 --with-zlib-lib=LIB
430
431**On Unix**: this is the directory containing the zlib library.
432If not provided the system library path will be used.
433
434**On Windows:** this is the filename of the zlib library (with or
435without a path). This flag must be provided if the
9afbb681
DDO
436[zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used
437then this flag is optional and defaults to `ZLIB1` if not provided.
6ede7d73
DMSP
438
439**On VMS:** this is the filename of the zlib library (with or without a path).
9afbb681
DDO
440This flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32`
441or `GNV$LIBZSHR64` is used by default depending on the pointer size chosen.
6ede7d73 442
caf9317d
TS
443### with-zstd-include
444
445 --with-zstd-include=DIR
446
447The directory for the location of the Zstd include file. This option is only
448necessary if [enable-std](#enable-zstd) is used and the include file is not
449already on the system include path.
450
451OpenSSL requires Zstd 1.4 or greater. The Linux kernel source contains a
452*zstd.h* file that is not compatible with the 1.4.x Zstd distribution, the
453compilation will generate an error if the Linux *zstd.h* is included before
454(or instead of) the Zstd distribution header.
455
456### with-zstd-lib
457
458 --with-zstd-lib=LIB
459
460**On Unix**: this is the directory containing the Zstd library.
461If not provided the system library path will be used.
462
463**On Windows:** this is the filename of the Zstd library (with or
464without a path). This flag must be provided if the
465[enable-zstd-dynamic](#enable-zstd-dynamic) option is not also used.
466If `zstd-dynamic` is used then this flag is optional and defaults
467to `LIBZSTD` if not provided.
468
6ede7d73
DMSP
469Seeding the Random Generator
470----------------------------
471
472 --with-rand-seed=seed1[,seed2,...]
473
474A comma separated list of seeding methods which will be tried by OpenSSL
475in order to obtain random input (a.k.a "entropy") for seeding its
476cryptographically secure random number generator (CSPRNG).
477The current seeding methods are:
478
257e9d03 479### os
6ede7d73
DMSP
480
481Use a trusted operating system entropy source.
482This is the default method if such an entropy source exists.
483
257e9d03 484### getrandom
6ede7d73
DMSP
485
486Use the [getrandom(2)][man-getrandom] or equivalent system call.
487
488[man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html
489
257e9d03 490### devrandom
6ede7d73 491
9afbb681
DDO
492Use the first device from the `DEVRANDOM` list which can be opened to read
493random bytes. The `DEVRANDOM` preprocessor constant expands to
6ede7d73
DMSP
494
495 "/dev/urandom","/dev/random","/dev/srandom"
496
497on most unix-ish operating systems.
498
257e9d03 499### egd
6ede7d73
DMSP
500
501Check for an entropy generating daemon.
b99c463d 502This source is ignored by the FIPS provider.
6ede7d73 503
257e9d03 504### rdcpu
6ede7d73 505
e8b597f3
OT
506Use the `RDSEED` or `RDRAND` command on x86 or `RNDRRS` command on aarch64
507if provided by the CPU.
6ede7d73 508
257e9d03 509### librandom
6ede7d73
DMSP
510
511Use librandom (not implemented yet).
b99c463d 512This source is ignored by the FIPS provider.
6ede7d73 513
257e9d03 514### none
6ede7d73
DMSP
515
516Disable automatic seeding. This is the default on some operating systems where
517no suitable entropy source exists, or no support for it is implemented yet.
b99c463d 518This option is ignored by the FIPS provider.
6ede7d73
DMSP
519
520For more information, see the section [Notes on random number generation][rng]
521at the end of this document.
522
523[rng]: #notes-on-random-number-generation
524
31214258
RS
525Setting the FIPS HMAC key
526-------------------------
527
528 --fips-key=value
529
530As part of its self-test validation, the FIPS module must verify itself
531by performing a SHA-256 HMAC computation on itself. The default key is
532the SHA256 value of "the holy handgrenade of antioch" and is sufficient
533for meeting the FIPS requirements.
534
535To change the key to a different value, use this flag. The value should
536be a hex string no more than 64 characters.
537
6ede7d73
DMSP
538Enable and Disable Features
539---------------------------
540
8c1cbc72
GN
541Feature options always come in pairs, an option to enable feature
542`xxxx`, and an option to disable it:
6ede7d73
DMSP
543
544 [ enable-xxxx | no-xxxx ]
545
546Whether a feature is enabled or disabled by default, depends on the feature.
547In the following list, always the non-default variant is documented: if
9afbb681
DDO
548feature `xxxx` is disabled by default then `enable-xxxx` is documented and
549if feature `xxxx` is enabled by default then `no-xxxx` is documented.
6ede7d73 550
257e9d03 551### no-afalgeng
6ede7d73
DMSP
552
553Don't build the AFALG engine.
554
555This option will be forced on a platform that does not support AFALG.
556
257e9d03 557### enable-ktls
6ede7d73
DMSP
558
559Build with Kernel TLS support.
560
561This option will enable the use of the Kernel TLS data-path, which can improve
562performance and allow for the use of sendfile and splice system calls on
563TLS sockets. The Kernel may use TLS accelerators if any are available on the
564system. This option will be forced off on systems that do not support the
565Kernel TLS data-path.
566
257e9d03 567### enable-asan
6ede7d73
DMSP
568
569Build with the Address sanitiser.
570
571This is a developer option only. It may not work on all platforms and should
572never be used in production environments. It will only work when used with
573gcc or clang and should be used in conjunction with the [no-shared](#no-shared)
574option.
575
d1a77041 576### enable-acvp-tests
4f2271d5 577
d1a77041 578Build support for Automated Cryptographic Validation Protocol (ACVP)
4f2271d5
SL
579tests.
580
581This is required for FIPS validation purposes. Certain ACVP tests require
582access to algorithm internals that are not normally accessible.
583Additional information related to ACVP can be found at
584<https://github.com/usnistgov/ACVP>.
585
257e9d03 586### no-asm
6ede7d73
DMSP
587
588Do not use assembler code.
589
590This should be viewed as debugging/troubleshooting option rather than for
591production use. On some platforms a small amount of assembler code may still
592be used even with this option.
593
257e9d03 594### no-async
6ede7d73
DMSP
595
596Do not build support for async operations.
597
257e9d03 598### no-autoalginit
6ede7d73
DMSP
599
600Don't automatically load all supported ciphers and digests.
601
602Typically OpenSSL will make available all of its supported ciphers and digests.
603For a statically linked application this may be undesirable if small executable
604size is an objective. This only affects libcrypto. Ciphers and digests will
9afbb681
DDO
605have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
606if this option is used. This option will force a non-shared build.
6ede7d73 607
257e9d03 608### no-autoerrinit
6ede7d73
DMSP
609
610Don't automatically load all libcrypto/libssl error strings.
611
612Typically OpenSSL will automatically load human readable error strings. For a
613statically linked application this may be undesirable if small executable size
614is an objective.
615
12e96a23
TS
616### enable-brotli
617
618Build with support for brotli compression/decompression.
619
620### enable-brotli-dynamic
621
622Like the enable-brotli option, but has OpenSSL load the brotli library dynamically
623when needed.
624
625This is only supported on systems where loading of shared libraries is supported.
626
257e9d03 627### no-autoload-config
6ede7d73 628
9afbb681 629Don't automatically load the default `openssl.cnf` file.
6ede7d73
DMSP
630
631Typically OpenSSL will automatically load a system config file which configures
632default SSL options.
633
257e9d03 634### enable-buildtest-c++
6ede7d73
DMSP
635
636While testing, generate C++ buildtest files that simply check that the public
637OpenSSL header files are usable standalone with C++.
638
639Enabling this option demands extra care. For any compiler flag given directly
640as configuration option, you must ensure that it's valid for both the C and
641the C++ compiler. If not, the C++ build test will most likely break. As an
9afbb681 642alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
6ede7d73 643
d0364dcc
RS
644### --banner=text
645
646Use the specified text instead of the default banner at the end of
647configuration.
648
ecb09baf
RS
649### --w
650
651On platforms where the choice of 32-bit or 64-bit architecture
652is not explicitly specified, `Configure` will print a warning
653message and wait for a few seconds to let you interrupt the
654configuration. Using this flag skips the wait.
655
06f81af8
DDO
656### no-bulk
657
658Build only some minimal set of features.
659This is a developer option used internally for CI build tests of the project.
660
1eaf1fc3
P
661### no-cached-fetch
662
663Never cache algorithms when they are fetched from a provider. Normally, a
664provider indicates if the algorithms it supplies can be cached or not. Using
665this option will reduce run-time memory usage but it also introduces a
666significant performance penalty. This option is primarily designed to help
667with detecting incorrect reference counting.
668
257e9d03 669### no-capieng
6ede7d73
DMSP
670
671Don't build the CAPI engine.
672
673This option will be forced if on a platform that does not support CAPI.
674
257e9d03 675### no-cmp
6ede7d73 676
9afbb681
DDO
677Don't build support for Certificate Management Protocol (CMP)
678and Certificate Request Message Format (CRMF).
6ede7d73 679
257e9d03 680### no-cms
6ede7d73
DMSP
681
682Don't build support for Cryptographic Message Syntax (CMS).
683
257e9d03 684### no-comp
6ede7d73
DMSP
685
686Don't build support for SSL/TLS compression.
687
688If this option is enabled (the default), then compression will only work if
9afbb681 689the zlib or `zlib-dynamic` options are also chosen.
6ede7d73 690
257e9d03 691### enable-crypto-mdebug
6ede7d73 692
9afbb681 693This now only enables the `failed-malloc` feature.
6ede7d73 694
257e9d03 695### enable-crypto-mdebug-backtrace
6ede7d73
DMSP
696
697This is a no-op; the project uses the compiler's address/leak sanitizer instead.
698
257e9d03 699### no-ct
6ede7d73
DMSP
700
701Don't build support for Certificate Transparency (CT).
702
257e9d03 703### no-deprecated
6ede7d73
DMSP
704
705Don't build with support for deprecated APIs up until and including the version
706given with `--api` (or the current version, if `--api` wasn't specified).
707
257e9d03 708### no-dgram
6ede7d73
DMSP
709
710Don't build support for datagram based BIOs.
711
712Selecting this option will also force the disabling of DTLS.
713
257e9d03 714### no-dso
6ede7d73
DMSP
715
716Don't build support for loading Dynamic Shared Objects (DSO)
717
257e9d03 718### enable-devcryptoeng
6ede7d73
DMSP
719
720Build the `/dev/crypto` engine.
721
722This option is automatically selected on the BSD platform, in which case it can
9afbb681 723be disabled with `no-devcryptoeng`.
6ede7d73 724
257e9d03 725### no-dynamic-engine
6ede7d73
DMSP
726
727Don't build the dynamically loaded engines.
728
729This only has an effect in a shared build.
730
257e9d03 731### no-ec
6ede7d73
DMSP
732
733Don't build support for Elliptic Curves.
734
257e9d03 735### no-ec2m
6ede7d73
DMSP
736
737Don't build support for binary Elliptic Curves
738
257e9d03 739### enable-ec_nistp_64_gcc_128
6ede7d73
DMSP
740
741Enable support for optimised implementations of some commonly used NIST
742elliptic curves.
743
744This option is only supported on platforms:
745
746 - with little-endian storage of non-byte types
747 - that tolerate misaligned memory references
748 - where the compiler:
749 - supports the non-standard type `__uint128_t`
750 - defines the built-in macro `__SIZEOF_INT128__`
751
257e9d03 752### enable-egd
6ede7d73
DMSP
753
754Build support for gathering entropy from the Entropy Gathering Daemon (EGD).
755
257e9d03 756### no-engine
6ede7d73
DMSP
757
758Don't build support for loading engines.
759
257e9d03 760### no-err
6ede7d73
DMSP
761
762Don't compile in any error strings.
763
257e9d03 764### enable-external-tests
6ede7d73
DMSP
765
766Enable building of integration with external test suites.
767
768This is a developer option and may not work on all platforms. The following
769external test suites are currently supported:
770
cede07dc 771 - GOST engine test suite
6ede7d73
DMSP
772 - Python PYCA/Cryptography test suite
773 - krb5 test suite
774
036cbb6b
DDO
775See the file [test/README-external.md](test/README-external.md)
776for further details.
6ede7d73 777
257e9d03 778### no-filenames
6ede7d73
DMSP
779
780Don't compile in filename and line number information (e.g. for errors and
781memory allocation).
782
f2ea01d9 783### enable-fips
6ede7d73 784
f2ea01d9 785Build (and install) the FIPS provider
6ede7d73 786
991a6bb5
SL
787### no-fips-securitychecks
788
789Don't perform FIPS module run-time checks related to enforcement of security
790parameters such as minimum security strength of keys.
791
257e9d03 792### enable-fuzz-libfuzzer, enable-fuzz-afl
6ede7d73
DMSP
793
794Build with support for fuzzing using either libfuzzer or AFL.
795
796These are developer options only. They may not work on all platforms and
797should never be used in production environments.
798
799See the file [fuzz/README.md](fuzz/README.md) for further details.
800
257e9d03 801### no-gost
6ede7d73
DMSP
802
803Don't build support for GOST based ciphersuites.
804
805Note that if this feature is enabled then GOST ciphersuites are only available
806if the GOST algorithms are also available through loading an externally supplied
807engine.
808
257e9d03 809### no-legacy
6ede7d73
DMSP
810
811Don't build the legacy provider.
812
813Disabling this also disables the legacy algorithms: MD2 (already disabled by default).
814
257e9d03 815### no-makedepend
6ede7d73
DMSP
816
817Don't generate dependencies.
818
257e9d03 819### no-module
79e259e3 820
6ede7d73 821Don't build any dynamically loadable engines.
917a1b2e 822
9afbb681 823This also implies `no-dynamic-engine`.
917a1b2e 824
257e9d03 825### no-multiblock
917a1b2e 826
6ede7d73 827Don't build support for writing multiple records in one go in libssl
917a1b2e 828
6ede7d73 829Note: this is a different capability to the pipelining functionality.
917a1b2e 830
257e9d03 831### no-nextprotoneg
917a1b2e 832
6ede7d73 833Don't build support for the Next Protocol Negotiation (NPN) TLS extension.
c9f06e7f 834
257e9d03 835### no-ocsp
c9f06e7f 836
6ede7d73 837Don't build support for Online Certificate Status Protocol (OCSP).
b32b8961 838
257e9d03 839### no-padlockeng
2acd8ec7 840
6ede7d73 841Don't build the padlock engine.
2acd8ec7 842
257e9d03 843### no-hw-padlock
c9f06e7f 844
9afbb681 845As synonym for `no-padlockeng`. Deprecated and should not be used.
c9f06e7f 846
257e9d03 847### no-pic
b1fe6b43 848
6ede7d73 849Don't build with support for Position Independent Code.
b1fe6b43 850
257e9d03 851### no-pinshared
79e259e3 852
6ede7d73 853Don't pin the shared libraries.
79e259e3 854
6ede7d73
DMSP
855By default OpenSSL will attempt to stay in memory until the process exits.
856This is so that libcrypto and libssl can be properly cleaned up automatically
9afbb681
DDO
857via an `atexit()` handler. The handler is registered by libcrypto and cleans
858up both libraries. On some platforms the `atexit()` handler will run on unload of
6ede7d73
DMSP
859libcrypto (if it has been dynamically loaded) rather than at process exit. This
860option can be used to stop OpenSSL from attempting to stay in memory until the
861process exits. This could lead to crashes if either libcrypto or libssl have
862already been unloaded at the point that the atexit handler is invoked, e.g. on a
9afbb681 863platform which calls `atexit()` on unload of the library, and libssl is unloaded
6ede7d73 864before libcrypto then a crash is likely to happen. Applications can suppress
9afbb681
DDO
865running of the `atexit()` handler at run time by using the
866`OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
867See the man page for it for further details.
2acd8ec7 868
257e9d03 869### no-posix-io
2acd8ec7 870
6ede7d73 871Don't use POSIX IO capabilities.
2acd8ec7 872
257e9d03 873### no-psk
79e259e3 874
6ede7d73 875Don't build support for Pre-Shared Key based ciphersuites.
79e259e3 876
257e9d03 877### no-rdrand
79e259e3 878
6ede7d73 879Don't use hardware RDRAND capabilities.
79e259e3 880
257e9d03 881### no-rfc3779
5bb9e2b4 882
6ede7d73
DMSP
883Don't build support for RFC3779, "X.509 Extensions for IP Addresses and
884AS Identifiers".
79e259e3 885
257e9d03 886### sctp
2acd8ec7 887
6ede7d73 888Build support for Stream Control Transmission Protocol (SCTP).
2acd8ec7 889
257e9d03 890### no-shared
2acd8ec7 891
6ede7d73 892Do not create shared libraries, only static ones.
2acd8ec7 893
6ede7d73 894See [Notes on shared libraries](#notes-on-shared-libraries) below.
2acd8ec7 895
257e9d03 896### no-sock
2acd8ec7 897
6ede7d73 898Don't build support for socket BIOs.
2acd8ec7 899
257e9d03 900### no-srp
2acd8ec7 901
6ede7d73
DMSP
902Don't build support for Secure Remote Password (SRP) protocol or
903SRP based ciphersuites.
2acd8ec7 904
257e9d03 905### no-srtp
b32b8961 906
6ede7d73 907Don't build Secure Real-Time Transport Protocol (SRTP) support.
b32b8961 908
257e9d03 909### no-sse2
2acd8ec7 910
6ede7d73 911Exclude SSE2 code paths from 32-bit x86 assembly modules.
79e259e3 912
6ede7d73
DMSP
913Normally SSE2 extension is detected at run-time, but the decision whether or not
914the machine code will be executed is taken solely on CPU capability vector. This
915means that if you happen to run OS kernel which does not support SSE2 extension
916on Intel P4 processor, then your application might be exposed to "illegal
917instruction" exception. There might be a way to enable support in kernel, e.g.
9afbb681 918FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
6ede7d73 919disengage SSE2 code paths upon application start-up, but if you aim for wider
9afbb681
DDO
920"audience" running such kernel, consider `no-sse2`. Both the `386` and `no-asm`
921options imply `no-sse2`.
79e259e3 922
726f92e0 923### no-ssl-trace
79e259e3 924
726f92e0 925Don't build with SSL Trace capabilities.
1af66bb7 926
726f92e0
ACB
927This removes the `-trace` option from `s_client` and `s_server`, and omits the
928`SSL_trace()` function from libssl.
929
930Disabling `ssl-trace` may provide a small reduction in libssl binary size.
1af66bb7 931
257e9d03 932### no-static-engine
1af66bb7 933
6ede7d73 934Don't build the statically linked engines.
1af66bb7 935
6ede7d73 936This only has an impact when not built "shared".
1af66bb7 937
257e9d03 938### no-stdio
1af66bb7 939
3a0b3cc9 940Don't use anything from the C header file `stdio.h` that makes use of the `FILE`
6ede7d73
DMSP
941type. Only libcrypto and libssl can be built in this way. Using this option will
942suppress building the command line applications. Additionally, since the OpenSSL
943tests also use the command line applications, the tests will also be skipped.
b1fe6b43 944
257e9d03 945### no-tests
79e259e3 946
6ede7d73 947Don't build test programs or run any tests.
79e259e3 948
a3e53d56
TS
949### enable-tfo
950
951Build with support for TCP Fast Open (RFC7413). Supported on Linux, macOS and FreeBSD.
952
30b01329
TM
953### enable-quic
954
955Build with QUIC support. This is currently just for developers as the
956implementation is by no means complete and usable.
957
257e9d03 958### no-threads
6616429d 959
6ede7d73 960Don't build with support for multi-threaded applications.
2e996acf 961
257e9d03 962### threads
2acd8ec7 963
6ede7d73 964Build with support for multi-threaded applications. Most platforms will enable
8c1cbc72 965this by default. However, if on a platform where this is not the case then this
6ede7d73 966will usually require additional system-dependent options!
2e996acf 967
6ede7d73 968See [Notes on multi-threading](#notes-on-multi-threading) below.
e3d9a6b5 969
4574a7fd
ÄŒK
970### no-thread-pool
971
972Don't build with support for thread pool functionality.
973
974### thread-pool
975
976Build with thread pool functionality. If enabled, OpenSSL algorithms may
977use the thread pool to perform parallel computation. This option in itself
978does not enable OpenSSL to spawn new threads. Currently the only supported
979thread pool mechanism is the default thread pool.
980
981### no-default-thread-pool
982
983Don't build with support for default thread pool functionality.
984
985### default-thread-pool
986
987Build with default thread pool functionality. If enabled, OpenSSL may create
988and manage threads up to a maximum number of threads authorized by the
989application. Supported on POSIX compliant platforms and Windows.
990
257e9d03 991### enable-trace
b32b8961 992
6ede7d73 993Build with support for the integrated tracing api.
2e996acf 994
6ede7d73 995See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
2e996acf 996
257e9d03 997### no-ts
a73d990e 998
6ede7d73 999Don't build Time Stamping (TS) Authority support.
2e996acf 1000
257e9d03 1001### enable-ubsan
2e996acf 1002
6ede7d73 1003Build with the Undefined Behaviour sanitiser (UBSAN).
2e996acf 1004
6ede7d73 1005This is a developer option only. It may not work on all platforms and should
9afbb681
DDO
1006never be used in production environments. It will only work when used with
1007gcc or clang and should be used in conjunction with the `-DPEDANTIC` option
6ede7d73 1008(or the `--strict-warnings` option).
d40b0622 1009
257e9d03 1010### no-ui-console
2e996acf 1011
301ea192 1012Don't build with the User Interface (UI) console method
b1fe6b43 1013
301ea192 1014The User Interface console method enables text based console prompts.
b3e718e2 1015
257e9d03 1016### enable-unit-test
79e259e3 1017
6ede7d73 1018Enable additional unit test APIs.
2acd8ec7 1019
6ede7d73 1020This should not typically be used in production deployments.
7c03bb9f 1021
257e9d03 1022### no-uplink
2acd8ec7 1023
6ede7d73 1024Don't build support for UPLINK interface.
2acd8ec7 1025
257e9d03 1026### enable-weak-ssl-ciphers
b0940b33 1027
6ede7d73 1028Build support for SSL/TLS ciphers that are considered "weak"
fa28bfd6 1029
6ede7d73 1030Enabling this includes for example the RC4 based ciphersuites.
fa28bfd6 1031
257e9d03 1032### zlib
fa28bfd6 1033
6ede7d73 1034Build with support for zlib compression/decompression.
fa28bfd6 1035
257e9d03 1036### zlib-dynamic
fa28bfd6 1037
6ede7d73
DMSP
1038Like the zlib option, but has OpenSSL load the zlib library dynamically
1039when needed.
fa28bfd6 1040
6ede7d73 1041This is only supported on systems where loading of shared libraries is supported.
fa28bfd6 1042
caf9317d
TS
1043### enable-zstd
1044
1045Build with support for Zstd compression/decompression.
1046
1047### enable-zstd-dynamic
1048
1049Like the enable-zstd option, but has OpenSSL load the Zstd library dynamically
1050when needed.
1051
1052This is only supported on systems where loading of shared libraries is supported.
1053
257e9d03 1054### 386
fa28bfd6 1055
6ede7d73 1056In 32-bit x86 builds, use the 80386 instruction set only in assembly modules
fa28bfd6 1057
6ede7d73
DMSP
1058The default x86 code is more efficient, but requires at least an 486 processor.
1059Note: This doesn't affect compiler generated code, so this option needs to be
1060accompanied by a corresponding compiler-specific option.
fa28bfd6 1061
257e9d03 1062### no-{protocol}
bf01fbbf 1063
6ede7d73 1064 no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
4fd53220 1065
6ede7d73 1066Don't build support for negotiating the specified SSL/TLS protocol.
b3e718e2 1067
9afbb681
DDO
1068If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
1069are disabled.
1070Similarly `no-dtls` will disable `dtls1` and `dtls1_2`. The `no-ssl` option is
1071synonymous with `no-ssl3`. Note this only affects version negotiation.
6ede7d73
DMSP
1072OpenSSL will still provide the methods for applications to explicitly select
1073the individual protocol versions.
b3e718e2 1074
257e9d03 1075### no-{protocol}-method
b3e718e2 1076
5f18dc7f 1077 no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
b3e718e2 1078
9afbb681 1079Analogous to `no-{protocol}` but in addition do not build the methods for
6ede7d73 1080applications to explicitly select individual protocol versions. Note that there
9afbb681 1081is no `no-tls1_3-method` option because there is no application method for
6ede7d73 1082TLSv1.3.
b3e718e2 1083
6ede7d73 1084Using individual protocol methods directly is deprecated. Applications should
9afbb681 1085use `TLS_method()` instead.
b3e718e2 1086
257e9d03 1087### enable-{algorithm}
b3e718e2 1088
6ede7d73 1089 enable-{md2|rc5}
b3e718e2 1090
6ede7d73 1091Build with support for the specified algorithm.
b3e718e2 1092
257e9d03 1093### no-{algorithm}
b3e718e2 1094
6ede7d73
DMSP
1095 no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1096 des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb|
1097 poly1305|rc2|rc4|rmd160|scrypt|seed|
1098 siphash|siv|sm2|sm3|sm4|whirlpool}
d0631327 1099
6ede7d73 1100Build without support for the specified algorithm.
d0631327 1101
9afbb681 1102The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
d0631327 1103
257e9d03 1104### Compiler-specific options
d0631327 1105
6ede7d73 1106 -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
d0631327 1107
6ede7d73
DMSP
1108These system specific options will be recognised and passed through to the
1109compiler to allow you to define preprocessor symbols, specify additional
1110libraries, library directories or other compiler options. It might be worth
1111noting that some compilers generate code specifically for processor the
1112compiler currently executes on. This is not necessarily what you might have
1113in mind, since it might be unsuitable for execution on other, typically older,
1114processor. Consult your compiler documentation.
1115
1116Take note of the [Environment Variables](#environment-variables) documentation
1117below and how these flags interact with those variables.
1118
1119 -xxx, +xxx, /xxx
1120
1121Additional options that are not otherwise recognised are passed through as
1122they are to the compiler as well. Unix-style options beginning with a
af33b200 1123`-` or `+` and Windows-style options beginning with a `/` are recognised.
6ede7d73
DMSP
1124Again, consult your compiler documentation.
1125
1126If the option contains arguments separated by spaces, then the URL-style
9afbb681
DDO
1127notation `%20` can be used for the space character in order to avoid having
1128to quote the option. For example, `-opt%20arg` gets expanded to `-opt arg`.
6ede7d73
DMSP
1129In fact, any ASCII character can be encoded as %xx using its hexadecimal
1130encoding.
1131
1132Take note of the [Environment Variables](#environment-variables) documentation
1133below and how these flags interact with those variables.
1134
257e9d03 1135### Environment Variables
6ede7d73
DMSP
1136
1137 VAR=value
1138
9afbb681 1139Assign the given value to the environment variable `VAR` for `Configure`.
6ede7d73
DMSP
1140
1141These work just like normal environment variable assignments, but are supported
1142on all platforms and are confined to the configuration scripts only.
1143These assignments override the corresponding value in the inherited environment,
1144if there is one.
1145
3a0b3cc9 1146The following variables are used as "`make` variables" and can be used as an
6ede7d73
DMSP
1147alternative to giving preprocessor, compiler and linker options directly as
1148configuration. The following variables are supported:
1149
1150 AR The static library archiver.
1151 ARFLAGS Flags for the static library archiver.
1152 AS The assembler compiler.
1153 ASFLAGS Flags for the assembler compiler.
1154 CC The C compiler.
1155 CFLAGS Flags for the C compiler.
1156 CXX The C++ compiler.
1157 CXXFLAGS Flags for the C++ compiler.
1158 CPP The C/C++ preprocessor.
1159 CPPFLAGS Flags for the C/C++ preprocessor.
1160 CPPDEFINES List of CPP macro definitions, separated
1161 by a platform specific character (':' or
1162 space for Unix, ';' for Windows, ',' for
1163 VMS). This can be used instead of using
1164 -D (or what corresponds to that on your
1165 compiler) in CPPFLAGS.
1166 CPPINCLUDES List of CPP inclusion directories, separated
1167 the same way as for CPPDEFINES. This can
1168 be used instead of -I (or what corresponds
1169 to that on your compiler) in CPPFLAGS.
1170 HASHBANGPERL Perl invocation to be inserted after '#!'
1171 in public perl scripts (only relevant on
1172 Unix).
1173 LD The program linker (not used on Unix, $(CC)
1174 is used there).
1175 LDFLAGS Flags for the shared library, DSO and
1176 program linker.
1177 LDLIBS Extra libraries to use when linking.
1178 Takes the form of a space separated list
1179 of library specifications on Unix and
1180 Windows, and as a comma separated list of
1181 libraries on VMS.
1182 RANLIB The library archive indexer.
1183 RC The Windows resource compiler.
1184 RCFLAGS Flags for the Windows resource compiler.
1185 RM The command to remove files and directories.
1186
1187These cannot be mixed with compiling/linking flags given on the command line.
1188In other words, something like this isn't permitted.
1189
16b0e0fc 1190 $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
6ede7d73
DMSP
1191
1192Backward compatibility note:
1193
1194To be compatible with older configuration scripts, the environment variables
1195are ignored if compiling/linking flags are given on the command line, except
1196for the following:
1197
1198 AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1199
9afbb681 1200For example, the following command will not see `-DBAR`:
6ede7d73 1201
16b0e0fc 1202 $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
6ede7d73
DMSP
1203
1204However, the following will see both set variables:
1205
16b0e0fc 1206 $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
6ede7d73 1207
9afbb681 1208If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
6ede7d73 1209compiler are in the same "family". This becomes relevant with
9afbb681 1210`enable-external-tests` and `enable-buildtest-c++`.
6ede7d73 1211
257e9d03 1212### Reconfigure
6ede7d73
DMSP
1213
1214 reconf
1215 reconfigure
1216
1217Reconfigure from earlier data.
1218
16b0e0fc 1219This fetches the previous command line options and environment from data
9afbb681 1220saved in `configdata.pm` and runs the configuration process again, using
16b0e0fc 1221these options and environment. Note: NO other option is permitted together
9afbb681 1222with `reconf`. Note: The original configuration saves away values for ALL
16b0e0fc
RL
1223environment variables that were used, and if they weren't defined, they are
1224still saved away with information that they weren't originally defined.
1225This information takes precedence over environment variables that are
1226defined when reconfiguring.
6ede7d73
DMSP
1227
1228Displaying configuration data
1229-----------------------------
1230
1231The configuration script itself will say very little, and finishes by
9afbb681 1232creating `configdata.pm`. This perl module can be loaded by other scripts
6ede7d73
DMSP
1233to find all the configuration data, and it can also be used as a script to
1234display all sorts of configuration data in a human readable form.
1235
1236For more information, please do:
1237
1238 $ ./configdata.pm --help # Unix
1239
1240or
1241
1242 $ perl configdata.pm --help # Windows and VMS
1243
1244Installation Steps in Detail
1245============================
1246
1247Configure OpenSSL
1248-----------------
1249
257e9d03 1250### Automatic Configuration
6ede7d73 1251
92115096
RS
1252In previous version, the `config` script determined the platform type and
1253compiler and then called `Configure`. Starting with this release, they are
1254the same.
6ede7d73 1255
257e9d03 1256#### Unix / Linux / macOS
6ede7d73 1257
a4ffb33e 1258 $ ./Configure [options...]
6ede7d73 1259
257e9d03 1260#### OpenVMS
6ede7d73 1261
a4ffb33e 1262 $ perl Configure [options...]
6ede7d73 1263
257e9d03 1264#### Windows
6ede7d73 1265
a4ffb33e 1266 $ perl Configure [options...]
6ede7d73 1267
257e9d03 1268### Manual Configuration
6ede7d73
DMSP
1269
1270OpenSSL knows about a range of different operating system, hardware and
1271compiler combinations. To see the ones it knows about, run
1272
16b0e0fc 1273 $ ./Configure LIST # Unix
6ede7d73
DMSP
1274
1275or
1276
16b0e0fc 1277 $ perl Configure LIST # All other platforms
6ede7d73
DMSP
1278
1279For the remainder of this text, the Unix form will be used in all examples.
1280Please use the appropriate form for your platform.
1281
1282Pick a suitable name from the list that matches your system. For most
9afbb681 1283operating systems there is a choice between using cc or gcc.
6ede7d73 1284When you have identified your system (and if necessary compiler) use this
9afbb681 1285name as the argument to `Configure`. For example, a `linux-elf` user would
6ede7d73
DMSP
1286run:
1287
a4ffb33e 1288 $ ./Configure linux-elf [options...]
6ede7d73 1289
257e9d03 1290### Creating your own Configuration
6ede7d73
DMSP
1291
1292If your system isn't listed, you will have to create a configuration
a4ffb33e
RS
1293file named `Configurations/YOURFILENAME.conf` (replace `YOURFILENAME`
1294with a filename of your choosing) and add the correct
6ede7d73 1295configuration for your system. See the available configs as examples
036cbb6b
DDO
1296and read [Configurations/README.md](Configurations/README.md) and
1297[Configurations/README-design.md](Configurations/README-design.md)
3a0b3cc9 1298for more information.
6ede7d73 1299
9afbb681 1300The generic configurations `cc` or `gcc` should usually work on 32 bit
6ede7d73
DMSP
1301Unix-like systems.
1302
9afbb681
DDO
1303`Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1304and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1305and defines various macros in `include/openssl/configuration.h` (generated
1306from `include/openssl/configuration.h.in`.
6ede7d73 1307
aa2d7e0e
RL
1308If none of the generated build files suit your purpose, it's possible to
1309write your own build file template and give its name through the environment
1310variable `BUILDFILE`. For example, Ninja build files could be supported by
1311writing `Configurations/build.ninja.tmpl` and then configure with `BUILDFILE`
1312set like this (Unix syntax shown, you'll have to adapt for other platforms):
1313
1314 $ BUILDFILE=build.ninja perl Configure [options...]
1315
257e9d03 1316### Out of Tree Builds
6ede7d73
DMSP
1317
1318OpenSSL can be configured to build in a build directory separate from the
1319source code directory. It's done by placing yourself in some other
1320directory and invoking the configuration commands from there.
1321
257e9d03 1322#### Unix example
6ede7d73
DMSP
1323
1324 $ mkdir /var/tmp/openssl-build
1325 $ cd /var/tmp/openssl-build
a4ffb33e 1326 $ /PATH/TO/OPENSSL/SOURCE/Configure [options...]
6ede7d73 1327
257e9d03 1328#### OpenVMS example
6ede7d73
DMSP
1329
1330 $ set default sys$login:
1331 $ create/dir [.tmp.openssl-build]
1332 $ set default [.tmp.openssl-build]
a4ffb33e 1333 $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [options...]
6ede7d73 1334
257e9d03 1335#### Windows example
6ede7d73
DMSP
1336
1337 $ C:
1338 $ mkdir \temp-openssl
1339 $ cd \temp-openssl
a4ffb33e 1340 $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [options...]
6ede7d73 1341
9afbb681 1342Paths can be relative just as well as absolute. `Configure` will do its best
6ede7d73
DMSP
1343to translate them to relative paths whenever possible.
1344
6ede7d73
DMSP
1345Build OpenSSL
1346-------------
1347
1348Build OpenSSL by running:
1349
1350 $ make # Unix
1351 $ mms ! (or mmk) OpenVMS
1352 $ nmake # Windows
1353
9afbb681 1354This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
6ede7d73 1355Unix, corresponding on other platforms) and the OpenSSL binary
9afbb681
DDO
1356(`openssl`). The libraries will be built in the top-level directory,
1357and the binary will be in the `apps/` subdirectory.
6ede7d73
DMSP
1358
1359If the build fails, take a look at the [Build Failures](#build-failures)
1360subsection of the [Troubleshooting](#troubleshooting) section.
1361
1362Test OpenSSL
1363------------
1364
1365After a successful build, and before installing, the libraries should
1366be tested. Run:
1367
1368 $ make test # Unix
1369 $ mms test ! OpenVMS
1370 $ nmake test # Windows
1371
1372**Warning:** you MUST run the tests from an unprivileged account (or disable
1373your privileges temporarily if your platform allows it).
1374
036cbb6b
DDO
1375See [test/README.md](test/README.md) for further details how run tests.
1376
1377See [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
6ede7d73 1378
6ede7d73
DMSP
1379Install OpenSSL
1380---------------
1381
1382If everything tests ok, install OpenSSL with
1383
1384 $ make install # Unix
1385 $ mms install ! OpenVMS
1386 $ nmake install # Windows
1387
1388Note that in order to perform the install step above you need to have
1389appropriate permissions to write to the installation directory.
1390
1391The above commands will install all the software components in this
9afbb681 1392directory tree under `<PREFIX>` (the directory given with `--prefix` or
6ede7d73
DMSP
1393its default):
1394
257e9d03 1395### Unix / Linux / macOS
6ede7d73
DMSP
1396
1397 bin/ Contains the openssl binary and a few other
1398 utility scripts.
1399 include/openssl
1400 Contains the header files needed if you want
1401 to build your own programs that use libcrypto
1402 or libssl.
1403 lib Contains the OpenSSL library files.
1404 lib/engines Contains the OpenSSL dynamically loadable engines.
1405
1406 share/man/man1 Contains the OpenSSL command line man-pages.
1407 share/man/man3 Contains the OpenSSL library calls man-pages.
1408 share/man/man5 Contains the OpenSSL configuration format man-pages.
1409 share/man/man7 Contains the OpenSSL other misc man-pages.
1410
1411 share/doc/openssl/html/man1
1412 share/doc/openssl/html/man3
1413 share/doc/openssl/html/man5
1414 share/doc/openssl/html/man7
1415 Contains the HTML rendition of the man-pages.
1416
257e9d03 1417### OpenVMS
6ede7d73 1418
d8c1cafb 1419'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
9afbb681 1420'sover' is replaced with the shared library version (`0101` for 1.1), and
6ede7d73
DMSP
1421'pz' is replaced with the pointer size OpenSSL was built with:
1422
1423 [.EXE.'arch'] Contains the openssl binary.
1424 [.EXE] Contains a few utility scripts.
1425 [.include.openssl]
1426 Contains the header files needed if you want
1427 to build your own programs that use libcrypto
1428 or libssl.
1429 [.LIB.'arch'] Contains the OpenSSL library files.
1430 [.ENGINES'sover''pz'.'arch']
1431 Contains the OpenSSL dynamically loadable engines.
1432 [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1433 These define appropriate logical names and
1434 command symbols.
1435 [.SYSTEST] Contains the installation verification procedure.
1436 [.HTML] Contains the HTML rendition of the manual pages.
1437
257e9d03 1438### Additional Directories
6ede7d73
DMSP
1439
1440Additionally, install will add the following directories under
1441OPENSSLDIR (the directory given with `--openssldir` or its default)
1442for you convenience:
1443
1444 certs Initially empty, this is the default location
1445 for certificate files.
1446 private Initially empty, this is the default location
1447 for private key files.
1448 misc Various scripts.
1449
1450The installation directory should be appropriately protected to ensure
1451unprivileged users cannot make changes to OpenSSL binaries or files, or
1452install engines. If you already have a pre-installed version of OpenSSL as
1453part of your Operating System it is recommended that you do not overwrite
1454the system version and instead install to somewhere else.
1455
1456Package builders who want to configure the library for standard locations,
1457but have the package installed somewhere else so that it can easily be
1458packaged, can use
1459
3a0b3cc9
DDO
1460 $ make DESTDIR=/tmp/package-root install # Unix
1461 $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
6ede7d73
DMSP
1462
1463The specified destination directory will be prepended to all installation
1464target paths.
1465
257e9d03
RS
1466Compatibility issues with previous OpenSSL versions
1467---------------------------------------------------
6ede7d73 1468
257e9d03 1469### COMPILING existing applications
6ede7d73
DMSP
1470
1471Starting with version 1.1.0, OpenSSL hides a number of structures that were
1472previously open. This includes all internal libssl structures and a number
1473of EVP types. Accessor functions have been added to allow controlled access
1474to the structures' data.
1475
1476This means that some software needs to be rewritten to adapt to the new ways
1477of doing things. This often amounts to allocating an instance of a structure
1478explicitly where you could previously allocate them on the stack as automatic
1479variables, and using the provided accessor functions where you would previously
1480access a structure's field directly.
1481
1482Some APIs have changed as well. However, older APIs have been preserved when
1483possible.
1484
41149648
RL
1485Post-installation Notes
1486-----------------------
1487
1488With the default OpenSSL installation comes a FIPS provider module, which
1489needs some post-installation attention, without which it will not be usable.
1490This involves using the following command:
1491
270540fd 1492 $ openssl fipsinstall
41149648
RL
1493
1494See the openssl-fipsinstall(1) manual for details and examples.
1495
6ede7d73
DMSP
1496Advanced Build Options
1497======================
1498
6ede7d73
DMSP
1499Environment Variables
1500---------------------
1501
1502A number of environment variables can be used to provide additional control
1503over the build process. Typically these should be defined prior to running
9afbb681 1504`Configure`. Not all environment variables are relevant to all platforms.
6ede7d73
DMSP
1505
1506 AR
1507 The name of the ar executable to use.
1508
1509 BUILDFILE
1510 Use a different build file name than the platform default
1511 ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1512 "descrip.mms" on OpenVMS). This requires that there is a
036cbb6b
DDO
1513 corresponding build file template.
1514 See [Configurations/README.md](Configurations/README.md)
6ede7d73
DMSP
1515 for further information.
1516
1517 CC
1518 The compiler to use. Configure will attempt to pick a default
1519 compiler for your platform but this choice can be overridden
1520 using this variable. Set it to the compiler executable you wish
9afbb681 1521 to use, e.g. gcc or clang.
6ede7d73
DMSP
1522
1523 CROSS_COMPILE
1524 This environment variable has the same meaning as for the
1525 "--cross-compile-prefix" Configure flag described above. If both
1526 are set then the Configure flag takes precedence.
1527
92115096
RS
1528 HASHBANGPERL
1529 The command string for the Perl executable to insert in the
1530 #! line of perl scripts that will be publicly installed.
1531 Default: /usr/bin/env perl
1532 Note: the value of this variable is added to the same scripts
1533 on all platforms, but it's only relevant on Unix-like platforms.
1534
1535 KERNEL_BITS
1536 This can be the value `32` or `64` to specify the architecture
1537 when it is not "obvious" to the configuration. It should generally
1538 not be necessary to specify this environment variable.
1539
6ede7d73
DMSP
1540 NM
1541 The name of the nm executable to use.
1542
1543 OPENSSL_LOCAL_CONFIG_DIR
1544 OpenSSL comes with a database of information about how it
1545 should be built on different platforms as well as build file
1546 templates for those platforms. The database is comprised of
1547 ".conf" files in the Configurations directory. The build
1548 file templates reside there as well as ".tmpl" files. See the
036cbb6b
DDO
1549 file [Configurations/README.md](Configurations/README.md)
1550 for further information about the format of ".conf" files
1551 as well as information on the ".tmpl" files.
6ede7d73 1552 In addition to the standard ".conf" and ".tmpl" files, it is
036cbb6b
DDO
1553 possible to create your own ".conf" and ".tmpl" files and
1554 store them locally, outside the OpenSSL source tree.
1555 This environment variable can be set to the directory where
1556 these files are held and will be considered by Configure
1557 before it looks in the standard directories.
6ede7d73
DMSP
1558
1559 PERL
1560 The name of the Perl executable to use when building OpenSSL.
16b0e0fc
RL
1561 Only needed if builing should use a different Perl executable
1562 than what is used to run the Configure script.
6ede7d73 1563
92115096
RS
1564 RANLIB
1565 The name of the ranlib executable to use.
6ede7d73
DMSP
1566
1567 RC
1568 The name of the rc executable to use. The default will be as
1569 defined for the target platform in the ".conf" file. If not
1570 defined then "windres" will be used. The WINDRES environment
1571 variable is synonymous to this. If both are defined then RC
1572 takes precedence.
1573
6ede7d73
DMSP
1574 WINDRES
1575 See RC.
1576
6ede7d73
DMSP
1577Makefile Targets
1578----------------
1579
9afbb681 1580The `Configure` script generates a Makefile in a format relevant to the specific
6ede7d73
DMSP
1581platform. The Makefiles provide a number of targets that can be used. Not all
1582targets may be available on all platforms. Only the most common targets are
1583described here. Examine the Makefiles themselves for the full list.
1584
1585 all
1586 The target to build all the software components and
1587 documentation.
1588
1589 build_sw
1590 Build all the software components.
1591 THIS IS THE DEFAULT TARGET.
1592
1593 build_docs
1594 Build all documentation components.
1595
1596 clean
1597 Remove all build artefacts and return the directory to a "clean"
1598 state.
1599
1600 depend
1601 Rebuild the dependencies in the Makefiles. This is a legacy
1602 option that no longer needs to be used since OpenSSL 1.1.0.
1603
1604 install
1605 Install all OpenSSL components.
1606
1607 install_sw
1608 Only install the OpenSSL software components.
1609
1610 install_docs
1611 Only install the OpenSSL documentation components.
1612
1613 install_man_docs
1614 Only install the OpenSSL man pages (Unix only).
1615
1616 install_html_docs
8c1cbc72 1617 Only install the OpenSSL HTML documentation.
cad80959 1618
b19b9830
RL
1619 install_fips
1620 Install the FIPS provider module configuration file.
6ede7d73
DMSP
1621
1622 list-tests
1623 Prints a list of all the self test names.
1624
1625 test
1626 Build and run the OpenSSL self tests.
1627
1628 uninstall
1629 Uninstall all OpenSSL components.
1630
1631 reconfigure
1632 reconf
1633 Re-run the configuration process, as exactly as the last time
1634 as possible.
1635
1636 update
1637 This is a developer option. If you are developing a patch for
1638 OpenSSL you may need to use this if you want to update
1639 automatically generated files; add new error codes or add new
1640 (or change the visibility of) public API functions. (Unix only).
1641
1642Running Selected Tests
1643----------------------
1644
3a0b3cc9
DDO
1645You can specify a set of tests to be performed
1646using the `make` variable `TESTS`.
6ede7d73 1647
3a0b3cc9
DDO
1648See the section [Running Selected Tests of
1649test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1650
1651Troubleshooting
1652===============
1653
1654Configuration Problems
1655----------------------
1656
257e9d03 1657### Selecting the correct target
6ede7d73 1658
16b0e0fc 1659The `./Configure` script tries hard to guess your operating system, but in some
6ede7d73
DMSP
1660cases it does not succeed. You will see a message like the following:
1661
16b0e0fc 1662 $ ./Configure
6ede7d73 1663 Operating system: x86-whatever-minix
1dc1ea18 1664 This system (minix) is not supported. See file INSTALL.md for details.
6ede7d73 1665
9afbb681
DDO
1666Even if the automatic target selection by the `./Configure` script fails,
1667chances are that you still might find a suitable target in the `Configurations`
1668directory, which you can supply to the `./Configure` command,
1669possibly after some adjustment.
6ede7d73 1670
9afbb681 1671The `Configurations/` directory contains a lot of examples of such targets.
6c8149df 1672The main configuration file is [10-main.conf], which contains all targets that
6ede7d73
DMSP
1673are officially supported by the OpenSSL team. Other configuration files contain
1674targets contributed by other OpenSSL users. The list of targets can be found in
1675a Perl list `my %targets = ( ... )`.
1676
1677 my %targets = (
1678 ...
1679 "target-name" => {
1680 inherit_from => [ "base-target" ],
1681 CC => "...",
1682 cflags => add("..."),
1683 asm_arch => '...',
1684 perlasm_scheme => "...",
1685 },
1686 ...
1687 )
1688
16b0e0fc 1689If you call `./Configure` without arguments, it will give you a list of all
6ede7d73 1690known targets. Using `grep`, you can lookup the target definition in the
9afbb681
DDO
1691`Configurations/` directory. For example the `android-x86_64` can be found in
1692[Configurations/15-android.conf](Configurations/15-android.conf).
6ede7d73
DMSP
1693
1694The directory contains two README files, which explain the general syntax and
9afbb681 1695design of the configuration files.
6ede7d73 1696
036cbb6b
DDO
1697 - [Configurations/README.md](Configurations/README.md)
1698 - [Configurations/README-design.md](Configurations/README-design.md)
6ede7d73 1699
6c8149df
DMSP
1700If you need further help, try to search the [openssl-users] mailing list
1701or the [GitHub Issues] for existing solutions. If you don't find anything,
1702you can [raise an issue] to ask a question yourself.
6ede7d73 1703
6c8149df 1704More about our support resources can be found in the [SUPPORT] file.
6ede7d73 1705
257e9d03 1706### Configuration Errors
6ede7d73 1707
16b0e0fc 1708If the `./Configure` or `./Configure` command fails with an error message,
6ede7d73
DMSP
1709read the error message carefully and try to figure out whether you made
1710a mistake (e.g., by providing a wrong option), or whether the script is
1711working incorrectly. If you think you encountered a bug, please
6c8149df 1712[raise an issue] on GitHub to file a bug report.
6ede7d73
DMSP
1713
1714Along with a short description of the bug, please provide the complete
1715configure command line and the relevant output including the error message.
1716
e304aa87 1717Note: To make the output readable, please add a 'code fence' (three backquotes
6ede7d73
DMSP
1718` ``` ` on a separate line) before and after your output:
1719
1720 ```
b0d5c1cb 1721 ./Configure [your arguments...]
6ede7d73
DMSP
1722
1723 [output...]
1724
1725 ```
1726
6ede7d73
DMSP
1727Build Failures
1728--------------
1729
1730If the build fails, look carefully at the output. Try to locate and understand
1731the error message. It might be that the compiler is already telling you
1732exactly what you need to do to fix your problem.
1733
1734There may be reasons for the failure that aren't problems in OpenSSL itself,
1735for example if the compiler reports missing standard or third party headers.
1736
1737If the build succeeded previously, but fails after a source or configuration
1738change, it might be helpful to clean the build tree before attempting another
1739build. Use this command:
1740
270540fd
RL
1741 $ make clean # Unix
1742 $ mms clean ! (or mmk) OpenVMS
1743 $ nmake clean # Windows
6ede7d73 1744
203c18f1
AM
1745Assembler error messages can sometimes be sidestepped by using the `no-asm`
1746configuration option. See also [notes](#notes-on-assembler-modules-compilation).
6ede7d73
DMSP
1747
1748Compiling parts of OpenSSL with gcc and others with the system compiler will
1749result in unresolved symbols on some systems.
1750
6c8149df
DMSP
1751If you are still having problems, try to search the [openssl-users] mailing
1752list or the [GitHub Issues] for existing solutions. If you think you
1753encountered an OpenSSL bug, please [raise an issue] to file a bug report.
6ede7d73
DMSP
1754Please take the time to review the existing issues first; maybe the bug was
1755already reported or has already been fixed.
1756
6ede7d73
DMSP
1757Test Failures
1758-------------
1759
1760If some tests fail, look at the output. There may be reasons for the failure
b0d5c1cb 1761that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
6ede7d73 1762
3a0b3cc9
DDO
1763You may want increased verbosity, that can be accomplished as described in
1764section [Test Failures of test/README.md](test/README.md#test-failures).
6ede7d73 1765
e4522e10
DDO
1766You may also want to selectively specify which test(s) to perform. This can be
1767done using the `make` variable `TESTS` as described in section [Running
1768Selected Tests of test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1769
1770If you find a problem with OpenSSL itself, try removing any
3a0b3cc9
DDO
1771compiler optimization flags from the `CFLAGS` line in the Makefile and
1772run `make clean; make` or corresponding.
6ede7d73
DMSP
1773
1774To report a bug please open an issue on GitHub, at
257e9d03 1775<https://github.com/openssl/openssl/issues>.
6ede7d73 1776
6ede7d73
DMSP
1777Notes
1778=====
1779
1780Notes on multi-threading
1781------------------------
1782
9afbb681 1783For some systems, the OpenSSL `Configure` script knows what compiler options
6ede7d73
DMSP
1784are needed to generate a library that is suitable for multi-threaded
1785applications. On these systems, support for multi-threading is enabled
9afbb681 1786by default; use the `no-threads` option to disable (this should never be
6ede7d73
DMSP
1787necessary).
1788
1789On other systems, to enable support for multi-threading, you will have
9afbb681
DDO
1790to specify at least two options: `threads`, and a system-dependent option.
1791(The latter is `-D_REENTRANT` on various systems.) The default in this
6ede7d73 1792case, obviously, is not to include support for multi-threading (but
9afbb681
DDO
1793you can still use `no-threads` to suppress an annoying warning message
1794from the `Configure` script.)
6ede7d73
DMSP
1795
1796OpenSSL provides built-in support for two threading models: pthreads (found on
1797most UNIX/Linux systems), and Windows threads. No other threading models are
1798supported. If your platform does not provide pthreads or Windows threads then
9afbb681 1799you should use `Configure` with the `no-threads` option.
6ede7d73 1800
3d8905f8
RS
1801For pthreads, all locks are non-recursive. In addition, in a debug build,
1802the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1803available on your platform, you might have to add
1804`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1805(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1806ifdef test cannot be used.)
1807
6ede7d73
DMSP
1808Notes on shared libraries
1809-------------------------
1810
9afbb681 1811For most systems the OpenSSL `Configure` script knows what is needed to
6ede7d73
DMSP
1812build shared libraries for libcrypto and libssl. On these systems
1813the shared libraries will be created by default. This can be suppressed and
9afbb681
DDO
1814only static libraries created by using the `no-shared` option. On systems
1815where OpenSSL does not know how to build shared libraries the `no-shared`
6ede7d73
DMSP
1816option will be forced and only static libraries will be created.
1817
1818Shared libraries are named a little differently on different platforms.
1819One way or another, they all have the major OpenSSL version number as
9afbb681 1820part of the file name, i.e. for OpenSSL 1.1.x, `1.1` is somehow part of
6ede7d73
DMSP
1821the name.
1822
9afbb681
DDO
1823On most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1824and `libssl.so.1.1`.
6ede7d73 1825
9afbb681
DDO
1826on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1827with import libraries `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1828
1829On Windows build with MSVC or using MingW, shared libraries are named
9afbb681
DDO
1830`libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1831`libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1832and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1833With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1834while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1835
1836On VMS, shareable images (VMS speak for shared libraries) are named
9afbb681 1837`ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`. However, when
6ede7d73 1838OpenSSL is specifically built for 32-bit pointers, the shareable images
9afbb681 1839are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
6ede7d73 1840instead, and when built for 64-bit pointers, they are named
9afbb681 1841`ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
6ede7d73
DMSP
1842
1843Notes on random number generation
1844---------------------------------
1845
1846Availability of cryptographically secure random numbers is required for
1847secret key generation. OpenSSL provides several options to seed the
1848internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
1849to deliver random bytes and a "PRNG not seeded error" will occur.
1850
1851The seeding method can be configured using the `--with-rand-seed` option,
1852which can be used to specify a comma separated list of seed methods.
8c1cbc72 1853However, in most cases OpenSSL will choose a suitable default method,
6ede7d73 1854so it is not necessary to explicitly provide this option. Note also
b99c463d
P
1855that not all methods are available on all platforms. The FIPS provider will
1856silently ignore seed sources that were not validated.
6ede7d73
DMSP
1857
1858I) On operating systems which provide a suitable randomness source (in
1859form of a system call or system device), OpenSSL will use the optimal
1860available method to seed the CSPRNG from the operating system's
1861randomness sources. This corresponds to the option `--with-rand-seed=os`.
1862
1863II) On systems without such a suitable randomness source, automatic seeding
9afbb681 1864and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
6ede7d73 1865to install additional support software to obtain a random seed and reseed
9afbb681
DDO
1866the CSPRNG manually. Please check out the manual pages for `RAND_add()`,
1867`RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
6ede7d73 1868
203c18f1
AM
1869Notes on assembler modules compilation
1870--------------------------------------
1871
1872Compilation of some code paths in assembler modules might depend on whether the
1873current assembler version supports certain ISA extensions or not. Code paths
1874that use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
1875Apart from that, the minimum requirements for the assembler versions are shown
1876in the table below:
1877
1878| ISA extension | GNU as | nasm | llvm |
1879|---------------|--------|--------|---------|
1880| AVX | 2.19 | 2.09 | 3.0 |
1881| AVX2 | 2.22 | 2.10 | 3.1 |
1882| ADCX/ADOX | 2.23 | 2.10 | 3.3 |
1883| AVX512 | 2.25 | 2.11.8 | 3.6 (*) |
1884| AVX512IFMA | 2.26 | 2.11.8 | 6.0 (*) |
1885| VAES | 2.30 | 2.13.3 | 6.0 (*) |
1886
1887---
1888
1889(*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
1890an explicit -march flag was apparently required to compile assembly modules. But
1891then the compiler generates processor-specific code, which in turn contradicts
1892the idea of performing dispatch at run-time, which is facilitated by the special
1893variable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
1894around the problem by forcing the build procedure to use the following script:
1895
1896 #!/bin/sh
1897 exec clang -no-integrated-as "$@"
1898
1899instead of the real clang. In which case it doesn't matter what clang version
1900is used, as it is the version of the GNU assembler that will be checked.
1901
1902---
1903
6ede7d73
DMSP
1904<!-- Links -->
1905
1906[openssl-users]:
257e9d03 1907 <https://mta.openssl.org/mailman/listinfo/openssl-users>
6ede7d73
DMSP
1908
1909[SUPPORT]:
1910 ./SUPPORT.md
1911
1912[GitHub Issues]:
257e9d03 1913 <https://github.com/openssl/openssl/issues>
6ede7d73
DMSP
1914
1915[raise an issue]:
257e9d03 1916 <https://github.com/openssl/openssl/issues/new/choose>
6ede7d73
DMSP
1917
1918[10-main.conf]:
1919 Configurations/10-main.conf