| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build and Install | 
					
						
							|  |  |  | ================= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This document describes installation on all supported operating | 
					
						
							|  |  |  | systems (the Unix/Linux family, including macOS), OpenVMS, | 
					
						
							|  |  |  | and Windows). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Table of Contents | 
					
						
							|  |  |  | ================= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  - [Prerequisites](#prerequisites) | 
					
						
							|  |  |  |  - [Notational Conventions](#notational-conventions) | 
					
						
							|  |  |  |  - [Quick Installation Guide](#quick-installation-guide) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [Building OpenSSL](#building-openssl) | 
					
						
							|  |  |  |    - [Installing OpenSSL](#installing-openssl) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  - [Configuration Options](#configuration-options) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [API Level](#api-level) | 
					
						
							|  |  |  |    - [Cross Compile Prefix](#cross-compile-prefix) | 
					
						
							|  |  |  |    - [Build Type](#build-type) | 
					
						
							|  |  |  |    - [Directories](#directories) | 
					
						
							|  |  |  |    - [Compiler Warnings](#compiler-warnings) | 
					
						
							|  |  |  |    - [ZLib Flags](#zlib-flags) | 
					
						
							|  |  |  |    - [Seeding the Random Generator](#seeding-the-random-generator) | 
					
						
							|  |  |  |    - [Enable and Disable Features](#enable-and-disable-features) | 
					
						
							|  |  |  |    - [Displaying configuration data](#displaying-configuration-data) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  - [Installation Steps in Detail](#installation-steps-in-detail) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [Configure](#configure-openssl) | 
					
						
							|  |  |  |    - [Build](#build-openssl) | 
					
						
							|  |  |  |    - [Test](#test-openssl) | 
					
						
							|  |  |  |    - [Install](#install-openssl) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  - [Advanced Build Options](#advanced-build-options) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [Environment Variables](#environment-variables) | 
					
						
							|  |  |  |    - [Makefile Targets](#makefile-targets) | 
					
						
							|  |  |  |    - [Running Selected Tests](#running-selected-tests) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  - [Troubleshooting](#troubleshooting) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [Configuration Problems](#configuration-problems) | 
					
						
							|  |  |  |    - [Build Failures](#build-failures) | 
					
						
							|  |  |  |    - [Test Failures](#test-failures) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  - [Notes](#notes) | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |    - [Notes on multi-threading](#notes-on-multi-threading) | 
					
						
							|  |  |  |    - [Notes on shared libraries](#notes-on-shared-libraries) | 
					
						
							|  |  |  |    - [Notes on random number generation](#notes-on-random-number-generation) | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Prerequisites | 
					
						
							|  |  |  | ============= | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | To install OpenSSL, you will need: | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  |  * A "make" implementation | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  * Perl 5 with core modules (please read [NOTES.PERL](NOTES.PERL)) | 
					
						
							|  |  |  |  * The Perl module Text::Template (please read [NOTES.PERL](NOTES.PERL)) | 
					
						
							|  |  |  |  * an ANSI C compiler | 
					
						
							|  |  |  |  * a development environment in the form of development libraries and C | 
					
						
							|  |  |  |    header files | 
					
						
							|  |  |  |  * a supported operating system | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | For additional platform specific requirements, solutions to specific | 
					
						
							|  |  |  | issues and other details, please read one of these: | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |  * [NOTES.UNIX](NOTES.UNIX) - notes for Unix like systems | 
					
						
							|  |  |  |  * [NOTES.VMS](NOTES.VMS) - notes related to OpenVMS | 
					
						
							|  |  |  |  * [NOTES.WIN](NOTES.WIN) - notes related to the Windows platform | 
					
						
							|  |  |  |  * [NOTES.DJGPP](NOTES.DJGPP) - building for DOS with DJGPP | 
					
						
							|  |  |  |  * [NOTES.ANDROID](NOTES.ANDROID) - building for Android platforms (using NDK) | 
					
						
							|  |  |  |  * [NOTES.VALGRIND](NOTES.VALGRIND) - testing with Valgrind | 
					
						
							|  |  |  |  * [NOTES.PERL](NOTES.PERL) - some notes on Perl | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Notational conventions | 
					
						
							|  |  |  | ====================== | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Throughout this document, we use the following conventions. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Commands | 
					
						
							|  |  |  | -------- | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Any line starting with a dollar sign is a command line. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     $ command | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | The dollar sign indicates the shell prompt and is not to be entered as | 
					
						
							|  |  |  | part of the command. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Choices | 
					
						
							|  |  |  | ------- | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Several words in curly braces separated by pipe characters indicate a | 
					
						
							|  |  |  | **mandatory choice**, to be replaced with one of the given words. | 
					
						
							|  |  |  | For example, the line | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     $ echo { WORD1 | WORD2 | WORD3 } | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | represents one of the following three commands | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     $ echo WORD1 | 
					
						
							|  |  |  |     - or - | 
					
						
							|  |  |  |     $ echo WORD2 | 
					
						
							|  |  |  |     - or - | 
					
						
							|  |  |  |     $ echo WORD3 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | One or several words in square brackets separated by pipe characters | 
					
						
							|  |  |  | denote an **optional choice**.  It is similar to the mandatory choice, | 
					
						
							|  |  |  | but it can also be omitted entirely. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | So the line | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     $ echo [ WORD1 | WORD2 | WORD3 ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | represents one of the four commands | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ echo WORD1 | 
					
						
							|  |  |  |     - or - | 
					
						
							|  |  |  |     $ echo WORD2 | 
					
						
							|  |  |  |     - or - | 
					
						
							|  |  |  |     $ echo WORD3 | 
					
						
							|  |  |  |     - or - | 
					
						
							|  |  |  |     $ echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Arguments | 
					
						
							|  |  |  | --------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Mandatory arguments** are enclosed in double curly braces. | 
					
						
							|  |  |  | A simple example would be | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ type {{ filename }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | which is to be understood to use the command `type` on some file name | 
					
						
							|  |  |  | determined by the user. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Optional Arguments** are enclosed in double square brackets. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [[ options ]] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Note that the notation assumes spaces around `{`, `}`, `[`, `]`, `{{`, `}}` and | 
					
						
							|  |  |  | `[[`, `]]`.  This is to differentiate from OpenVMS directory | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | specifications, which also use [ and ], but without spaces. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Quick Installation Guide | 
					
						
							|  |  |  | ======================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you just want to get OpenSSL installed without bothering too much | 
					
						
							|  |  |  | about the details, here is the short version of how to build and install | 
					
						
							|  |  |  | OpenSSL.  If any of the following steps fails, please consult the | 
					
						
							|  |  |  | [Installation in Detail](#installation-in-detail) section below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Building OpenSSL | 
					
						
							|  |  |  | ---------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Use the following commands to configure, build and test OpenSSL. | 
					
						
							|  |  |  | The testing is optional, but recommended if you intend to install | 
					
						
							|  |  |  | OpenSSL for production use. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Unix / Linux / macOS
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |     $ make | 
					
						
							|  |  |  |     $ make test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### OpenVMS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use the following commands to build OpenSSL: | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |     $ mms | 
					
						
							|  |  |  |     $ mms test | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Windows
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you are using Visual Studio, open a Developer Command Prompt and | 
					
						
							|  |  |  | and issue the following commands to build OpenSSL. | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |     $ nmake | 
					
						
							|  |  |  |     $ nmake test | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | As mentioned in the [Choices](#choices) section, you need to pick one | 
					
						
							|  |  |  | of the four Configure targets in the first command. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Most likely you will be using the `VC-WIN64A` target for 64bit Windows | 
					
						
							|  |  |  | binaries (AMD64) or `VC-WIN32` for 32bit Windows binaries (X86). | 
					
						
							|  |  |  | The other two options are `VC-WIN64I` (Intel IA64, Itanium) and | 
					
						
							|  |  |  | `VC-CE` (Windows CE) are rather uncommon nowadays. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Installing OpenSSL | 
					
						
							|  |  |  | ------------------ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following commands will install OpenSSL to a default system location. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Danger Zone:** even if you are impatient, please read the following two | 
					
						
							|  |  |  | paragraphs carefully before you install OpenSSL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For security reasons the default system location is by default not writable | 
					
						
							|  |  |  | for unprivileged users.  So for the final installation step administrative | 
					
						
							|  |  |  | privileges are required.  The default system location and the procedure to | 
					
						
							|  |  |  | obtain administrative privileges depends on the operating sytem. | 
					
						
							|  |  |  | It is recommended to compile and test OpenSSL with normal user privileges | 
					
						
							|  |  |  | and use administrative privileges only for the final installation step. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On some platforms OpenSSL is preinstalled as part of the Operating System. | 
					
						
							|  |  |  | In this case it is highly recommended not to overwrite the system versions, | 
					
						
							|  |  |  | because other applications or libraries might depend on it. | 
					
						
							|  |  |  | To avoid breaking other applications, install your copy of OpenSSL to a | 
					
						
							|  |  |  | [different location](#installing-to-a-different-location) which is not in | 
					
						
							|  |  |  | the global search path for system libraries. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-17 21:38:45 +08:00
										 |  |  | Finally, if you plan on using the FIPS module, you need to read the | 
					
						
							|  |  |  | [Post-installation Notes](#post-installation-notes) further down. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Unix / Linux / macOS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Depending on your distribution, you need to run the following command as | 
					
						
							|  |  |  | root user or prepend `sudo` to the command: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ make install | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | By default, OpenSSL will be installed to | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /usr/local | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | More precisely, the files will be installed into the  subdirectories | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /usr/local/bin | 
					
						
							|  |  |  |     /usr/local/lib | 
					
						
							|  |  |  |     /usr/local/include | 
					
						
							|  |  |  |     ... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | depending on the file type, as it is custom on Unix-like operating systems. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### OpenVMS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use the following command to install OpenSSL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ mms install | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | By default, OpenSSL will be installed to | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SYS$COMMON:[OPENSSL-'version'...] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | where 'version' is the OpenSSL version number with underscores instead | 
					
						
							|  |  |  | of periods. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Windows
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you are using Visual Studio, open the Developer Command Prompt _elevated_ | 
					
						
							|  |  |  | and issue the following command. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-17 17:08:25 +08:00
										 |  |  |     $ nmake install | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | The easiest way to elevate the Command Prompt is to press and hold down | 
					
						
							|  |  |  | the both the `<CTRL>` and `<SHIFT>` key while clicking the menu item in the | 
					
						
							|  |  |  | task menu. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The default installation location is | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     C:\Program Files\OpenSSL | 
					
						
							| 
									
										
										
										
											2019-06-28 19:07:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | for native binaries, or | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     C:\Program Files (x86)\OpenSSL | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | for 32bit binaries on 64bit Windows (WOW64). | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### Installing to a different location
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | To install OpenSSL to a different location (for example into your home | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | directory for testing purposes) run `Configure` as shown in the following | 
					
						
							| 
									
										
										
										
											2020-05-13 23:16:50 +08:00
										 |  |  | examples. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-13 23:16:50 +08:00
										 |  |  | On Unix: | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-13 23:16:50 +08:00
										 |  |  | On OpenVMS: | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL] | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Note: if you do add options to the configuration command, please make sure | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | you've read more than just this Quick Start, such as relevant `NOTES.*` files, | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | the options outline below, as configuration options may change the outcome | 
					
						
							|  |  |  | in otherwise unexpected ways. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Configuration Options | 
					
						
							|  |  |  | ===================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | There are several options to `./Configure` to customize the build (note that | 
					
						
							|  |  |  | for Windows, the defaults for `--prefix` and `--openssldir` depend on what | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | configuration is used and what Windows implementation OpenSSL is built on. | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | More notes on this in [NOTES.WIN](NOTES.WIN)): | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | API Level | 
					
						
							|  |  |  | --------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --api=x.y[.z] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build the OpenSSL libraries to support the API for the specified version. | 
					
						
							|  |  |  | If [no-deprecated](#no-deprecated) is also given, don't build with support | 
					
						
							|  |  |  | for deprecated APIs in or below the specified version number.  For example, | 
					
						
							|  |  |  | addding | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --api=1.1.0 no-deprecated | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | will remove support for all APIs that were deprecated in OpenSSL version | 
					
						
							|  |  |  | 1.1.0 or below.  This is a rather specialized option for developers. | 
					
						
							|  |  |  | If you just intend to remove all deprecated APIs up to the current version | 
					
						
							|  |  |  | entirely, just specify [no-deprecated](#no-deprecated). | 
					
						
							|  |  |  | If `--api` isn't given, it defaults to the current (minor) OpenSSL version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Cross Compile Prefix | 
					
						
							|  |  |  | -------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  |     --cross-compile-prefix=<PREFIX> | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | The `<PREFIX>` to include in front of commands for your toolchain. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | It is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler | 
					
						
							|  |  |  | as `a-b-c-gcc`, etc.  Unfortunately cross-compiling is too case-specific to put | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | together one-size-fits-all instructions.  You might have to pass more flags or | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | set up environment variables to actually make it work.  Android and iOS cases | 
					
						
							|  |  |  | are discussed in corresponding `Configurations/15-*.conf` files.  But there are | 
					
						
							|  |  |  | cases when this option alone is sufficient.  For example to build the mingw64 | 
					
						
							|  |  |  | target on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works.  Naturally | 
					
						
							|  |  |  | provided that mingw packages are installed.  Today Debian and Ubuntu users | 
					
						
							|  |  |  | have option to install a number of prepackaged cross-compilers along with | 
					
						
							|  |  |  | corresponding run-time and development packages for "alien" hardware.  To give | 
					
						
							|  |  |  | another example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such | 
					
						
							|  |  |  | case. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For cross compilation, you must [configure manually](#manual-configuration). | 
					
						
							|  |  |  | Also, note that `--openssldir` refers to target's file system, not one you are | 
					
						
							|  |  |  | building on. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build Type | 
					
						
							|  |  |  | ---------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --debug | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build OpenSSL with debugging symbols and zero optimization level. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --release | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build OpenSSL without debugging symbols.  This is the default. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Directories | 
					
						
							|  |  |  | ----------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### libdir
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     --libdir=DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The name of the directory under the top of the installation directory tree | 
					
						
							|  |  |  | (see the `--prefix` option) where libraries will be installed.  By default | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | this is `lib/`. Note that on Windows only static libraries (`*.lib`) will | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | be stored in this location. Shared libraries (`*.dll`) will always be | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | installed to the `bin/` directory. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### openssldir
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     --openssldir=DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Directory for OpenSSL configuration files, and also the default certificate | 
					
						
							|  |  |  | and key store.  Defaults are: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unix:           /usr/local/ssl | 
					
						
							|  |  |  |     Windows:        C:\Program Files\Common Files\SSL | 
					
						
							|  |  |  |     OpenVMS:        SYS$COMMON:[OPENSSL-COMMON] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For 32bit Windows applications on Windows 64bit (WOW64), always replace | 
					
						
							|  |  |  | `C:\Program Files` by `C:\Program Files (x86)`. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### prefix
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     --prefix=DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The top of the installation directory tree.  Defaults are: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unix:           /usr/local | 
					
						
							|  |  |  |     Windows:        C:\Program Files\OpenSSL | 
					
						
							|  |  |  |     OpenVMS:        SYS$COMMON:[OPENSSL-'version'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Compiler Warnings | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --strict-warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is a developer flag that switches on various compiler options recommended | 
					
						
							|  |  |  | for OpenSSL development.  It only works when using gcc or clang as the compiler. | 
					
						
							|  |  |  | If you are developing a patch for OpenSSL then it is recommended that you use | 
					
						
							|  |  |  | this option where possible. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ZLib Flags | 
					
						
							|  |  |  | ---------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### with-zlib-include
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     --with-zlib-include=DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The directory for the location of the zlib include file.  This option is only | 
					
						
							|  |  |  | necessary if [enable-zlib](#enable-zlib) is used and the include file is not | 
					
						
							|  |  |  | already on the system include path. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### with-zlib-lib
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     --with-zlib-lib=LIB | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **On Unix**: this is the directory containing the zlib library. | 
					
						
							|  |  |  | If not provided the system library path will be used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **On Windows:** this is the filename of the zlib library (with or | 
					
						
							|  |  |  | without a path).  This flag must be provided if the | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | [zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used | 
					
						
							|  |  |  | then this flag is optional and defaults to `ZLIB1` if not provided. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | **On VMS:** this is the filename of the zlib library (with or without a path). | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | This flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32` | 
					
						
							|  |  |  | or `GNV$LIBZSHR64` is used by default depending on the pointer size chosen. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Seeding the Random Generator | 
					
						
							|  |  |  | ---------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --with-rand-seed=seed1[,seed2,...] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A comma separated list of seeding methods which will be tried by OpenSSL | 
					
						
							|  |  |  | in order to obtain random input (a.k.a "entropy") for seeding its | 
					
						
							|  |  |  | cryptographically secure random number generator (CSPRNG). | 
					
						
							|  |  |  | The current seeding methods are: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### os
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use a trusted operating system entropy source. | 
					
						
							|  |  |  | This is the default method if such an entropy source exists. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### getrandom
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use the [getrandom(2)][man-getrandom] or equivalent system call. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### devrandom
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Use the first device from the `DEVRANDOM` list which can be opened to read | 
					
						
							|  |  |  | random bytes.  The `DEVRANDOM` preprocessor constant expands to | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     "/dev/urandom","/dev/random","/dev/srandom" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | on most unix-ish operating systems. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### egd
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Check for an entropy generating daemon. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### rdcpu
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Use the `RDSEED` or `RDRAND` command if provided by the CPU. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### librandom
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use librandom (not implemented yet). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### none
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Disable automatic seeding.  This is the default on some operating systems where | 
					
						
							|  |  |  | no suitable entropy source exists, or no support for it is implemented yet. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For more information, see the section [Notes on random number generation][rng] | 
					
						
							|  |  |  | at the end of this document. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [rng]: #notes-on-random-number-generation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Enable and Disable Features | 
					
						
							|  |  |  | --------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Feature options always come in pairs, an option to enable feature `xxxx`, and | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | and option to disable it: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [ enable-xxxx | no-xxxx ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Whether a feature is enabled or disabled by default, depends on the feature. | 
					
						
							|  |  |  | In the following list, always the non-default variant is documented: if | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | feature `xxxx` is disabled by default then `enable-xxxx` is documented and | 
					
						
							|  |  |  | if feature `xxxx` is enabled by default then `no-xxxx` is documented. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-afalgeng
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build the AFALG engine. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This option will be forced on a platform that does not support AFALG. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-ktls
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build with Kernel TLS support. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This option will enable the use of the Kernel TLS data-path, which can improve | 
					
						
							|  |  |  | performance and allow for the use of sendfile and splice system calls on | 
					
						
							|  |  |  | TLS sockets.  The Kernel may use TLS accelerators if any are available on the | 
					
						
							|  |  |  | system.  This option will be forced off on systems that do not support the | 
					
						
							|  |  |  | Kernel TLS data-path. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-asan
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build with the Address sanitiser. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is a developer option only.  It may not work on all platforms and should | 
					
						
							|  |  |  | never be used in production environments.  It will only work when used with | 
					
						
							|  |  |  | gcc or clang and should be used in conjunction with the [no-shared](#no-shared) | 
					
						
							|  |  |  | option. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-17 09:33:16 +08:00
										 |  |  | ### no-acvp_tests
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Do not build support for Automated Cryptographic Validation Protocol (ACVP) | 
					
						
							|  |  |  | tests. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is required for FIPS validation purposes. Certain ACVP tests require | 
					
						
							|  |  |  | access to algorithm internals that are not normally accessible. | 
					
						
							|  |  |  | Additional information related to ACVP can be found at | 
					
						
							|  |  |  | <https://github.com/usnistgov/ACVP>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-asm
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Do not use assembler code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This should be viewed as debugging/troubleshooting option rather than for | 
					
						
							|  |  |  | production use.  On some platforms a small amount of assembler code may still | 
					
						
							|  |  |  | be used even with this option. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-async
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Do not build support for async operations. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-autoalginit
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't automatically load all supported ciphers and digests. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Typically OpenSSL will make available all of its supported ciphers and digests. | 
					
						
							|  |  |  | For a statically linked application this may be undesirable if small executable | 
					
						
							|  |  |  | size is an objective.  This only affects libcrypto.  Ciphers and digests will | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()` | 
					
						
							|  |  |  | if this option is used.  This option will force a non-shared build. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-autoerrinit
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't automatically load all libcrypto/libssl error strings. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Typically OpenSSL will automatically load human readable error strings.  For a | 
					
						
							|  |  |  | statically linked application this may be undesirable if small executable size | 
					
						
							|  |  |  | is an objective. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-autoload-config
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Don't automatically load the default `openssl.cnf` file. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Typically OpenSSL will automatically load a system config file which configures | 
					
						
							|  |  |  | default SSL options. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-buildtest-c++
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | While testing, generate C++ buildtest files that simply check that the public | 
					
						
							|  |  |  | OpenSSL header files are usable standalone with C++. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Enabling this option demands extra care.  For any compiler flag given directly | 
					
						
							|  |  |  | as configuration option, you must ensure that it's valid for both the C and | 
					
						
							|  |  |  | the C++ compiler.  If not, the C++ build test will most likely break.  As an | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-capieng
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build the CAPI engine. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This option will be forced if on a platform that does not support CAPI. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-cmp
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Don't build support for Certificate Management Protocol (CMP) | 
					
						
							|  |  |  | and Certificate Request Message Format (CRMF). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-cms
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for Cryptographic Message Syntax (CMS). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-comp
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for SSL/TLS compression. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If this option is enabled (the default), then compression will only work if | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | the zlib or `zlib-dynamic` options are also chosen. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-crypto-mdebug
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | This now only enables the `failed-malloc` feature. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-crypto-mdebug-backtrace
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This is a no-op; the project uses the compiler's address/leak sanitizer instead. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ct
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for Certificate Transparency (CT). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-deprecated
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build with support for deprecated APIs up until and including the version | 
					
						
							|  |  |  | given with `--api` (or the current version, if `--api` wasn't specified). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-dgram
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for datagram based BIOs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Selecting this option will also force the disabling of DTLS. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-dso
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for loading Dynamic Shared Objects (DSO) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-devcryptoeng
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build the `/dev/crypto` engine. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This option is automatically selected on the BSD platform, in which case it can | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | be disabled with `no-devcryptoeng`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-dynamic-engine
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build the dynamically loaded engines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This only has an effect in a shared build. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ec
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for Elliptic Curves. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ec2m
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for binary Elliptic Curves | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-ec_nistp_64_gcc_128
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Enable support for optimised implementations of some commonly used NIST | 
					
						
							|  |  |  | elliptic curves. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This option is only supported on platforms: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  - with little-endian storage of non-byte types | 
					
						
							|  |  |  |  - that tolerate misaligned memory references | 
					
						
							|  |  |  |  - where the compiler: | 
					
						
							|  |  |  |    - supports the non-standard type `__uint128_t` | 
					
						
							|  |  |  |    - defines the built-in macro `__SIZEOF_INT128__` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-egd
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build support for gathering entropy from the Entropy Gathering Daemon (EGD). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-engine
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for loading engines. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-err
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't compile in any error strings. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-external-tests
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Enable building of integration with external test suites. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is a developer option and may not work on all platforms.  The following | 
					
						
							|  |  |  | external test suites are currently supported: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  - BoringSSL test suite | 
					
						
							|  |  |  |  - Python PYCA/Cryptography test suite | 
					
						
							|  |  |  |  - krb5 test suite | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-19 05:33:16 +08:00
										 |  |  | See the file [test/README.external](test/README.external) for further details. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-filenames
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't compile in filename and line number information (e.g.  for errors and | 
					
						
							|  |  |  | memory allocation). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-fips
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't compile the FIPS provider | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-fuzz-libfuzzer, enable-fuzz-afl
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Build with support for fuzzing using either libfuzzer or AFL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | These are developer options only.  They may not work on all  platforms and | 
					
						
							|  |  |  | should never be used in production environments. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | See the file [fuzz/README.md](fuzz/README.md) for further details. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-gost
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build support for GOST based ciphersuites. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that if this feature is enabled then GOST ciphersuites are only available | 
					
						
							|  |  |  | if the GOST algorithms are also available through loading an externally supplied | 
					
						
							|  |  |  | engine. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-legacy
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't build the legacy provider. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Disabling this also disables the legacy algorithms: MD2 (already disabled by default). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-makedepend
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Don't generate dependencies. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-module
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build any dynamically loadable engines. | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | This also implies `no-dynamic-engine`. | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-multiblock
 | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for writing multiple records in one go in libssl | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Note: this is a different capability to the pipelining functionality. | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-nextprotoneg
 | 
					
						
							| 
									
										
										
										
											2018-01-30 01:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for the Next Protocol Negotiation (NPN) TLS extension. | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ocsp
 | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for Online Certificate Status Protocol (OCSP). | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-padlockeng
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build the padlock engine. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-hw-padlock
 | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | As synonym for `no-padlockeng`.  Deprecated and should not be used. | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-pic
 | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build with support for Position Independent Code. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-pinshared
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't pin the shared libraries. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | By default OpenSSL will attempt to stay in memory until the process exits. | 
					
						
							|  |  |  | This is so that libcrypto and libssl can be properly cleaned up automatically | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | via an `atexit()` handler.  The handler is registered by libcrypto and cleans | 
					
						
							|  |  |  | up both libraries.  On some platforms the `atexit()` handler will run on unload of | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | libcrypto (if it has been dynamically loaded) rather than at process exit.  This | 
					
						
							|  |  |  | option can be used to stop OpenSSL from attempting to stay in memory until the | 
					
						
							|  |  |  | process exits.  This could lead to crashes if either libcrypto or libssl have | 
					
						
							|  |  |  | already been unloaded at the point that the atexit handler is invoked, e.g.  on a | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | platform which calls `atexit()` on unload of the library, and libssl is unloaded | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | before libcrypto then a crash is likely to happen.  Applications can suppress | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | running of the `atexit()` handler at run time by using the | 
					
						
							|  |  |  | `OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`. | 
					
						
							|  |  |  | See the man page for it for further details. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-posix-io
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't use POSIX IO capabilities. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-psk
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for Pre-Shared Key based ciphersuites. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-rdrand
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't use hardware RDRAND capabilities. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-rfc3779
 | 
					
						
							| 
									
										
										
										
											2016-03-08 20:53:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for RFC3779, "X.509 Extensions for IP Addresses and | 
					
						
							|  |  |  | AS Identifiers". | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### sctp
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build support for Stream Control Transmission Protocol (SCTP). | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-shared
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Do not create shared libraries, only static ones. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | See [Notes on shared libraries](#notes-on-shared-libraries) below. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-sock
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for socket BIOs. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-srp
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for Secure Remote Password (SRP) protocol or | 
					
						
							|  |  |  | SRP based ciphersuites. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-srtp
 | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build Secure Real-Time Transport Protocol (SRTP) support. | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-sse2
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Exclude SSE2 code paths from 32-bit x86 assembly modules. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Normally SSE2 extension is detected at run-time, but the decision whether or not | 
					
						
							|  |  |  | the machine code will be executed is taken solely on CPU capability vector.  This | 
					
						
							|  |  |  | means that if you happen to run OS kernel which does not support SSE2 extension | 
					
						
							|  |  |  | on Intel P4 processor, then your application might be exposed to "illegal | 
					
						
							|  |  |  | instruction" exception.  There might be a way to enable support in kernel, e.g. | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | disengage SSE2 code paths upon application start-up, but if you aim for wider | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | "audience" running such kernel, consider `no-sse2`.  Both the `386` and `no-asm` | 
					
						
							|  |  |  | options imply `no-sse2`. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-ssl-trace
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with the SSL Trace capabilities. | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | This adds the `-trace` option to `s_client` and `s_server`. | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-static-engine
 | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build the statically linked engines. | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | This only has an impact when not built "shared". | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-stdio
 | 
					
						
							| 
									
										
										
										
											2018-01-29 03:15:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | Don't use anything from the C header file `stdio.h` that makes use of the `FILE` | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | type.  Only libcrypto and libssl can be built in this way.  Using this option will | 
					
						
							|  |  |  | suppress building the command line applications.  Additionally, since the OpenSSL | 
					
						
							|  |  |  | tests also use the command line applications, the tests will also be skipped. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-tests
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build test programs or run any tests. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-threads
 | 
					
						
							| 
									
										
										
										
											2016-06-03 02:44:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build with support for multi-threaded applications. | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### threads
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with support for multi-threaded applications.  Most platforms will enable | 
					
						
							|  |  |  | this by default.  However if on a platform where this is not the case then this | 
					
						
							|  |  |  | will usually require additional system-dependent options! | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | See [Notes on multi-threading](#notes-on-multi-threading) below. | 
					
						
							| 
									
										
										
										
											2019-09-11 17:05:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-trace
 | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with support for the integrated tracing api. | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details. | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ts
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build Time Stamping (TS) Authority support. | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-ubsan
 | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with the Undefined Behaviour sanitiser (UBSAN). | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | This is a developer option only.  It may not work on all platforms and should | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | never be used in production environments.  It will only work when used with | 
					
						
							|  |  |  | gcc or clang and should be used in conjunction with the `-DPEDANTIC` option | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | (or the `--strict-warnings` option). | 
					
						
							| 
									
										
										
										
											2016-02-13 01:33:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-ui-console
 | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-16 15:49:47 +08:00
										 |  |  | Don't build with the User Interface (UI) console method | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-16 15:49:47 +08:00
										 |  |  | The User Interface console method enables text based console prompts. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-unit-test
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Enable additional unit test APIs. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | This should not typically be used in production deployments. | 
					
						
							| 
									
										
										
										
											2019-06-28 19:07:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-uplink
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for UPLINK interface. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-weak-ssl-ciphers
 | 
					
						
							| 
									
										
										
										
											2016-09-01 04:57:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build support for SSL/TLS ciphers that are considered "weak" | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Enabling this includes for example the RC4 based ciphersuites. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### zlib
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with support for zlib compression/decompression. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### zlib-dynamic
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Like the zlib option, but has OpenSSL load the zlib library dynamically | 
					
						
							|  |  |  | when needed. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | This is only supported on systems where loading of shared libraries is supported. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### 386
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | In 32-bit x86 builds, use the 80386 instruction set only in assembly modules | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | The default x86 code is more efficient, but requires at least an 486 processor. | 
					
						
							|  |  |  | Note: This doesn't affect compiler generated code, so this option needs to be | 
					
						
							|  |  |  | accompanied by a corresponding compiler-specific option. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-{protocol}
 | 
					
						
							| 
									
										
										
										
											2018-01-30 06:17:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2} | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Don't build support for negotiating the specified SSL/TLS protocol. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3` | 
					
						
							|  |  |  | are disabled. | 
					
						
							|  |  |  | Similarly `no-dtls` will disable `dtls1` and `dtls1_2`.  The `no-ssl` option is | 
					
						
							|  |  |  | synonymous with `no-ssl3`.  Note this only affects version negotiation. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | OpenSSL will still provide the methods for applications to explicitly select | 
					
						
							|  |  |  | the individual protocol versions. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-{protocol}-method
 | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}-method | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Analogous to `no-{protocol}` but in addition do not build the methods for | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | applications to explicitly select individual protocol versions.  Note that there | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | is no `no-tls1_3-method` option because there is no application method for | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | TLSv1.3. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Using individual protocol methods directly is deprecated.  Applications should | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | use `TLS_method()` instead. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### enable-{algorithm}
 | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     enable-{md2|rc5} | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build with support for the specified algorithm. | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### no-{algorithm}
 | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     no-{aria|bf|blake2|camellia|cast|chacha|cmac| | 
					
						
							|  |  |  |         des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb| | 
					
						
							|  |  |  |         poly1305|rc2|rc4|rmd160|scrypt|seed| | 
					
						
							|  |  |  |         siphash|siv|sm2|sm3|sm4|whirlpool} | 
					
						
							| 
									
										
										
										
											2017-03-10 15:32:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Build without support for the specified algorithm. | 
					
						
							| 
									
										
										
										
											2017-03-10 15:32:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`. | 
					
						
							| 
									
										
										
										
											2017-03-10 15:32:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Compiler-specific options
 | 
					
						
							| 
									
										
										
										
											2017-03-10 15:32:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static | 
					
						
							| 
									
										
										
										
											2017-03-10 15:32:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | These system specific options will be recognised and passed through to the | 
					
						
							|  |  |  | compiler to allow you to define preprocessor symbols, specify additional | 
					
						
							|  |  |  | libraries, library directories or other compiler options.  It might be worth | 
					
						
							|  |  |  | noting that some compilers generate code specifically for processor the | 
					
						
							|  |  |  | compiler currently executes on.  This is not necessarily what you might have | 
					
						
							|  |  |  | in mind, since it might be unsuitable for execution on other, typically older, | 
					
						
							|  |  |  | processor.  Consult your compiler documentation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Take note of the [Environment Variables](#environment-variables) documentation | 
					
						
							|  |  |  | below and how these flags interact with those variables. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -xxx, +xxx, /xxx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Additional options that are not otherwise recognised are passed through as | 
					
						
							|  |  |  | they are to the compiler as well.  Unix-style options beginning with a | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `-` or `+` and Windows-style options beginning with a `/` are recognized. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Again, consult your compiler documentation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the option contains arguments separated by spaces, then the URL-style | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | notation `%20` can be used for the space character in order to avoid having | 
					
						
							|  |  |  | to quote the option.  For example, `-opt%20arg` gets expanded to `-opt arg`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | In fact, any ASCII character can be encoded as %xx using its hexadecimal | 
					
						
							|  |  |  | encoding. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Take note of the [Environment Variables](#environment-variables) documentation | 
					
						
							|  |  |  | below and how these flags interact with those variables. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Environment Variables
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     VAR=value | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Assign the given value to the environment variable `VAR` for `Configure`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | These work just like normal environment variable assignments, but are supported | 
					
						
							|  |  |  | on all platforms and are confined to the configuration scripts only. | 
					
						
							|  |  |  | These assignments override the corresponding value in the inherited environment, | 
					
						
							|  |  |  | if there is one. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | The following variables are used as "`make` variables" and can be used as an | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | alternative to giving preprocessor, compiler and linker options directly as | 
					
						
							|  |  |  | configuration.  The following variables are supported: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     AR              The static library archiver. | 
					
						
							|  |  |  |     ARFLAGS         Flags for the static library archiver. | 
					
						
							|  |  |  |     AS              The assembler compiler. | 
					
						
							|  |  |  |     ASFLAGS         Flags for the assembler compiler. | 
					
						
							|  |  |  |     CC              The C compiler. | 
					
						
							|  |  |  |     CFLAGS          Flags for the C compiler. | 
					
						
							|  |  |  |     CXX             The C++ compiler. | 
					
						
							|  |  |  |     CXXFLAGS        Flags for the C++ compiler. | 
					
						
							|  |  |  |     CPP             The C/C++ preprocessor. | 
					
						
							|  |  |  |     CPPFLAGS        Flags for the C/C++ preprocessor. | 
					
						
							|  |  |  |     CPPDEFINES      List of CPP macro definitions, separated | 
					
						
							|  |  |  |                     by a platform specific character (':' or | 
					
						
							|  |  |  |                     space for Unix, ';' for Windows, ',' for | 
					
						
							|  |  |  |                     VMS).  This can be used instead of using | 
					
						
							|  |  |  |                     -D (or what corresponds to that on your | 
					
						
							|  |  |  |                     compiler) in CPPFLAGS. | 
					
						
							|  |  |  |     CPPINCLUDES     List of CPP inclusion directories, separated | 
					
						
							|  |  |  |                     the same way as for CPPDEFINES.  This can | 
					
						
							|  |  |  |                     be used instead of -I (or what corresponds | 
					
						
							|  |  |  |                     to that on your compiler) in CPPFLAGS. | 
					
						
							|  |  |  |     HASHBANGPERL    Perl invocation to be inserted after '#!' | 
					
						
							|  |  |  |                     in public perl scripts (only relevant on | 
					
						
							|  |  |  |                     Unix). | 
					
						
							|  |  |  |     LD              The program linker (not used on Unix, $(CC) | 
					
						
							|  |  |  |                     is used there). | 
					
						
							|  |  |  |     LDFLAGS         Flags for the shared library, DSO and | 
					
						
							|  |  |  |                     program linker. | 
					
						
							|  |  |  |     LDLIBS          Extra libraries to use when linking. | 
					
						
							|  |  |  |                     Takes the form of a space separated list | 
					
						
							|  |  |  |                     of library specifications on Unix and | 
					
						
							|  |  |  |                     Windows, and as a comma separated list of | 
					
						
							|  |  |  |                     libraries on VMS. | 
					
						
							|  |  |  |     RANLIB          The library archive indexer. | 
					
						
							|  |  |  |     RC              The Windows resource compiler. | 
					
						
							|  |  |  |     RCFLAGS         Flags for the Windows resource compiler. | 
					
						
							|  |  |  |     RM              The command to remove files and directories. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | These cannot be mixed with compiling/linking flags given on the command line. | 
					
						
							|  |  |  | In other words, something like this isn't permitted. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Backward compatibility note: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To be compatible with older configuration scripts, the environment variables | 
					
						
							|  |  |  | are ignored if compiling/linking flags are given on the command line, except | 
					
						
							|  |  |  | for the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | For example, the following command will not see `-DBAR`: | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ CPPFLAGS=-DBAR ./Configure -DCOOKIE | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | However, the following will see both set variables: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++ | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | compiler are in the same "family".  This becomes relevant with | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `enable-external-tests` and `enable-buildtest-c++`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Reconfigure
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     reconf | 
					
						
							|  |  |  |     reconfigure | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Reconfigure from earlier data. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | This fetches the previous command line options and environment from data | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | saved in `configdata.pm` and runs the configuration process again, using | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | these options and environment.  Note: NO other option is permitted together | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | with `reconf`.  Note: The original configuration saves away values for ALL | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | environment variables that were used, and if they weren't defined, they are | 
					
						
							|  |  |  | still saved away with information that they weren't originally defined. | 
					
						
							|  |  |  | This information takes precedence over environment variables that are | 
					
						
							|  |  |  | defined when reconfiguring. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Displaying configuration data | 
					
						
							|  |  |  | ----------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The configuration script itself will say very little, and finishes by | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | creating `configdata.pm`.  This perl module can be loaded by other scripts | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | to find all the configuration data, and it can also be used as a script to | 
					
						
							|  |  |  | display all sorts of configuration data in a human readable form. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For more information, please do: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ ./configdata.pm --help                         # Unix | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | or | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ perl configdata.pm --help                      # Windows and VMS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Installation Steps in Detail | 
					
						
							|  |  |  | ============================ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Configure OpenSSL | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Automatic Configuration
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | On some platform a `config` script is available which attempts to guess | 
					
						
							|  |  |  | your operating system (and compiler, if necessary) and calls the `Configure` | 
					
						
							|  |  |  | Perl script with appropriate target based on its guess.  Further options can | 
					
						
							|  |  |  | be supplied to the `config` script, which will be passed on to the `Configure` | 
					
						
							|  |  |  | script. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### Unix / Linux / macOS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### OpenVMS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### Windows
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Manual Configuration
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | OpenSSL knows about a range of different operating system, hardware and | 
					
						
							|  |  |  | compiler combinations.  To see the ones it knows about, run | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure LIST                               # Unix | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | or | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl Configure LIST                            # All other platforms | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | For the remainder of this text, the Unix form will be used in all examples. | 
					
						
							|  |  |  | Please use the appropriate form for your platform. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Pick a suitable name from the list that matches your system.  For most | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | operating systems there is a choice between using cc or gcc. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | When you have identified your system (and if necessary compiler) use this | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | name as the argument to `Configure`.  For example, a `linux-elf` user would | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | run: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ ./Configure linux-elf [[ options ]] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Creating your own Configuration
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If your system isn't listed, you will have to create a configuration | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | file named `Configurations/{{ something }}.conf` and add the correct | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | configuration for your system.  See the available configs as examples | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | and read [Configurations/README](Configurations/README) | 
					
						
							|  |  |  | and [Configurations/README.design](Configurations/README.design) | 
					
						
							|  |  |  | for more information. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | The generic configurations `cc` or `gcc` should usually work on 32 bit | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Unix-like systems. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows | 
					
						
							|  |  |  | and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`, | 
					
						
							|  |  |  | and defines various macros in `include/openssl/configuration.h` (generated | 
					
						
							|  |  |  | from `include/openssl/configuration.h.in`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Out of Tree Builds
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | OpenSSL can be configured to build in a build directory separate from the | 
					
						
							|  |  |  | source code directory.  It's done by placing yourself in some other | 
					
						
							|  |  |  | directory and invoking the configuration commands from there. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### Unix example
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $ mkdir /var/tmp/openssl-build | 
					
						
							|  |  |  |     $ cd /var/tmp/openssl-build | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ /PATH/TO/OPENSSL/SOURCE/Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### OpenVMS example
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $ set default sys$login: | 
					
						
							|  |  |  |     $ create/dir [.tmp.openssl-build] | 
					
						
							|  |  |  |     $ set default [.tmp.openssl-build] | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | #### Windows example
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $ C: | 
					
						
							|  |  |  |     $ mkdir \temp-openssl | 
					
						
							|  |  |  |     $ cd \temp-openssl | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [[ options ]] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Paths can be relative just as well as absolute.  `Configure` will do its best | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | to translate them to relative paths whenever possible. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build OpenSSL | 
					
						
							|  |  |  | ------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build OpenSSL by running: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ make                                           # Unix | 
					
						
							|  |  |  |     $ mms                                            ! (or mmk) OpenVMS | 
					
						
							|  |  |  |     $ nmake                                          # Windows | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Unix, corresponding on other platforms) and the OpenSSL binary | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | (`openssl`).  The libraries will be built in the top-level directory, | 
					
						
							|  |  |  | and the binary will be in the `apps/` subdirectory. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the build fails, take a look at the [Build Failures](#build-failures) | 
					
						
							|  |  |  | subsection of the [Troubleshooting](#troubleshooting) section. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Test OpenSSL | 
					
						
							|  |  |  | ------------ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | After a successful build, and before installing, the libraries should | 
					
						
							|  |  |  | be tested.  Run: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ make test                                      # Unix | 
					
						
							|  |  |  |     $ mms test                                       ! OpenVMS | 
					
						
							|  |  |  |     $ nmake test                                     # Windows | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Warning:** you MUST run the tests from an unprivileged account (or disable | 
					
						
							|  |  |  | your privileges temporarily if your platform allows it). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | See the file [test/README.md](test/README.md) for further details. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Install OpenSSL | 
					
						
							|  |  |  | --------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If everything tests ok, install OpenSSL with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ make install                                   # Unix | 
					
						
							|  |  |  |     $ mms install                                    ! OpenVMS | 
					
						
							|  |  |  |     $ nmake install                                  # Windows | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that in order to perform the install step above you need to have | 
					
						
							|  |  |  | appropriate permissions to write to the installation directory. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The above commands will install all the software components in this | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | directory tree under `<PREFIX>` (the directory given with `--prefix` or | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | its default): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Unix / Linux / macOS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     bin/           Contains the openssl binary and a few other | 
					
						
							|  |  |  |                    utility scripts. | 
					
						
							|  |  |  |     include/openssl | 
					
						
							|  |  |  |                    Contains the header files needed if you want | 
					
						
							|  |  |  |                    to build your own programs that use libcrypto | 
					
						
							|  |  |  |                    or libssl. | 
					
						
							|  |  |  |     lib            Contains the OpenSSL library files. | 
					
						
							|  |  |  |     lib/engines    Contains the OpenSSL dynamically loadable engines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     share/man/man1 Contains the OpenSSL command line man-pages. | 
					
						
							|  |  |  |     share/man/man3 Contains the OpenSSL library calls man-pages. | 
					
						
							|  |  |  |     share/man/man5 Contains the OpenSSL configuration format man-pages. | 
					
						
							|  |  |  |     share/man/man7 Contains the OpenSSL other misc man-pages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     share/doc/openssl/html/man1 | 
					
						
							|  |  |  |     share/doc/openssl/html/man3 | 
					
						
							|  |  |  |     share/doc/openssl/html/man5 | 
					
						
							|  |  |  |     share/doc/openssl/html/man7 | 
					
						
							|  |  |  |                    Contains the HTML rendition of the man-pages. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### OpenVMS
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | 'arch' is replaced with the architecture name, `Alpha` or `ia64`, | 
					
						
							|  |  |  | 'sover' is replaced with the shared library version (`0101` for 1.1), and | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 'pz' is replaced with the pointer size OpenSSL was built with: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [.EXE.'arch']  Contains the openssl binary. | 
					
						
							|  |  |  |     [.EXE]         Contains a few utility scripts. | 
					
						
							|  |  |  |     [.include.openssl] | 
					
						
							|  |  |  |                    Contains the header files needed if you want | 
					
						
							|  |  |  |                    to build your own programs that use libcrypto | 
					
						
							|  |  |  |                    or libssl. | 
					
						
							|  |  |  |     [.LIB.'arch']  Contains the OpenSSL library files. | 
					
						
							|  |  |  |     [.ENGINES'sover''pz'.'arch'] | 
					
						
							|  |  |  |                    Contains the OpenSSL dynamically loadable engines. | 
					
						
							|  |  |  |     [.SYS$STARTUP] Contains startup, login and shutdown scripts. | 
					
						
							|  |  |  |                    These define appropriate logical names and | 
					
						
							|  |  |  |                    command symbols. | 
					
						
							|  |  |  |     [.SYSTEST]     Contains the installation verification procedure. | 
					
						
							|  |  |  |     [.HTML]        Contains the HTML rendition of the manual pages. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Additional Directories
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Additionally, install will add the following directories under | 
					
						
							|  |  |  | OPENSSLDIR (the directory given with `--openssldir` or its default) | 
					
						
							|  |  |  | for you convenience: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     certs          Initially empty, this is the default location | 
					
						
							|  |  |  |                    for certificate files. | 
					
						
							|  |  |  |     private        Initially empty, this is the default location | 
					
						
							|  |  |  |                    for private key files. | 
					
						
							|  |  |  |     misc           Various scripts. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The installation directory should be appropriately protected to ensure | 
					
						
							|  |  |  | unprivileged users cannot make changes to OpenSSL binaries or files, or | 
					
						
							|  |  |  | install engines.  If you already have a pre-installed version of OpenSSL as | 
					
						
							|  |  |  | part of your Operating System it is recommended that you do not overwrite | 
					
						
							|  |  |  | the system version and instead install to somewhere else. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Package builders who want to configure the library for standard locations, | 
					
						
							|  |  |  | but have the package installed somewhere else so that it can easily be | 
					
						
							|  |  |  | packaged, can use | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  |     $ make DESTDIR=/tmp/package-root install         # Unix | 
					
						
							|  |  |  |     $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The specified destination directory will be prepended to all installation | 
					
						
							|  |  |  | target paths. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | Compatibility issues with previous OpenSSL versions | 
					
						
							|  |  |  | --------------------------------------------------- | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### COMPILING existing applications
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Starting with version 1.1.0, OpenSSL hides a number of structures that were | 
					
						
							|  |  |  | previously open.  This includes all internal libssl structures and a number | 
					
						
							|  |  |  | of EVP types.  Accessor functions have been added to allow controlled access | 
					
						
							|  |  |  | to the structures' data. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This means that some software needs to be rewritten to adapt to the new ways | 
					
						
							|  |  |  | of doing things.  This often amounts to allocating an instance of a structure | 
					
						
							|  |  |  | explicitly where you could previously allocate them on the stack as automatic | 
					
						
							|  |  |  | variables, and using the provided accessor functions where you would previously | 
					
						
							|  |  |  | access a structure's field directly. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some APIs have changed as well.  However, older APIs have been preserved when | 
					
						
							|  |  |  | possible. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-17 21:38:45 +08:00
										 |  |  | Post-installation Notes | 
					
						
							|  |  |  | ----------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With the default OpenSSL installation comes a FIPS provider module, which | 
					
						
							|  |  |  | needs some post-installation attention, without which it will not be usable. | 
					
						
							|  |  |  | This involves using the following command: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-24 17:55:16 +08:00
										 |  |  |     $ openssl fipsinstall | 
					
						
							| 
									
										
										
										
											2020-04-17 21:38:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | See the openssl-fipsinstall(1) manual for details and examples. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | Advanced Build Options | 
					
						
							|  |  |  | ====================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Environment Variables | 
					
						
							|  |  |  | --------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A number of environment variables can be used to provide additional control | 
					
						
							|  |  |  | over the build process.  Typically these should be defined prior to running | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `Configure`.  Not all environment variables are relevant to all platforms. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     AR | 
					
						
							|  |  |  |                    The name of the ar executable to use. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BUILDFILE | 
					
						
							|  |  |  |                    Use a different build file name than the platform default | 
					
						
							|  |  |  |                    ("Makefile" on Unix-like platforms, "makefile" on native Windows, | 
					
						
							|  |  |  |                    "descrip.mms" on OpenVMS).  This requires that there is a | 
					
						
							|  |  |  |                    corresponding build file template.  See Configurations/README | 
					
						
							|  |  |  |                    for further information. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     CC | 
					
						
							|  |  |  |                    The compiler to use. Configure will attempt to pick a default | 
					
						
							|  |  |  |                    compiler for your platform but this choice can be overridden | 
					
						
							|  |  |  |                    using this variable. Set it to the compiler executable you wish | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  |                    to use, e.g. gcc or clang. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     CROSS_COMPILE | 
					
						
							|  |  |  |                    This environment variable has the same meaning as for the | 
					
						
							|  |  |  |                    "--cross-compile-prefix" Configure flag described above. If both | 
					
						
							|  |  |  |                    are set then the Configure flag takes precedence. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     NM | 
					
						
							|  |  |  |                    The name of the nm executable to use. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OPENSSL_LOCAL_CONFIG_DIR | 
					
						
							|  |  |  |                    OpenSSL comes with a database of information about how it | 
					
						
							|  |  |  |                    should be built on different platforms as well as build file | 
					
						
							|  |  |  |                    templates for those platforms. The database is comprised of | 
					
						
							|  |  |  |                    ".conf" files in the Configurations directory.  The build | 
					
						
							|  |  |  |                    file templates reside there as well as ".tmpl" files. See the | 
					
						
							|  |  |  |                    file Configurations/README for further information about the | 
					
						
							|  |  |  |                    format of ".conf" files as well as information on the ".tmpl" | 
					
						
							|  |  |  |                    files. | 
					
						
							|  |  |  |                    In addition to the standard ".conf" and ".tmpl" files, it is | 
					
						
							|  |  |  |                    possible to create your own ".conf" and ".tmpl" files and store | 
					
						
							|  |  |  |                    them locally, outside the OpenSSL source tree. This environment | 
					
						
							|  |  |  |                    variable can be set to the directory where these files are held | 
					
						
							|  |  |  |                    and will be considered by Configure before it looks in the | 
					
						
							|  |  |  |                    standard directories. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PERL | 
					
						
							|  |  |  |                    The name of the Perl executable to use when building OpenSSL. | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |                    Only needed if builing should use a different Perl executable | 
					
						
							|  |  |  |                    than what is used to run the Configure script. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     HASHBANGPERL | 
					
						
							|  |  |  |                    The command string for the Perl executable to insert in the | 
					
						
							|  |  |  |                    #! line of perl scripts that will be publicly installed. | 
					
						
							|  |  |  |                    Default: /usr/bin/env perl | 
					
						
							|  |  |  |                    Note: the value of this variable is added to the same scripts | 
					
						
							|  |  |  |                    on all platforms, but it's only relevant on Unix-like platforms. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RC | 
					
						
							|  |  |  |                    The name of the rc executable to use. The default will be as | 
					
						
							|  |  |  |                    defined for the target platform in the ".conf" file. If not | 
					
						
							|  |  |  |                    defined then "windres" will be used. The WINDRES environment | 
					
						
							|  |  |  |                    variable is synonymous to this. If both are defined then RC | 
					
						
							|  |  |  |                    takes precedence. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RANLIB | 
					
						
							|  |  |  |                    The name of the ranlib executable to use. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     WINDRES | 
					
						
							|  |  |  |                    See RC. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Makefile Targets | 
					
						
							|  |  |  | ---------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | The `Configure` script generates a Makefile in a format relevant to the specific | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | platform.  The Makefiles provide a number of targets that can be used.  Not all | 
					
						
							|  |  |  | targets may be available on all platforms.  Only the most common targets are | 
					
						
							|  |  |  | described here.  Examine the Makefiles themselves for the full list. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     all | 
					
						
							|  |  |  |                    The target to build all the software components and | 
					
						
							|  |  |  |                    documentation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     build_sw | 
					
						
							|  |  |  |                    Build all the software components. | 
					
						
							|  |  |  |                    THIS IS THE DEFAULT TARGET. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     build_docs | 
					
						
							|  |  |  |                    Build all documentation components. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clean | 
					
						
							|  |  |  |                    Remove all build artefacts and return the directory to a "clean" | 
					
						
							|  |  |  |                    state. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     depend | 
					
						
							|  |  |  |                    Rebuild the dependencies in the Makefiles. This is a legacy | 
					
						
							|  |  |  |                    option that no longer needs to be used since OpenSSL 1.1.0. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install | 
					
						
							|  |  |  |                    Install all OpenSSL components. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install_sw | 
					
						
							|  |  |  |                    Only install the OpenSSL software components. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install_docs | 
					
						
							|  |  |  |                    Only install the OpenSSL documentation components. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install_man_docs | 
					
						
							|  |  |  |                    Only install the OpenSSL man pages (Unix only). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install_html_docs | 
					
						
							|  |  |  |                    Only install the OpenSSL html documentation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     list-tests | 
					
						
							|  |  |  |                    Prints a list of all the self test names. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test | 
					
						
							|  |  |  |                    Build and run the OpenSSL self tests. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     uninstall | 
					
						
							|  |  |  |                    Uninstall all OpenSSL components. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     reconfigure | 
					
						
							|  |  |  |     reconf | 
					
						
							|  |  |  |                    Re-run the configuration process, as exactly as the last time | 
					
						
							|  |  |  |                    as possible. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     update | 
					
						
							|  |  |  |                    This is a developer option. If you are developing a patch for | 
					
						
							|  |  |  |                    OpenSSL you may need to use this if you want to update | 
					
						
							|  |  |  |                    automatically generated files; add new error codes or add new | 
					
						
							|  |  |  |                    (or change the visibility of) public API functions. (Unix only). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Running Selected Tests | 
					
						
							|  |  |  | ---------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | You can specify a set of tests to be performed | 
					
						
							|  |  |  | using the `make` variable `TESTS`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | See the section [Running Selected Tests of | 
					
						
							|  |  |  | test/README.md](test/README.md#running-selected-tests). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Troubleshooting | 
					
						
							|  |  |  | =============== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Configuration Problems | 
					
						
							|  |  |  | ---------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Selecting the correct target
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | The `./Configure` script tries hard to guess your operating system, but in some | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | cases it does not succeed. You will see a message like the following: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  |     $ ./Configure | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  |     Operating system: x86-whatever-minix | 
					
						
							|  |  |  |     This system (minix) is not supported. See file INSTALL for details. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | Even if the automatic target selection by the `./Configure` script fails, | 
					
						
							|  |  |  | chances are that you still might find a suitable target in the `Configurations` | 
					
						
							|  |  |  | directory, which you can supply to the `./Configure` command, | 
					
						
							|  |  |  | possibly after some adjustment. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | The `Configurations/` directory contains a lot of examples of such targets. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | The main configuration file is [10-main.conf][], which contains all targets that | 
					
						
							|  |  |  | are officially supported by the OpenSSL team. Other configuration files contain | 
					
						
							|  |  |  | targets contributed by other OpenSSL users. The list of targets can be found in | 
					
						
							|  |  |  | a Perl list `my %targets = ( ... )`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     my %targets = ( | 
					
						
							|  |  |  |     ... | 
					
						
							|  |  |  |     "target-name" => { | 
					
						
							|  |  |  |         inherit_from     => [ "base-target" ], | 
					
						
							|  |  |  |         CC               => "...", | 
					
						
							|  |  |  |         cflags           => add("..."), | 
					
						
							|  |  |  |         asm_arch         => '...', | 
					
						
							|  |  |  |         perlasm_scheme   => "...", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     ... | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | If you call `./Configure` without arguments, it will give you a list of all | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | known targets. Using `grep`, you can lookup the target definition in the | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `Configurations/` directory. For example the `android-x86_64` can be found in | 
					
						
							|  |  |  | [Configurations/15-android.conf](Configurations/15-android.conf). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The directory contains two README files, which explain the general syntax and | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | design of the configuration files. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  - [Configurations/README](Configurations/README) | 
					
						
							|  |  |  |  - [Configurations/README.design](Configurations/README.design) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you need further help, try to search the [openssl-users][] mailing list | 
					
						
							|  |  |  | or the [GitHub Issues][] for existing solutions. If you don't find anything, | 
					
						
							|  |  |  | you can [raise an issue][] to ask a question yourself. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | More about our support resources can be found in the [SUPPORT][] file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | ### Configuration Errors
 | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 00:20:07 +08:00
										 |  |  | If the `./Configure` or `./Configure` command fails with an error message, | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | read the error message carefully and try to figure out whether you made | 
					
						
							|  |  |  | a mistake (e.g., by providing a wrong option), or whether the script is | 
					
						
							|  |  |  | working incorrectly. If you think you encountered a bug, please | 
					
						
							|  |  |  | [raise an issue][] on GitHub to file a bug report. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Along with a short description of the bug, please provide the complete | 
					
						
							|  |  |  | configure command line and the relevant output including the error message. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note: To make the output readable, pleace add a 'code fence' (three backquotes | 
					
						
							|  |  |  | ` ``` ` on a separate line) before and after your output: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      ``` | 
					
						
							| 
									
										
										
										
											2020-06-21 21:44:26 +08:00
										 |  |  |      ./Configure [your arguments...] | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |      [output...] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Build Failures | 
					
						
							|  |  |  | -------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the build fails, look carefully at the output. Try to locate and understand | 
					
						
							|  |  |  | the error message. It might be that the compiler is already telling you | 
					
						
							|  |  |  | exactly what you need to do to fix your problem. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There may be reasons for the failure that aren't problems in OpenSSL itself, | 
					
						
							|  |  |  | for example if the compiler reports missing standard or third party headers. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the build succeeded previously, but fails after a source or configuration | 
					
						
							|  |  |  | change, it might be helpful to clean the build tree before attempting another | 
					
						
							|  |  |  | build.  Use this command: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-24 17:55:16 +08:00
										 |  |  |     $ make clean                                     # Unix | 
					
						
							|  |  |  |     $ mms clean                                      ! (or mmk) OpenVMS | 
					
						
							|  |  |  |     $ nmake clean                                    # Windows | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Assembler error messages can sometimes be sidestepped by using the | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `no-asm` configuration option. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Compiling parts of OpenSSL with gcc and others with the system compiler will | 
					
						
							|  |  |  | result in unresolved symbols on some systems. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you are still having problems, try to search the [openssl-users][] mailing | 
					
						
							|  |  |  | list or the [GitHub Issues][] for existing solutions. If you think you | 
					
						
							|  |  |  | encountered an OpenSSL bug, please [raise an issue][] to file a bug report. | 
					
						
							|  |  |  | Please take the time to review the existing issues first; maybe the bug was | 
					
						
							|  |  |  | already reported or has already been fixed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Test Failures | 
					
						
							|  |  |  | ------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If some tests fail, look at the output.  There may be reasons for the failure | 
					
						
							| 
									
										
										
										
											2020-06-21 21:44:26 +08:00
										 |  |  | that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | You may want increased verbosity, that can be accomplished as described in | 
					
						
							|  |  |  | section [Test Failures of test/README.md](test/README.md#test-failures). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | You may want to selectively specify which test(s) to perform. This can be done | 
					
						
							|  |  |  | sing the `make` variable `TESTS` as described in section [Running Selected Tests | 
					
						
							|  |  |  | of test/README.md](test/README.md#running-selected-tests). | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you find a problem with OpenSSL itself, try removing any | 
					
						
							| 
									
										
										
										
											2020-06-23 01:47:50 +08:00
										 |  |  | compiler optimization flags from the `CFLAGS` line in the Makefile and | 
					
						
							|  |  |  | run `make clean; make` or corresponding. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | To report a bug please open an issue on GitHub, at | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  | <https://github.com/openssl/openssl/issues>. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Notes | 
					
						
							|  |  |  | ===== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Notes on multi-threading | 
					
						
							|  |  |  | ------------------------ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | For some systems, the OpenSSL `Configure` script knows what compiler options | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | are needed to generate a library that is suitable for multi-threaded | 
					
						
							|  |  |  | applications.  On these systems, support for multi-threading is enabled | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | by default; use the `no-threads` option to disable (this should never be | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | necessary). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On other systems, to enable support for multi-threading, you will have | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | to specify at least two options: `threads`, and a system-dependent option. | 
					
						
							|  |  |  | (The latter is `-D_REENTRANT` on various systems.)  The default in this | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | case, obviously, is not to include support for multi-threading (but | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | you can still use `no-threads` to suppress an annoying warning message | 
					
						
							|  |  |  | from the `Configure` script.) | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | OpenSSL provides built-in support for two threading models: pthreads (found on | 
					
						
							|  |  |  | most UNIX/Linux systems), and Windows threads.  No other threading models are | 
					
						
							|  |  |  | supported.  If your platform does not provide pthreads or Windows threads then | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | you should use `Configure` with the `no-threads` option. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Notes on shared libraries | 
					
						
							|  |  |  | ------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | For most systems the OpenSSL `Configure` script knows what is needed to | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | build shared libraries for libcrypto and libssl.  On these systems | 
					
						
							|  |  |  | the shared libraries will be created by default.  This can be suppressed and | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | only static libraries created by using the `no-shared` option.  On systems | 
					
						
							|  |  |  | where OpenSSL does not know how to build shared libraries the `no-shared` | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | option will be forced and only static libraries will be created. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Shared libraries are named a little differently on different platforms. | 
					
						
							|  |  |  | One way or another, they all have the major OpenSSL version number as | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | part of the file name, i.e.  for OpenSSL 1.1.x, `1.1` is somehow part of | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | the name. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | On most POSIX platforms, shared libraries are named `libcrypto.so.1.1` | 
					
						
							|  |  |  | and `libssl.so.1.1`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll` | 
					
						
							|  |  |  | with import libraries `libcrypto.dll.a` and `libssl.dll.a`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | On Windows build with MSVC or using MingW, shared libraries are named | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows, | 
					
						
							|  |  |  | `libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows, | 
					
						
							|  |  |  | and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows. | 
					
						
							|  |  |  | With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`, | 
					
						
							|  |  |  | while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | On VMS, shareable images (VMS speak for shared libraries) are named | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`.  However, when | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | OpenSSL is specifically built for 32-bit pointers, the shareable images | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe` | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | instead, and when built for 64-bit pointers, they are named | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | `ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Notes on random number generation | 
					
						
							|  |  |  | --------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Availability of cryptographically secure random numbers is required for | 
					
						
							|  |  |  | secret key generation.  OpenSSL provides several options to seed the | 
					
						
							|  |  |  | internal CSPRNG.  If not properly seeded, the internal CSPRNG will refuse | 
					
						
							|  |  |  | to deliver random bytes and a "PRNG not seeded error" will occur. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The seeding method can be configured using the `--with-rand-seed` option, | 
					
						
							|  |  |  | which can be used to specify a comma separated list of seed methods. | 
					
						
							|  |  |  | However in most cases OpenSSL will choose a suitable default method, | 
					
						
							|  |  |  | so it is not necessary to explicitly provide this option.  Note also | 
					
						
							|  |  |  | that not all methods are available on all platforms. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | I) On operating systems which provide a suitable randomness source (in | 
					
						
							|  |  |  | form  of a system call or system device), OpenSSL will use the optimal | 
					
						
							|  |  |  | available  method to seed the CSPRNG from the operating system's | 
					
						
							|  |  |  | randomness sources.  This corresponds to the option `--with-rand-seed=os`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | II) On systems without such a suitable randomness source, automatic seeding | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | to install additional support software to obtain a random seed and reseed | 
					
						
							| 
									
										
										
										
											2020-06-23 14:38:24 +08:00
										 |  |  | the CSPRNG manually.  Please check out the manual pages for `RAND_add()`, | 
					
						
							|  |  |  | `RAND_bytes()`, `RAND_egd()`, and the FAQ for more information. | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | <!-- Links  --> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [openssl-users]: | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |     <https://mta.openssl.org/mailman/listinfo/openssl-users> | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | [SUPPORT]: | 
					
						
							|  |  |  |     ./SUPPORT.md | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [GitHub Issues]: | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |     <https://github.com/openssl/openssl/issues> | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | [raise an issue]: | 
					
						
							| 
									
										
										
										
											2020-05-07 19:44:01 +08:00
										 |  |  |     <https://github.com/openssl/openssl/issues/new/choose> | 
					
						
							| 
									
										
										
										
											2019-12-31 08:09:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | [10-main.conf]: | 
					
						
							|  |  |  |     Configurations/10-main.conf |