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