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