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