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