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