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