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