]> git.ipfire.org Git - thirdparty/openssl.git/blame - INSTALL.md
Enable QUIC by default
[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
ff88545e
VK
586### no-apps
587
588Do not build apps, e.g. the openssl program. This is handy for minimization.
589This option also disables tests.
590
257e9d03 591### no-asm
6ede7d73
DMSP
592
593Do not use assembler code.
594
595This should be viewed as debugging/troubleshooting option rather than for
596production use. On some platforms a small amount of assembler code may still
597be used even with this option.
598
257e9d03 599### no-async
6ede7d73
DMSP
600
601Do not build support for async operations.
602
257e9d03 603### no-autoalginit
6ede7d73
DMSP
604
605Don't automatically load all supported ciphers and digests.
606
607Typically OpenSSL will make available all of its supported ciphers and digests.
608For a statically linked application this may be undesirable if small executable
609size is an objective. This only affects libcrypto. Ciphers and digests will
9afbb681
DDO
610have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
611if this option is used. This option will force a non-shared build.
6ede7d73 612
257e9d03 613### no-autoerrinit
6ede7d73
DMSP
614
615Don't automatically load all libcrypto/libssl error strings.
616
617Typically OpenSSL will automatically load human readable error strings. For a
618statically linked application this may be undesirable if small executable size
619is an objective.
620
12e96a23
TS
621### enable-brotli
622
623Build with support for brotli compression/decompression.
624
625### enable-brotli-dynamic
626
627Like the enable-brotli option, but has OpenSSL load the brotli library dynamically
628when needed.
629
630This is only supported on systems where loading of shared libraries is supported.
631
257e9d03 632### no-autoload-config
6ede7d73 633
9afbb681 634Don't automatically load the default `openssl.cnf` file.
6ede7d73
DMSP
635
636Typically OpenSSL will automatically load a system config file which configures
637default SSL options.
638
257e9d03 639### enable-buildtest-c++
6ede7d73
DMSP
640
641While testing, generate C++ buildtest files that simply check that the public
642OpenSSL header files are usable standalone with C++.
643
644Enabling this option demands extra care. For any compiler flag given directly
645as configuration option, you must ensure that it's valid for both the C and
646the C++ compiler. If not, the C++ build test will most likely break. As an
9afbb681 647alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
6ede7d73 648
d0364dcc
RS
649### --banner=text
650
651Use the specified text instead of the default banner at the end of
652configuration.
653
ecb09baf
RS
654### --w
655
656On platforms where the choice of 32-bit or 64-bit architecture
657is not explicitly specified, `Configure` will print a warning
658message and wait for a few seconds to let you interrupt the
659configuration. Using this flag skips the wait.
660
06f81af8
DDO
661### no-bulk
662
663Build only some minimal set of features.
664This is a developer option used internally for CI build tests of the project.
665
1eaf1fc3
P
666### no-cached-fetch
667
668Never cache algorithms when they are fetched from a provider. Normally, a
669provider indicates if the algorithms it supplies can be cached or not. Using
670this option will reduce run-time memory usage but it also introduces a
671significant performance penalty. This option is primarily designed to help
672with detecting incorrect reference counting.
673
257e9d03 674### no-capieng
6ede7d73
DMSP
675
676Don't build the CAPI engine.
677
678This option will be forced if on a platform that does not support CAPI.
679
257e9d03 680### no-cmp
6ede7d73 681
9afbb681
DDO
682Don't build support for Certificate Management Protocol (CMP)
683and Certificate Request Message Format (CRMF).
6ede7d73 684
257e9d03 685### no-cms
6ede7d73
DMSP
686
687Don't build support for Cryptographic Message Syntax (CMS).
688
257e9d03 689### no-comp
6ede7d73
DMSP
690
691Don't build support for SSL/TLS compression.
692
693If this option is enabled (the default), then compression will only work if
9afbb681 694the zlib or `zlib-dynamic` options are also chosen.
6ede7d73 695
257e9d03 696### enable-crypto-mdebug
6ede7d73 697
9afbb681 698This now only enables the `failed-malloc` feature.
6ede7d73 699
257e9d03 700### enable-crypto-mdebug-backtrace
6ede7d73
DMSP
701
702This is a no-op; the project uses the compiler's address/leak sanitizer instead.
703
257e9d03 704### no-ct
6ede7d73
DMSP
705
706Don't build support for Certificate Transparency (CT).
707
257e9d03 708### no-deprecated
6ede7d73
DMSP
709
710Don't build with support for deprecated APIs up until and including the version
711given with `--api` (or the current version, if `--api` wasn't specified).
712
257e9d03 713### no-dgram
6ede7d73
DMSP
714
715Don't build support for datagram based BIOs.
716
717Selecting this option will also force the disabling of DTLS.
718
956b4c75
VK
719### no-docs
720
721Don't build and install documentation, i.e. manual pages in various forms.
722
257e9d03 723### no-dso
6ede7d73
DMSP
724
725Don't build support for loading Dynamic Shared Objects (DSO)
726
257e9d03 727### enable-devcryptoeng
6ede7d73
DMSP
728
729Build the `/dev/crypto` engine.
730
731This option is automatically selected on the BSD platform, in which case it can
9afbb681 732be disabled with `no-devcryptoeng`.
6ede7d73 733
257e9d03 734### no-dynamic-engine
6ede7d73
DMSP
735
736Don't build the dynamically loaded engines.
737
738This only has an effect in a shared build.
739
257e9d03 740### no-ec
6ede7d73
DMSP
741
742Don't build support for Elliptic Curves.
743
257e9d03 744### no-ec2m
6ede7d73
DMSP
745
746Don't build support for binary Elliptic Curves
747
257e9d03 748### enable-ec_nistp_64_gcc_128
6ede7d73
DMSP
749
750Enable support for optimised implementations of some commonly used NIST
751elliptic curves.
752
753This option is only supported on platforms:
754
755 - with little-endian storage of non-byte types
756 - that tolerate misaligned memory references
757 - where the compiler:
758 - supports the non-standard type `__uint128_t`
759 - defines the built-in macro `__SIZEOF_INT128__`
760
257e9d03 761### enable-egd
6ede7d73
DMSP
762
763Build support for gathering entropy from the Entropy Gathering Daemon (EGD).
764
257e9d03 765### no-engine
6ede7d73
DMSP
766
767Don't build support for loading engines.
768
257e9d03 769### no-err
6ede7d73
DMSP
770
771Don't compile in any error strings.
772
257e9d03 773### enable-external-tests
6ede7d73
DMSP
774
775Enable building of integration with external test suites.
776
777This is a developer option and may not work on all platforms. The following
778external test suites are currently supported:
779
cede07dc 780 - GOST engine test suite
6ede7d73
DMSP
781 - Python PYCA/Cryptography test suite
782 - krb5 test suite
783
036cbb6b
DDO
784See the file [test/README-external.md](test/README-external.md)
785for further details.
6ede7d73 786
257e9d03 787### no-filenames
6ede7d73
DMSP
788
789Don't compile in filename and line number information (e.g. for errors and
790memory allocation).
791
f2ea01d9 792### enable-fips
6ede7d73 793
f2ea01d9 794Build (and install) the FIPS provider
6ede7d73 795
991a6bb5
SL
796### no-fips-securitychecks
797
798Don't perform FIPS module run-time checks related to enforcement of security
799parameters such as minimum security strength of keys.
800
257e9d03 801### enable-fuzz-libfuzzer, enable-fuzz-afl
6ede7d73
DMSP
802
803Build with support for fuzzing using either libfuzzer or AFL.
804
805These are developer options only. They may not work on all platforms and
806should never be used in production environments.
807
808See the file [fuzz/README.md](fuzz/README.md) for further details.
809
257e9d03 810### no-gost
6ede7d73
DMSP
811
812Don't build support for GOST based ciphersuites.
813
814Note that if this feature is enabled then GOST ciphersuites are only available
815if the GOST algorithms are also available through loading an externally supplied
816engine.
817
6b1f763c
VK
818### no-http
819
820Disable HTTP support.
821
257e9d03 822### no-legacy
6ede7d73
DMSP
823
824Don't build the legacy provider.
825
826Disabling this also disables the legacy algorithms: MD2 (already disabled by default).
827
257e9d03 828### no-makedepend
6ede7d73
DMSP
829
830Don't generate dependencies.
831
257e9d03 832### no-module
79e259e3 833
6ede7d73 834Don't build any dynamically loadable engines.
917a1b2e 835
9afbb681 836This also implies `no-dynamic-engine`.
917a1b2e 837
257e9d03 838### no-multiblock
917a1b2e 839
6ede7d73 840Don't build support for writing multiple records in one go in libssl
917a1b2e 841
6ede7d73 842Note: this is a different capability to the pipelining functionality.
917a1b2e 843
257e9d03 844### no-nextprotoneg
917a1b2e 845
6ede7d73 846Don't build support for the Next Protocol Negotiation (NPN) TLS extension.
c9f06e7f 847
257e9d03 848### no-ocsp
c9f06e7f 849
6ede7d73 850Don't build support for Online Certificate Status Protocol (OCSP).
b32b8961 851
257e9d03 852### no-padlockeng
2acd8ec7 853
6ede7d73 854Don't build the padlock engine.
2acd8ec7 855
257e9d03 856### no-hw-padlock
c9f06e7f 857
9afbb681 858As synonym for `no-padlockeng`. Deprecated and should not be used.
c9f06e7f 859
257e9d03 860### no-pic
b1fe6b43 861
6ede7d73 862Don't build with support for Position Independent Code.
b1fe6b43 863
257e9d03 864### no-pinshared
79e259e3 865
6ede7d73 866Don't pin the shared libraries.
79e259e3 867
6ede7d73
DMSP
868By default OpenSSL will attempt to stay in memory until the process exits.
869This is so that libcrypto and libssl can be properly cleaned up automatically
9afbb681
DDO
870via an `atexit()` handler. The handler is registered by libcrypto and cleans
871up both libraries. On some platforms the `atexit()` handler will run on unload of
ce451fb8
MSP
872libcrypto (if it has been dynamically loaded) rather than at process exit.
873
874This option can be used to stop OpenSSL from attempting to stay in memory until the
6ede7d73
DMSP
875process exits. This could lead to crashes if either libcrypto or libssl have
876already been unloaded at the point that the atexit handler is invoked, e.g. on a
9afbb681 877platform which calls `atexit()` on unload of the library, and libssl is unloaded
ce451fb8
MSP
878before libcrypto then a crash is likely to happen.
879
880Note that shared library pinning is not automatically disabled for static builds,
881i.e., `no-shared` does not imply `no-pinshared`. This may come as a surprise when
882linking libcrypto statically into a shared third-party library, because in this
883case the shared library will be pinned. To prevent this behaviour, you need to
884configure the static build using `no-shared` and `no-pinshared` together.
885
886Applications can suppress running of the `atexit()` handler at run time by
887using the `OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
9afbb681 888See the man page for it for further details.
2acd8ec7 889
257e9d03 890### no-posix-io
2acd8ec7 891
6ede7d73 892Don't use POSIX IO capabilities.
2acd8ec7 893
257e9d03 894### no-psk
79e259e3 895
6ede7d73 896Don't build support for Pre-Shared Key based ciphersuites.
79e259e3 897
257e9d03 898### no-rdrand
79e259e3 899
6ede7d73 900Don't use hardware RDRAND capabilities.
79e259e3 901
257e9d03 902### no-rfc3779
5bb9e2b4 903
6ede7d73
DMSP
904Don't build support for RFC3779, "X.509 Extensions for IP Addresses and
905AS Identifiers".
79e259e3 906
257e9d03 907### sctp
2acd8ec7 908
6ede7d73 909Build support for Stream Control Transmission Protocol (SCTP).
2acd8ec7 910
257e9d03 911### no-shared
2acd8ec7 912
6ede7d73 913Do not create shared libraries, only static ones.
2acd8ec7 914
6ede7d73 915See [Notes on shared libraries](#notes-on-shared-libraries) below.
2acd8ec7 916
257e9d03 917### no-sock
2acd8ec7 918
6ede7d73 919Don't build support for socket BIOs.
2acd8ec7 920
257e9d03 921### no-srp
2acd8ec7 922
6ede7d73
DMSP
923Don't build support for Secure Remote Password (SRP) protocol or
924SRP based ciphersuites.
2acd8ec7 925
257e9d03 926### no-srtp
b32b8961 927
6ede7d73 928Don't build Secure Real-Time Transport Protocol (SRTP) support.
b32b8961 929
257e9d03 930### no-sse2
2acd8ec7 931
6ede7d73 932Exclude SSE2 code paths from 32-bit x86 assembly modules.
79e259e3 933
6ede7d73
DMSP
934Normally SSE2 extension is detected at run-time, but the decision whether or not
935the machine code will be executed is taken solely on CPU capability vector. This
936means that if you happen to run OS kernel which does not support SSE2 extension
937on Intel P4 processor, then your application might be exposed to "illegal
938instruction" exception. There might be a way to enable support in kernel, e.g.
9afbb681 939FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
6ede7d73 940disengage SSE2 code paths upon application start-up, but if you aim for wider
9afbb681
DDO
941"audience" running such kernel, consider `no-sse2`. Both the `386` and `no-asm`
942options imply `no-sse2`.
79e259e3 943
726f92e0 944### no-ssl-trace
79e259e3 945
726f92e0 946Don't build with SSL Trace capabilities.
1af66bb7 947
726f92e0
ACB
948This removes the `-trace` option from `s_client` and `s_server`, and omits the
949`SSL_trace()` function from libssl.
950
951Disabling `ssl-trace` may provide a small reduction in libssl binary size.
1af66bb7 952
257e9d03 953### no-static-engine
1af66bb7 954
6ede7d73 955Don't build the statically linked engines.
1af66bb7 956
6ede7d73 957This only has an impact when not built "shared".
1af66bb7 958
257e9d03 959### no-stdio
1af66bb7 960
3a0b3cc9 961Don't use anything from the C header file `stdio.h` that makes use of the `FILE`
6ede7d73
DMSP
962type. Only libcrypto and libssl can be built in this way. Using this option will
963suppress building the command line applications. Additionally, since the OpenSSL
964tests also use the command line applications, the tests will also be skipped.
b1fe6b43 965
257e9d03 966### no-tests
79e259e3 967
6ede7d73 968Don't build test programs or run any tests.
79e259e3 969
a3e53d56
TS
970### enable-tfo
971
972Build with support for TCP Fast Open (RFC7413). Supported on Linux, macOS and FreeBSD.
973
8a764202 974### no-quic
30b01329 975
8a764202 976Don't build with QUIC support.
30b01329 977
257e9d03 978### no-threads
6616429d 979
6ede7d73 980Don't build with support for multi-threaded applications.
2e996acf 981
257e9d03 982### threads
2acd8ec7 983
6ede7d73 984Build with support for multi-threaded applications. Most platforms will enable
8c1cbc72 985this by default. However, if on a platform where this is not the case then this
6ede7d73 986will usually require additional system-dependent options!
2e996acf 987
6ede7d73 988See [Notes on multi-threading](#notes-on-multi-threading) below.
e3d9a6b5 989
4574a7fd
ÄŒK
990### no-thread-pool
991
992Don't build with support for thread pool functionality.
993
994### thread-pool
995
996Build with thread pool functionality. If enabled, OpenSSL algorithms may
997use the thread pool to perform parallel computation. This option in itself
998does not enable OpenSSL to spawn new threads. Currently the only supported
999thread pool mechanism is the default thread pool.
1000
1001### no-default-thread-pool
1002
1003Don't build with support for default thread pool functionality.
1004
1005### default-thread-pool
1006
1007Build with default thread pool functionality. If enabled, OpenSSL may create
1008and manage threads up to a maximum number of threads authorized by the
1009application. Supported on POSIX compliant platforms and Windows.
1010
257e9d03 1011### enable-trace
b32b8961 1012
6ede7d73 1013Build with support for the integrated tracing api.
2e996acf 1014
6ede7d73 1015See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
2e996acf 1016
257e9d03 1017### no-ts
a73d990e 1018
6ede7d73 1019Don't build Time Stamping (TS) Authority support.
2e996acf 1020
257e9d03 1021### enable-ubsan
2e996acf 1022
6ede7d73 1023Build with the Undefined Behaviour sanitiser (UBSAN).
2e996acf 1024
6ede7d73 1025This is a developer option only. It may not work on all platforms and should
9afbb681
DDO
1026never be used in production environments. It will only work when used with
1027gcc or clang and should be used in conjunction with the `-DPEDANTIC` option
6ede7d73 1028(or the `--strict-warnings` option).
d40b0622 1029
257e9d03 1030### no-ui-console
2e996acf 1031
301ea192 1032Don't build with the User Interface (UI) console method
b1fe6b43 1033
301ea192 1034The User Interface console method enables text based console prompts.
b3e718e2 1035
257e9d03 1036### enable-unit-test
79e259e3 1037
6ede7d73 1038Enable additional unit test APIs.
2acd8ec7 1039
6ede7d73 1040This should not typically be used in production deployments.
7c03bb9f 1041
257e9d03 1042### no-uplink
2acd8ec7 1043
6ede7d73 1044Don't build support for UPLINK interface.
2acd8ec7 1045
257e9d03 1046### enable-weak-ssl-ciphers
b0940b33 1047
6ede7d73 1048Build support for SSL/TLS ciphers that are considered "weak"
fa28bfd6 1049
6ede7d73 1050Enabling this includes for example the RC4 based ciphersuites.
fa28bfd6 1051
257e9d03 1052### zlib
fa28bfd6 1053
6ede7d73 1054Build with support for zlib compression/decompression.
fa28bfd6 1055
257e9d03 1056### zlib-dynamic
fa28bfd6 1057
6ede7d73
DMSP
1058Like the zlib option, but has OpenSSL load the zlib library dynamically
1059when needed.
fa28bfd6 1060
6ede7d73 1061This is only supported on systems where loading of shared libraries is supported.
fa28bfd6 1062
caf9317d
TS
1063### enable-zstd
1064
1065Build with support for Zstd compression/decompression.
1066
1067### enable-zstd-dynamic
1068
1069Like the enable-zstd option, but has OpenSSL load the Zstd library dynamically
1070when needed.
1071
1072This is only supported on systems where loading of shared libraries is supported.
1073
257e9d03 1074### 386
fa28bfd6 1075
6ede7d73 1076In 32-bit x86 builds, use the 80386 instruction set only in assembly modules
fa28bfd6 1077
6ede7d73
DMSP
1078The default x86 code is more efficient, but requires at least an 486 processor.
1079Note: This doesn't affect compiler generated code, so this option needs to be
1080accompanied by a corresponding compiler-specific option.
fa28bfd6 1081
257e9d03 1082### no-{protocol}
bf01fbbf 1083
6ede7d73 1084 no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
4fd53220 1085
6ede7d73 1086Don't build support for negotiating the specified SSL/TLS protocol.
b3e718e2 1087
9afbb681
DDO
1088If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
1089are disabled.
1090Similarly `no-dtls` will disable `dtls1` and `dtls1_2`. The `no-ssl` option is
1091synonymous with `no-ssl3`. Note this only affects version negotiation.
6ede7d73
DMSP
1092OpenSSL will still provide the methods for applications to explicitly select
1093the individual protocol versions.
b3e718e2 1094
257e9d03 1095### no-{protocol}-method
b3e718e2 1096
5f18dc7f 1097 no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
b3e718e2 1098
9afbb681 1099Analogous to `no-{protocol}` but in addition do not build the methods for
6ede7d73 1100applications to explicitly select individual protocol versions. Note that there
9afbb681 1101is no `no-tls1_3-method` option because there is no application method for
6ede7d73 1102TLSv1.3.
b3e718e2 1103
6ede7d73 1104Using individual protocol methods directly is deprecated. Applications should
9afbb681 1105use `TLS_method()` instead.
b3e718e2 1106
257e9d03 1107### enable-{algorithm}
b3e718e2 1108
6ede7d73 1109 enable-{md2|rc5}
b3e718e2 1110
6ede7d73 1111Build with support for the specified algorithm.
b3e718e2 1112
257e9d03 1113### no-{algorithm}
b3e718e2 1114
6ede7d73
DMSP
1115 no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1116 des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb|
1117 poly1305|rc2|rc4|rmd160|scrypt|seed|
1118 siphash|siv|sm2|sm3|sm4|whirlpool}
d0631327 1119
6ede7d73 1120Build without support for the specified algorithm.
d0631327 1121
9afbb681 1122The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
d0631327 1123
257e9d03 1124### Compiler-specific options
d0631327 1125
6ede7d73 1126 -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
d0631327 1127
6ede7d73
DMSP
1128These system specific options will be recognised and passed through to the
1129compiler to allow you to define preprocessor symbols, specify additional
1130libraries, library directories or other compiler options. It might be worth
1131noting that some compilers generate code specifically for processor the
1132compiler currently executes on. This is not necessarily what you might have
1133in mind, since it might be unsuitable for execution on other, typically older,
1134processor. Consult your compiler documentation.
1135
1136Take note of the [Environment Variables](#environment-variables) documentation
1137below and how these flags interact with those variables.
1138
1139 -xxx, +xxx, /xxx
1140
1141Additional options that are not otherwise recognised are passed through as
1142they are to the compiler as well. Unix-style options beginning with a
af33b200 1143`-` or `+` and Windows-style options beginning with a `/` are recognised.
6ede7d73
DMSP
1144Again, consult your compiler documentation.
1145
1146If the option contains arguments separated by spaces, then the URL-style
9afbb681
DDO
1147notation `%20` can be used for the space character in order to avoid having
1148to quote the option. For example, `-opt%20arg` gets expanded to `-opt arg`.
6ede7d73
DMSP
1149In fact, any ASCII character can be encoded as %xx using its hexadecimal
1150encoding.
1151
1152Take note of the [Environment Variables](#environment-variables) documentation
1153below and how these flags interact with those variables.
1154
257e9d03 1155### Environment Variables
6ede7d73
DMSP
1156
1157 VAR=value
1158
9afbb681 1159Assign the given value to the environment variable `VAR` for `Configure`.
6ede7d73
DMSP
1160
1161These work just like normal environment variable assignments, but are supported
1162on all platforms and are confined to the configuration scripts only.
1163These assignments override the corresponding value in the inherited environment,
1164if there is one.
1165
3a0b3cc9 1166The following variables are used as "`make` variables" and can be used as an
6ede7d73
DMSP
1167alternative to giving preprocessor, compiler and linker options directly as
1168configuration. The following variables are supported:
1169
1170 AR The static library archiver.
1171 ARFLAGS Flags for the static library archiver.
1172 AS The assembler compiler.
1173 ASFLAGS Flags for the assembler compiler.
1174 CC The C compiler.
1175 CFLAGS Flags for the C compiler.
1176 CXX The C++ compiler.
1177 CXXFLAGS Flags for the C++ compiler.
1178 CPP The C/C++ preprocessor.
1179 CPPFLAGS Flags for the C/C++ preprocessor.
1180 CPPDEFINES List of CPP macro definitions, separated
1181 by a platform specific character (':' or
1182 space for Unix, ';' for Windows, ',' for
1183 VMS). This can be used instead of using
1184 -D (or what corresponds to that on your
1185 compiler) in CPPFLAGS.
1186 CPPINCLUDES List of CPP inclusion directories, separated
1187 the same way as for CPPDEFINES. This can
1188 be used instead of -I (or what corresponds
1189 to that on your compiler) in CPPFLAGS.
1190 HASHBANGPERL Perl invocation to be inserted after '#!'
1191 in public perl scripts (only relevant on
1192 Unix).
1193 LD The program linker (not used on Unix, $(CC)
1194 is used there).
1195 LDFLAGS Flags for the shared library, DSO and
1196 program linker.
1197 LDLIBS Extra libraries to use when linking.
1198 Takes the form of a space separated list
1199 of library specifications on Unix and
1200 Windows, and as a comma separated list of
1201 libraries on VMS.
1202 RANLIB The library archive indexer.
1203 RC The Windows resource compiler.
1204 RCFLAGS Flags for the Windows resource compiler.
1205 RM The command to remove files and directories.
1206
1207These cannot be mixed with compiling/linking flags given on the command line.
1208In other words, something like this isn't permitted.
1209
16b0e0fc 1210 $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
6ede7d73
DMSP
1211
1212Backward compatibility note:
1213
1214To be compatible with older configuration scripts, the environment variables
1215are ignored if compiling/linking flags are given on the command line, except
1216for the following:
1217
1218 AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1219
9afbb681 1220For example, the following command will not see `-DBAR`:
6ede7d73 1221
16b0e0fc 1222 $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
6ede7d73
DMSP
1223
1224However, the following will see both set variables:
1225
16b0e0fc 1226 $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
6ede7d73 1227
9afbb681 1228If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
6ede7d73 1229compiler are in the same "family". This becomes relevant with
9afbb681 1230`enable-external-tests` and `enable-buildtest-c++`.
6ede7d73 1231
257e9d03 1232### Reconfigure
6ede7d73
DMSP
1233
1234 reconf
1235 reconfigure
1236
1237Reconfigure from earlier data.
1238
16b0e0fc 1239This fetches the previous command line options and environment from data
9afbb681 1240saved in `configdata.pm` and runs the configuration process again, using
16b0e0fc 1241these options and environment. Note: NO other option is permitted together
9afbb681 1242with `reconf`. Note: The original configuration saves away values for ALL
16b0e0fc
RL
1243environment variables that were used, and if they weren't defined, they are
1244still saved away with information that they weren't originally defined.
1245This information takes precedence over environment variables that are
1246defined when reconfiguring.
6ede7d73
DMSP
1247
1248Displaying configuration data
1249-----------------------------
1250
1251The configuration script itself will say very little, and finishes by
9afbb681 1252creating `configdata.pm`. This perl module can be loaded by other scripts
6ede7d73
DMSP
1253to find all the configuration data, and it can also be used as a script to
1254display all sorts of configuration data in a human readable form.
1255
1256For more information, please do:
1257
1258 $ ./configdata.pm --help # Unix
1259
1260or
1261
1262 $ perl configdata.pm --help # Windows and VMS
1263
1264Installation Steps in Detail
1265============================
1266
1267Configure OpenSSL
1268-----------------
1269
257e9d03 1270### Automatic Configuration
6ede7d73 1271
92115096
RS
1272In previous version, the `config` script determined the platform type and
1273compiler and then called `Configure`. Starting with this release, they are
1274the same.
6ede7d73 1275
257e9d03 1276#### Unix / Linux / macOS
6ede7d73 1277
a4ffb33e 1278 $ ./Configure [options...]
6ede7d73 1279
257e9d03 1280#### OpenVMS
6ede7d73 1281
a4ffb33e 1282 $ perl Configure [options...]
6ede7d73 1283
257e9d03 1284#### Windows
6ede7d73 1285
a4ffb33e 1286 $ perl Configure [options...]
6ede7d73 1287
257e9d03 1288### Manual Configuration
6ede7d73
DMSP
1289
1290OpenSSL knows about a range of different operating system, hardware and
1291compiler combinations. To see the ones it knows about, run
1292
16b0e0fc 1293 $ ./Configure LIST # Unix
6ede7d73
DMSP
1294
1295or
1296
16b0e0fc 1297 $ perl Configure LIST # All other platforms
6ede7d73
DMSP
1298
1299For the remainder of this text, the Unix form will be used in all examples.
1300Please use the appropriate form for your platform.
1301
1302Pick a suitable name from the list that matches your system. For most
9afbb681 1303operating systems there is a choice between using cc or gcc.
6ede7d73 1304When you have identified your system (and if necessary compiler) use this
9afbb681 1305name as the argument to `Configure`. For example, a `linux-elf` user would
6ede7d73
DMSP
1306run:
1307
a4ffb33e 1308 $ ./Configure linux-elf [options...]
6ede7d73 1309
257e9d03 1310### Creating your own Configuration
6ede7d73
DMSP
1311
1312If your system isn't listed, you will have to create a configuration
a4ffb33e
RS
1313file named `Configurations/YOURFILENAME.conf` (replace `YOURFILENAME`
1314with a filename of your choosing) and add the correct
6ede7d73 1315configuration for your system. See the available configs as examples
036cbb6b
DDO
1316and read [Configurations/README.md](Configurations/README.md) and
1317[Configurations/README-design.md](Configurations/README-design.md)
3a0b3cc9 1318for more information.
6ede7d73 1319
9afbb681 1320The generic configurations `cc` or `gcc` should usually work on 32 bit
6ede7d73
DMSP
1321Unix-like systems.
1322
9afbb681
DDO
1323`Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1324and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1325and defines various macros in `include/openssl/configuration.h` (generated
1326from `include/openssl/configuration.h.in`.
6ede7d73 1327
aa2d7e0e
RL
1328If none of the generated build files suit your purpose, it's possible to
1329write your own build file template and give its name through the environment
1330variable `BUILDFILE`. For example, Ninja build files could be supported by
1331writing `Configurations/build.ninja.tmpl` and then configure with `BUILDFILE`
1332set like this (Unix syntax shown, you'll have to adapt for other platforms):
1333
1334 $ BUILDFILE=build.ninja perl Configure [options...]
1335
257e9d03 1336### Out of Tree Builds
6ede7d73
DMSP
1337
1338OpenSSL can be configured to build in a build directory separate from the
1339source code directory. It's done by placing yourself in some other
1340directory and invoking the configuration commands from there.
1341
257e9d03 1342#### Unix example
6ede7d73
DMSP
1343
1344 $ mkdir /var/tmp/openssl-build
1345 $ cd /var/tmp/openssl-build
a4ffb33e 1346 $ /PATH/TO/OPENSSL/SOURCE/Configure [options...]
6ede7d73 1347
257e9d03 1348#### OpenVMS example
6ede7d73
DMSP
1349
1350 $ set default sys$login:
1351 $ create/dir [.tmp.openssl-build]
1352 $ set default [.tmp.openssl-build]
a4ffb33e 1353 $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [options...]
6ede7d73 1354
257e9d03 1355#### Windows example
6ede7d73
DMSP
1356
1357 $ C:
1358 $ mkdir \temp-openssl
1359 $ cd \temp-openssl
a4ffb33e 1360 $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [options...]
6ede7d73 1361
9afbb681 1362Paths can be relative just as well as absolute. `Configure` will do its best
6ede7d73
DMSP
1363to translate them to relative paths whenever possible.
1364
6ede7d73
DMSP
1365Build OpenSSL
1366-------------
1367
1368Build OpenSSL by running:
1369
1370 $ make # Unix
1371 $ mms ! (or mmk) OpenVMS
1372 $ nmake # Windows
1373
9afbb681 1374This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
6ede7d73 1375Unix, corresponding on other platforms) and the OpenSSL binary
9afbb681
DDO
1376(`openssl`). The libraries will be built in the top-level directory,
1377and the binary will be in the `apps/` subdirectory.
6ede7d73
DMSP
1378
1379If the build fails, take a look at the [Build Failures](#build-failures)
1380subsection of the [Troubleshooting](#troubleshooting) section.
1381
1382Test OpenSSL
1383------------
1384
1385After a successful build, and before installing, the libraries should
1386be tested. Run:
1387
1388 $ make test # Unix
1389 $ mms test ! OpenVMS
1390 $ nmake test # Windows
1391
1392**Warning:** you MUST run the tests from an unprivileged account (or disable
1393your privileges temporarily if your platform allows it).
1394
036cbb6b
DDO
1395See [test/README.md](test/README.md) for further details how run tests.
1396
1397See [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
6ede7d73 1398
6ede7d73
DMSP
1399Install OpenSSL
1400---------------
1401
1402If everything tests ok, install OpenSSL with
1403
1404 $ make install # Unix
1405 $ mms install ! OpenVMS
1406 $ nmake install # Windows
1407
1408Note that in order to perform the install step above you need to have
1409appropriate permissions to write to the installation directory.
1410
1411The above commands will install all the software components in this
9afbb681 1412directory tree under `<PREFIX>` (the directory given with `--prefix` or
6ede7d73
DMSP
1413its default):
1414
257e9d03 1415### Unix / Linux / macOS
6ede7d73
DMSP
1416
1417 bin/ Contains the openssl binary and a few other
1418 utility scripts.
1419 include/openssl
1420 Contains the header files needed if you want
1421 to build your own programs that use libcrypto
1422 or libssl.
1423 lib Contains the OpenSSL library files.
1424 lib/engines Contains the OpenSSL dynamically loadable engines.
1425
1426 share/man/man1 Contains the OpenSSL command line man-pages.
1427 share/man/man3 Contains the OpenSSL library calls man-pages.
1428 share/man/man5 Contains the OpenSSL configuration format man-pages.
1429 share/man/man7 Contains the OpenSSL other misc man-pages.
1430
1431 share/doc/openssl/html/man1
1432 share/doc/openssl/html/man3
1433 share/doc/openssl/html/man5
1434 share/doc/openssl/html/man7
1435 Contains the HTML rendition of the man-pages.
1436
257e9d03 1437### OpenVMS
6ede7d73 1438
d8c1cafb 1439'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
9afbb681 1440'sover' is replaced with the shared library version (`0101` for 1.1), and
6ede7d73
DMSP
1441'pz' is replaced with the pointer size OpenSSL was built with:
1442
1443 [.EXE.'arch'] Contains the openssl binary.
1444 [.EXE] Contains a few utility scripts.
1445 [.include.openssl]
1446 Contains the header files needed if you want
1447 to build your own programs that use libcrypto
1448 or libssl.
1449 [.LIB.'arch'] Contains the OpenSSL library files.
1450 [.ENGINES'sover''pz'.'arch']
1451 Contains the OpenSSL dynamically loadable engines.
1452 [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1453 These define appropriate logical names and
1454 command symbols.
1455 [.SYSTEST] Contains the installation verification procedure.
1456 [.HTML] Contains the HTML rendition of the manual pages.
1457
257e9d03 1458### Additional Directories
6ede7d73
DMSP
1459
1460Additionally, install will add the following directories under
1461OPENSSLDIR (the directory given with `--openssldir` or its default)
1462for you convenience:
1463
1464 certs Initially empty, this is the default location
1465 for certificate files.
1466 private Initially empty, this is the default location
1467 for private key files.
1468 misc Various scripts.
1469
1470The installation directory should be appropriately protected to ensure
1471unprivileged users cannot make changes to OpenSSL binaries or files, or
1472install engines. If you already have a pre-installed version of OpenSSL as
1473part of your Operating System it is recommended that you do not overwrite
1474the system version and instead install to somewhere else.
1475
1476Package builders who want to configure the library for standard locations,
1477but have the package installed somewhere else so that it can easily be
1478packaged, can use
1479
3a0b3cc9
DDO
1480 $ make DESTDIR=/tmp/package-root install # Unix
1481 $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
6ede7d73
DMSP
1482
1483The specified destination directory will be prepended to all installation
1484target paths.
1485
257e9d03
RS
1486Compatibility issues with previous OpenSSL versions
1487---------------------------------------------------
6ede7d73 1488
257e9d03 1489### COMPILING existing applications
6ede7d73
DMSP
1490
1491Starting with version 1.1.0, OpenSSL hides a number of structures that were
1492previously open. This includes all internal libssl structures and a number
1493of EVP types. Accessor functions have been added to allow controlled access
1494to the structures' data.
1495
1496This means that some software needs to be rewritten to adapt to the new ways
1497of doing things. This often amounts to allocating an instance of a structure
1498explicitly where you could previously allocate them on the stack as automatic
1499variables, and using the provided accessor functions where you would previously
1500access a structure's field directly.
1501
1502Some APIs have changed as well. However, older APIs have been preserved when
1503possible.
1504
41149648
RL
1505Post-installation Notes
1506-----------------------
1507
1508With the default OpenSSL installation comes a FIPS provider module, which
1509needs some post-installation attention, without which it will not be usable.
1510This involves using the following command:
1511
270540fd 1512 $ openssl fipsinstall
41149648
RL
1513
1514See the openssl-fipsinstall(1) manual for details and examples.
1515
6ede7d73
DMSP
1516Advanced Build Options
1517======================
1518
6ede7d73
DMSP
1519Environment Variables
1520---------------------
1521
1522A number of environment variables can be used to provide additional control
1523over the build process. Typically these should be defined prior to running
9afbb681 1524`Configure`. Not all environment variables are relevant to all platforms.
6ede7d73
DMSP
1525
1526 AR
1527 The name of the ar executable to use.
1528
1529 BUILDFILE
1530 Use a different build file name than the platform default
1531 ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1532 "descrip.mms" on OpenVMS). This requires that there is a
036cbb6b
DDO
1533 corresponding build file template.
1534 See [Configurations/README.md](Configurations/README.md)
6ede7d73
DMSP
1535 for further information.
1536
1537 CC
1538 The compiler to use. Configure will attempt to pick a default
1539 compiler for your platform but this choice can be overridden
1540 using this variable. Set it to the compiler executable you wish
9afbb681 1541 to use, e.g. gcc or clang.
6ede7d73
DMSP
1542
1543 CROSS_COMPILE
1544 This environment variable has the same meaning as for the
1545 "--cross-compile-prefix" Configure flag described above. If both
1546 are set then the Configure flag takes precedence.
1547
92115096
RS
1548 HASHBANGPERL
1549 The command string for the Perl executable to insert in the
1550 #! line of perl scripts that will be publicly installed.
1551 Default: /usr/bin/env perl
1552 Note: the value of this variable is added to the same scripts
1553 on all platforms, but it's only relevant on Unix-like platforms.
1554
1555 KERNEL_BITS
1556 This can be the value `32` or `64` to specify the architecture
1557 when it is not "obvious" to the configuration. It should generally
1558 not be necessary to specify this environment variable.
1559
6ede7d73
DMSP
1560 NM
1561 The name of the nm executable to use.
1562
1563 OPENSSL_LOCAL_CONFIG_DIR
1564 OpenSSL comes with a database of information about how it
1565 should be built on different platforms as well as build file
1566 templates for those platforms. The database is comprised of
1567 ".conf" files in the Configurations directory. The build
1568 file templates reside there as well as ".tmpl" files. See the
036cbb6b
DDO
1569 file [Configurations/README.md](Configurations/README.md)
1570 for further information about the format of ".conf" files
1571 as well as information on the ".tmpl" files.
6ede7d73 1572 In addition to the standard ".conf" and ".tmpl" files, it is
036cbb6b
DDO
1573 possible to create your own ".conf" and ".tmpl" files and
1574 store them locally, outside the OpenSSL source tree.
1575 This environment variable can be set to the directory where
1576 these files are held and will be considered by Configure
1577 before it looks in the standard directories.
6ede7d73
DMSP
1578
1579 PERL
1580 The name of the Perl executable to use when building OpenSSL.
eb4129e1 1581 Only needed if building should use a different Perl executable
16b0e0fc 1582 than what is used to run the Configure script.
6ede7d73 1583
92115096
RS
1584 RANLIB
1585 The name of the ranlib executable to use.
6ede7d73
DMSP
1586
1587 RC
1588 The name of the rc executable to use. The default will be as
1589 defined for the target platform in the ".conf" file. If not
1590 defined then "windres" will be used. The WINDRES environment
1591 variable is synonymous to this. If both are defined then RC
1592 takes precedence.
1593
6ede7d73
DMSP
1594 WINDRES
1595 See RC.
1596
6ede7d73
DMSP
1597Makefile Targets
1598----------------
1599
9afbb681 1600The `Configure` script generates a Makefile in a format relevant to the specific
6ede7d73
DMSP
1601platform. The Makefiles provide a number of targets that can be used. Not all
1602targets may be available on all platforms. Only the most common targets are
1603described here. Examine the Makefiles themselves for the full list.
1604
1605 all
1606 The target to build all the software components and
1607 documentation.
1608
1609 build_sw
1610 Build all the software components.
1611 THIS IS THE DEFAULT TARGET.
1612
1613 build_docs
1614 Build all documentation components.
1615
1616 clean
1617 Remove all build artefacts and return the directory to a "clean"
1618 state.
1619
1620 depend
1621 Rebuild the dependencies in the Makefiles. This is a legacy
1622 option that no longer needs to be used since OpenSSL 1.1.0.
1623
1624 install
1625 Install all OpenSSL components.
1626
1627 install_sw
1628 Only install the OpenSSL software components.
1629
1630 install_docs
1631 Only install the OpenSSL documentation components.
1632
1633 install_man_docs
1634 Only install the OpenSSL man pages (Unix only).
1635
1636 install_html_docs
8c1cbc72 1637 Only install the OpenSSL HTML documentation.
cad80959 1638
b19b9830
RL
1639 install_fips
1640 Install the FIPS provider module configuration file.
6ede7d73
DMSP
1641
1642 list-tests
1643 Prints a list of all the self test names.
1644
1645 test
1646 Build and run the OpenSSL self tests.
1647
1648 uninstall
1649 Uninstall all OpenSSL components.
1650
1651 reconfigure
1652 reconf
1653 Re-run the configuration process, as exactly as the last time
1654 as possible.
1655
1656 update
1657 This is a developer option. If you are developing a patch for
1658 OpenSSL you may need to use this if you want to update
1659 automatically generated files; add new error codes or add new
1660 (or change the visibility of) public API functions. (Unix only).
1661
1662Running Selected Tests
1663----------------------
1664
3a0b3cc9
DDO
1665You can specify a set of tests to be performed
1666using the `make` variable `TESTS`.
6ede7d73 1667
3a0b3cc9
DDO
1668See the section [Running Selected Tests of
1669test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1670
1671Troubleshooting
1672===============
1673
1674Configuration Problems
1675----------------------
1676
257e9d03 1677### Selecting the correct target
6ede7d73 1678
16b0e0fc 1679The `./Configure` script tries hard to guess your operating system, but in some
6ede7d73
DMSP
1680cases it does not succeed. You will see a message like the following:
1681
16b0e0fc 1682 $ ./Configure
6ede7d73 1683 Operating system: x86-whatever-minix
1dc1ea18 1684 This system (minix) is not supported. See file INSTALL.md for details.
6ede7d73 1685
9afbb681
DDO
1686Even if the automatic target selection by the `./Configure` script fails,
1687chances are that you still might find a suitable target in the `Configurations`
1688directory, which you can supply to the `./Configure` command,
1689possibly after some adjustment.
6ede7d73 1690
9afbb681 1691The `Configurations/` directory contains a lot of examples of such targets.
6c8149df 1692The main configuration file is [10-main.conf], which contains all targets that
6ede7d73
DMSP
1693are officially supported by the OpenSSL team. Other configuration files contain
1694targets contributed by other OpenSSL users. The list of targets can be found in
1695a Perl list `my %targets = ( ... )`.
1696
1697 my %targets = (
1698 ...
1699 "target-name" => {
1700 inherit_from => [ "base-target" ],
1701 CC => "...",
1702 cflags => add("..."),
1703 asm_arch => '...',
1704 perlasm_scheme => "...",
1705 },
1706 ...
1707 )
1708
16b0e0fc 1709If you call `./Configure` without arguments, it will give you a list of all
6ede7d73 1710known targets. Using `grep`, you can lookup the target definition in the
9afbb681
DDO
1711`Configurations/` directory. For example the `android-x86_64` can be found in
1712[Configurations/15-android.conf](Configurations/15-android.conf).
6ede7d73
DMSP
1713
1714The directory contains two README files, which explain the general syntax and
9afbb681 1715design of the configuration files.
6ede7d73 1716
036cbb6b
DDO
1717 - [Configurations/README.md](Configurations/README.md)
1718 - [Configurations/README-design.md](Configurations/README-design.md)
6ede7d73 1719
6c8149df
DMSP
1720If you need further help, try to search the [openssl-users] mailing list
1721or the [GitHub Issues] for existing solutions. If you don't find anything,
1722you can [raise an issue] to ask a question yourself.
6ede7d73 1723
6c8149df 1724More about our support resources can be found in the [SUPPORT] file.
6ede7d73 1725
257e9d03 1726### Configuration Errors
6ede7d73 1727
16b0e0fc 1728If the `./Configure` or `./Configure` command fails with an error message,
6ede7d73
DMSP
1729read the error message carefully and try to figure out whether you made
1730a mistake (e.g., by providing a wrong option), or whether the script is
1731working incorrectly. If you think you encountered a bug, please
6c8149df 1732[raise an issue] on GitHub to file a bug report.
6ede7d73
DMSP
1733
1734Along with a short description of the bug, please provide the complete
1735configure command line and the relevant output including the error message.
1736
e304aa87 1737Note: To make the output readable, please add a 'code fence' (three backquotes
6ede7d73
DMSP
1738` ``` ` on a separate line) before and after your output:
1739
1740 ```
b0d5c1cb 1741 ./Configure [your arguments...]
6ede7d73
DMSP
1742
1743 [output...]
1744
1745 ```
1746
6ede7d73
DMSP
1747Build Failures
1748--------------
1749
1750If the build fails, look carefully at the output. Try to locate and understand
1751the error message. It might be that the compiler is already telling you
1752exactly what you need to do to fix your problem.
1753
1754There may be reasons for the failure that aren't problems in OpenSSL itself,
1755for example if the compiler reports missing standard or third party headers.
1756
1757If the build succeeded previously, but fails after a source or configuration
1758change, it might be helpful to clean the build tree before attempting another
1759build. Use this command:
1760
270540fd
RL
1761 $ make clean # Unix
1762 $ mms clean ! (or mmk) OpenVMS
1763 $ nmake clean # Windows
6ede7d73 1764
203c18f1
AM
1765Assembler error messages can sometimes be sidestepped by using the `no-asm`
1766configuration option. See also [notes](#notes-on-assembler-modules-compilation).
6ede7d73
DMSP
1767
1768Compiling parts of OpenSSL with gcc and others with the system compiler will
1769result in unresolved symbols on some systems.
1770
6c8149df
DMSP
1771If you are still having problems, try to search the [openssl-users] mailing
1772list or the [GitHub Issues] for existing solutions. If you think you
1773encountered an OpenSSL bug, please [raise an issue] to file a bug report.
6ede7d73
DMSP
1774Please take the time to review the existing issues first; maybe the bug was
1775already reported or has already been fixed.
1776
6ede7d73
DMSP
1777Test Failures
1778-------------
1779
1780If some tests fail, look at the output. There may be reasons for the failure
b0d5c1cb 1781that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
6ede7d73 1782
3a0b3cc9
DDO
1783You may want increased verbosity, that can be accomplished as described in
1784section [Test Failures of test/README.md](test/README.md#test-failures).
6ede7d73 1785
e4522e10
DDO
1786You may also want to selectively specify which test(s) to perform. This can be
1787done using the `make` variable `TESTS` as described in section [Running
1788Selected Tests of test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1789
1790If you find a problem with OpenSSL itself, try removing any
3a0b3cc9
DDO
1791compiler optimization flags from the `CFLAGS` line in the Makefile and
1792run `make clean; make` or corresponding.
6ede7d73
DMSP
1793
1794To report a bug please open an issue on GitHub, at
257e9d03 1795<https://github.com/openssl/openssl/issues>.
6ede7d73 1796
6ede7d73
DMSP
1797Notes
1798=====
1799
1800Notes on multi-threading
1801------------------------
1802
9afbb681 1803For some systems, the OpenSSL `Configure` script knows what compiler options
6ede7d73
DMSP
1804are needed to generate a library that is suitable for multi-threaded
1805applications. On these systems, support for multi-threading is enabled
9afbb681 1806by default; use the `no-threads` option to disable (this should never be
6ede7d73
DMSP
1807necessary).
1808
1809On other systems, to enable support for multi-threading, you will have
9afbb681
DDO
1810to specify at least two options: `threads`, and a system-dependent option.
1811(The latter is `-D_REENTRANT` on various systems.) The default in this
6ede7d73 1812case, obviously, is not to include support for multi-threading (but
9afbb681
DDO
1813you can still use `no-threads` to suppress an annoying warning message
1814from the `Configure` script.)
6ede7d73
DMSP
1815
1816OpenSSL provides built-in support for two threading models: pthreads (found on
1817most UNIX/Linux systems), and Windows threads. No other threading models are
1818supported. If your platform does not provide pthreads or Windows threads then
9afbb681 1819you should use `Configure` with the `no-threads` option.
6ede7d73 1820
3d8905f8
RS
1821For pthreads, all locks are non-recursive. In addition, in a debug build,
1822the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1823available on your platform, you might have to add
1824`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1825(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1826ifdef test cannot be used.)
1827
6ede7d73
DMSP
1828Notes on shared libraries
1829-------------------------
1830
9afbb681 1831For most systems the OpenSSL `Configure` script knows what is needed to
6ede7d73
DMSP
1832build shared libraries for libcrypto and libssl. On these systems
1833the shared libraries will be created by default. This can be suppressed and
9afbb681
DDO
1834only static libraries created by using the `no-shared` option. On systems
1835where OpenSSL does not know how to build shared libraries the `no-shared`
6ede7d73
DMSP
1836option will be forced and only static libraries will be created.
1837
1838Shared libraries are named a little differently on different platforms.
1839One way or another, they all have the major OpenSSL version number as
9afbb681 1840part of the file name, i.e. for OpenSSL 1.1.x, `1.1` is somehow part of
6ede7d73
DMSP
1841the name.
1842
9afbb681
DDO
1843On most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1844and `libssl.so.1.1`.
6ede7d73 1845
9afbb681
DDO
1846on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1847with import libraries `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1848
1849On Windows build with MSVC or using MingW, shared libraries are named
9afbb681
DDO
1850`libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1851`libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1852and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1853With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1854while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1855
1856On VMS, shareable images (VMS speak for shared libraries) are named
9afbb681 1857`ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`. However, when
6ede7d73 1858OpenSSL is specifically built for 32-bit pointers, the shareable images
9afbb681 1859are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
6ede7d73 1860instead, and when built for 64-bit pointers, they are named
9afbb681 1861`ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
6ede7d73
DMSP
1862
1863Notes on random number generation
1864---------------------------------
1865
1866Availability of cryptographically secure random numbers is required for
1867secret key generation. OpenSSL provides several options to seed the
1868internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
1869to deliver random bytes and a "PRNG not seeded error" will occur.
1870
1871The seeding method can be configured using the `--with-rand-seed` option,
1872which can be used to specify a comma separated list of seed methods.
8c1cbc72 1873However, in most cases OpenSSL will choose a suitable default method,
6ede7d73 1874so it is not necessary to explicitly provide this option. Note also
b99c463d
P
1875that not all methods are available on all platforms. The FIPS provider will
1876silently ignore seed sources that were not validated.
6ede7d73
DMSP
1877
1878I) On operating systems which provide a suitable randomness source (in
1879form of a system call or system device), OpenSSL will use the optimal
1880available method to seed the CSPRNG from the operating system's
1881randomness sources. This corresponds to the option `--with-rand-seed=os`.
1882
1883II) On systems without such a suitable randomness source, automatic seeding
9afbb681 1884and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
6ede7d73 1885to install additional support software to obtain a random seed and reseed
9afbb681
DDO
1886the CSPRNG manually. Please check out the manual pages for `RAND_add()`,
1887`RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
6ede7d73 1888
203c18f1
AM
1889Notes on assembler modules compilation
1890--------------------------------------
1891
1892Compilation of some code paths in assembler modules might depend on whether the
1893current assembler version supports certain ISA extensions or not. Code paths
1894that use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
1895Apart from that, the minimum requirements for the assembler versions are shown
1896in the table below:
1897
1898| ISA extension | GNU as | nasm | llvm |
1899|---------------|--------|--------|---------|
1900| AVX | 2.19 | 2.09 | 3.0 |
1901| AVX2 | 2.22 | 2.10 | 3.1 |
1902| ADCX/ADOX | 2.23 | 2.10 | 3.3 |
1903| AVX512 | 2.25 | 2.11.8 | 3.6 (*) |
1904| AVX512IFMA | 2.26 | 2.11.8 | 6.0 (*) |
1905| VAES | 2.30 | 2.13.3 | 6.0 (*) |
1906
1907---
1908
1909(*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
1910an explicit -march flag was apparently required to compile assembly modules. But
1911then the compiler generates processor-specific code, which in turn contradicts
1912the idea of performing dispatch at run-time, which is facilitated by the special
1913variable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
1914around the problem by forcing the build procedure to use the following script:
1915
1916 #!/bin/sh
1917 exec clang -no-integrated-as "$@"
1918
1919instead of the real clang. In which case it doesn't matter what clang version
1920is used, as it is the version of the GNU assembler that will be checked.
1921
1922---
1923
6ede7d73
DMSP
1924<!-- Links -->
1925
1926[openssl-users]:
257e9d03 1927 <https://mta.openssl.org/mailman/listinfo/openssl-users>
6ede7d73
DMSP
1928
1929[SUPPORT]:
1930 ./SUPPORT.md
1931
1932[GitHub Issues]:
257e9d03 1933 <https://github.com/openssl/openssl/issues>
6ede7d73
DMSP
1934
1935[raise an issue]:
257e9d03 1936 <https://github.com/openssl/openssl/issues/new/choose>
6ede7d73
DMSP
1937
1938[10-main.conf]:
1939 Configurations/10-main.conf