| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |  OPENSSL INSTALLATION | 
					
						
							|  |  |  |  -------------------- | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |  This document describes installation on all supported operating | 
					
						
							|  |  |  |  systems (the Linux/Unix family, OpenVMS and Windows) | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  To install OpenSSL, you will need: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-23 21:11:04 +08:00
										 |  |  |   * A make implementation | 
					
						
							|  |  |  |   * Perl 5 with core modules (please read NOTES.PERL) | 
					
						
							|  |  |  |   * The perl module Text::Template (please read NOTES.PERL) | 
					
						
							| 
									
										
										
										
											1999-04-29 00:14:39 +08:00
										 |  |  |   * an ANSI C compiler | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |   * a development environment in the form of development libraries and C | 
					
						
							| 
									
										
										
										
											2001-05-17 12:16:19 +08:00
										 |  |  |     header files | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |   * a supported operating system | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-06 17:30:48 +08:00
										 |  |  |  For additional platform specific requirements, solutions to specific | 
					
						
							|  |  |  |  issues and other details, please read one of these: | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-02 06:43:03 +08:00
										 |  |  |   * NOTES.UNIX (any supported Unix like system) | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |   * NOTES.VMS (OpenVMS) | 
					
						
							| 
									
										
										
										
											2016-05-23 20:55:57 +08:00
										 |  |  |   * NOTES.WIN (any supported Windows) | 
					
						
							| 
									
										
										
										
											2016-05-23 21:11:04 +08:00
										 |  |  |   * NOTES.DJGPP (DOS platform with DJGPP) | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |  Notational conventions in this document | 
					
						
							|  |  |  |  --------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Throughout this document, we use the following conventions in command | 
					
						
							|  |  |  |  examples: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  $ command                      Any line starting with a dollar sign | 
					
						
							|  |  |  |                                 ($) is a command line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  { word1 | word2 | word3 }      This denotes a mandatory choice, to be | 
					
						
							|  |  |  |                                 replaced with one of the given words. | 
					
						
							|  |  |  |                                 A simple example would be this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 $ echo { FOO | BAR | COOKIE } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 which is to be understood as one of | 
					
						
							|  |  |  |                                 these: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 $ echo FOO | 
					
						
							|  |  |  |                                 - or - | 
					
						
							|  |  |  |                                 $ echo BAR | 
					
						
							|  |  |  |                                 - or - | 
					
						
							|  |  |  |                                 $ echo COOKIE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  [ word1 | word2 | word3 ]      Similar to { word1 | word2 | word3 } | 
					
						
							|  |  |  |                                 except it's optional to give any of | 
					
						
							|  |  |  |                                 those.  In addition to the examples | 
					
						
							|  |  |  |                                 above, this would also be valid: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 $ echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  {{ target }}                   This denotes a mandatory word or | 
					
						
							|  |  |  |                                 sequence of words of some sort.  A | 
					
						
							|  |  |  |                                 simple example would be this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 $ type {{ filename }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                                 which is to be understood to use the | 
					
						
							|  |  |  |                                 command 'type' on some file name | 
					
						
							|  |  |  |                                 determined by the user. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  [[ options ]]                  Similar to {{ target }}, but is | 
					
						
							|  |  |  |                                 optional. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Note that the notation assumes spaces around {, }, [, ], {{, }} and | 
					
						
							|  |  |  |  [[, ]].  This is to differentiate from OpenVMS directory | 
					
						
							|  |  |  |  specifications, which also use [ and ], but without spaces. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |  Quick Start | 
					
						
							|  |  |  |  ----------- | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |  If you want to just get on with it, do: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |   on Unix: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ ./config | 
					
						
							|  |  |  |     $ make | 
					
						
							|  |  |  |     $ make test | 
					
						
							|  |  |  |     $ make install | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   on OpenVMS: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ @config | 
					
						
							|  |  |  |     $ mms | 
					
						
							|  |  |  |     $ mms test | 
					
						
							|  |  |  |     $ mms install | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |   on Windows (only pick one of the targets for configuration): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ perl Configure { VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE } | 
					
						
							|  |  |  |     $ nmake | 
					
						
							|  |  |  |     $ nmake test | 
					
						
							| 
									
										
										
										
											2016-03-17 17:08:25 +08:00
										 |  |  |     $ nmake install | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |  If any of these steps fails, see section Installation in Detail below. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |  This will build and install OpenSSL in the default location, which is: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Unix:    normal installation directories under /usr/local | 
					
						
							|  |  |  |   OpenVMS: SYS$COMMON:[OPENSSL-'version'...], where 'version' is the | 
					
						
							| 
									
										
										
										
											2016-03-24 06:04:32 +08:00
										 |  |  |            OpenSSL version number with underscores instead of periods. | 
					
						
							|  |  |  |   Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  If you want to install it anywhere else, run config like this: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |   On Unix: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ ./config --prefix=/opt/openssl --openssldir=/usr/local/ssl | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   On OpenVMS: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $ @config --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL] | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  Configuration Options | 
					
						
							|  |  |  |  --------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-25 09:49:07 +08:00
										 |  |  |  There are several options to ./config (or ./Configure) to customize | 
					
						
							| 
									
										
										
										
											2016-03-17 17:08:25 +08:00
										 |  |  |  the build (note that for Windows, the defaults for --prefix and | 
					
						
							|  |  |  |  --openssldir depend in what configuration is used and what Windows | 
					
						
							|  |  |  |  implementation OpenSSL is built on.  More notes on this in NOTES.WIN): | 
					
						
							| 
									
										
										
										
											1999-03-31 20:38:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |   --api=x.y.z | 
					
						
							|  |  |  |                    Don't build with support for deprecated APIs below the | 
					
						
							|  |  |  |                    specified version number. For example "--api=1.1.0" will | 
					
						
							|  |  |  |                    remove support for all APIS that were deprecated in OpenSSL | 
					
						
							|  |  |  |                    version 1.1.0 or below. | 
					
						
							| 
									
										
										
										
											1999-04-25 06:59:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |   --cross-compile-prefix=PREFIX | 
					
						
							|  |  |  |                    The PREFIX to include in front of commands for your | 
					
						
							| 
									
										
										
										
											2016-07-15 19:11:52 +08:00
										 |  |  |                    toolchain. It's 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 together one-size-fits-all instructions. You might | 
					
						
							|  |  |  |                    have to pass more flags or set up environment variables | 
					
						
							|  |  |  |                    to actually make it work. Android and iOS cases are | 
					
						
							|  |  |  |                    discussed in corresponding Configurations/10-main.cf | 
					
						
							|  |  |  |                    sections. 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. Needless to mention that you have to | 
					
						
							|  |  |  |                    invoke ./Configure, not ./config, and pass your target | 
					
						
							|  |  |  |                    name explicitly. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   --debug | 
					
						
							|  |  |  |                    Build OpenSSL with debugging symbols. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   --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 this is "lib". Note that on Windows | 
					
						
							|  |  |  |                    only ".lib" files will be stored in this location. dll files | 
					
						
							|  |  |  |                    will always be installed to the "bin" directory. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   --openssldir=DIR | 
					
						
							|  |  |  |                    Directory for OpenSSL configuration files, and also the | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |                    default certificate and key store.  Defaults are: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 06:04:32 +08:00
										 |  |  |                    Unix:           /usr/local/ssl | 
					
						
							| 
									
										
										
										
											2016-03-17 17:08:25 +08:00
										 |  |  |                    Windows:        C:\Program Files\Common Files\SSL | 
					
						
							|  |  |  |                                 or C:\Program Files (x86)\Common Files\SSL | 
					
						
							| 
									
										
										
										
											2016-03-24 06:04:32 +08:00
										 |  |  |                    OpenVMS:        SYS$COMMON:[OPENSSL-COMMON] | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |   --prefix=DIR | 
					
						
							|  |  |  |                    The top of the installation directory tree.  Defaults are: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                    Unix:           /usr/local | 
					
						
							|  |  |  |                    Windows:        C:\Program Files\OpenSSL | 
					
						
							|  |  |  |                                 or C:\Program Files (x86)\OpenSSL | 
					
						
							|  |  |  |                    OpenVMS:        SYS$COMMON:[OPENSSL-'version'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   --release | 
					
						
							|  |  |  |                    Build OpenSSL without debugging symbols. This is the default. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   --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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   --with-zlib-include=DIR | 
					
						
							|  |  |  |                    The directory for the location of the zlib include file. This | 
					
						
							|  |  |  |                    option is only necessary if enable-zlib (see below) is used | 
					
						
							|  |  |  |                    and the include file is not already on the system include | 
					
						
							|  |  |  |                    path. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   --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 | 
					
						
							|  |  |  |                    zlib-dynamic option is not also used. If zlib-dynamic is used | 
					
						
							|  |  |  |                    then this flag is optional and a default value ("ZLIB1") is | 
					
						
							|  |  |  |                    used if not provided.  | 
					
						
							|  |  |  |                    On VMS: this is the filename of the zlib library (with or | 
					
						
							|  |  |  |                    without a path). 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. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-afalgeng | 
					
						
							|  |  |  |                    Don't build the AFALG engine. This option will be forced if | 
					
						
							|  |  |  |                    on a platform that does not support AFALG. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |   enable-asan | 
					
						
							| 
									
										
										
										
											2016-06-20 01:39:01 +08:00
										 |  |  |                    Build with the Address sanitiser. This is a developer option | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |                    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 option. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-asm | 
					
						
							| 
									
										
										
										
											2016-04-14 04:01:28 +08:00
										 |  |  |                    Do not use assembler code. On some platforms a small amount | 
					
						
							|  |  |  |                    of assembler code may still be used. | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   no-async | 
					
						
							|  |  |  |                    Do not build support for async operations. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-autoalginit | 
					
						
							|  |  |  |                    Don't automatically load all supported ciphers and digests. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |                    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 have to | 
					
						
							|  |  |  |                    be loaded manually using EVP_add_cipher() and | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |                    EVP_add_digest() if this option is used. This option will | 
					
						
							|  |  |  |                    force a non-shared build. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-autoerrinit | 
					
						
							|  |  |  |                    Don't automatically load all libcrypto/libssl error strings. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |                    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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-capieng | 
					
						
							|  |  |  |                    Don't build the CAPI engine. This option will be forced if | 
					
						
							|  |  |  |                    on a platform that does not support CAPI. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-cms | 
					
						
							|  |  |  |                    Don't build support for CMS features | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-comp | 
					
						
							|  |  |  |                    Don't build support for SSL/TLS compression. If this option | 
					
						
							|  |  |  |                    is left enabled (the default), then compression will only | 
					
						
							|  |  |  |                    work if the zlib or zlib-dynamic options are also chosen. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   enable-crypto-mdebug | 
					
						
							|  |  |  |                    Build support for debugging memory allocated via | 
					
						
							|  |  |  |                    OPENSSL_malloc() or OPENSSL_zalloc(). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-crypto-mdebug-backtrace | 
					
						
							|  |  |  |                    As for crypto-mdebug, but additionally provide backtrace | 
					
						
							|  |  |  |                    information for allocated memory. | 
					
						
							| 
									
										
										
										
											2016-06-02 18:14:52 +08:00
										 |  |  |                    TO BE USED WITH CARE: this uses GNU C functionality, and | 
					
						
							|  |  |  |                    is therefore not usable for non-GNU config targets.  If | 
					
						
							|  |  |  |                    your build complains about the use of '-rdynamic' or the | 
					
						
							|  |  |  |                    lack of header file execinfo.h, this option is not for you. | 
					
						
							|  |  |  |                    ALSO NOTE that even though execinfo.h is available on your | 
					
						
							|  |  |  |                    system (through Gnulib), the functions might just be stubs | 
					
						
							|  |  |  |                    that do nothing. | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   no-ct | 
					
						
							|  |  |  |                    Don't build support for Certificate Transparency. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-deprecated | 
					
						
							|  |  |  |                    Don't build with support for any deprecated APIs. This is the | 
					
						
							|  |  |  |                    same as using "--api" and supplying the latest version | 
					
						
							|  |  |  |                    number. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-dgram | 
					
						
							|  |  |  |                    Don't build support for datagram based BIOs. Selecting this | 
					
						
							|  |  |  |                    option will also force the disabling of DTLS. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-dso | 
					
						
							|  |  |  |                    Don't build support for loading Dynamic Shared Objects. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-dynamic-engine | 
					
						
							|  |  |  |                    Don't build the dynamically loaded engines. This only has an | 
					
						
							|  |  |  |                    effect in a "shared" build | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-ec | 
					
						
							|  |  |  |                    Don't build support for Elliptic Curves. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-ec2m | 
					
						
							|  |  |  |                    Don't build support for binary Elliptic Curves | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-ec_nistp_64_gcc_128 | 
					
						
							|  |  |  |                    Enable support for optimised implementations of some commonly | 
					
						
							|  |  |  |                    used NIST elliptic curves. This is only supported on some | 
					
						
							|  |  |  |                    platforms. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-egd | 
					
						
							|  |  |  |                    Build support for gathering entropy from EGD (Entropy | 
					
						
							|  |  |  |                    Gathering Daemon). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-engine | 
					
						
							|  |  |  |                    Don't build support for loading engines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-err | 
					
						
							|  |  |  |                    Don't compile in any error strings. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-12 23:21:13 +08:00
										 |  |  |   enable-external-tests | 
					
						
							|  |  |  |                    Enable building of integration with external test suites. | 
					
						
							|  |  |  |                    This is a developer option and may not work on all platforms. | 
					
						
							|  |  |  |                    The only supported external test suite at the current time is | 
					
						
							| 
									
										
										
										
											2016-10-15 18:09:20 +08:00
										 |  |  |                    the BoringSSL test suite. See the file test/README.external | 
					
						
							|  |  |  |                    for further details. | 
					
						
							| 
									
										
										
										
											2016-10-12 23:21:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-filenames | 
					
						
							|  |  |  |                    Don't compile in filename and line number information (e.g. | 
					
						
							|  |  |  |                    for errors and memory allocation). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-02 04:46:08 +08:00
										 |  |  |   enable-fuzz-libfuzzer, enable-fuzz-afl | 
					
						
							|  |  |  |                    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 for further details. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-gost | 
					
						
							|  |  |  |                    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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-hw-padlock | 
					
						
							|  |  |  |                    Don't build the padlock engine. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-makedepend | 
					
						
							| 
									
										
										
										
											2016-04-14 04:01:28 +08:00
										 |  |  |                    Don't generate dependencies. | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   no-multiblock | 
					
						
							|  |  |  |                    Don't build support for writing multiple records in one | 
					
						
							|  |  |  |                    go in libssl (Note: this is a different capability to the | 
					
						
							|  |  |  |                    pipelining functionality). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-nextprotoneg | 
					
						
							|  |  |  |                    Don't build support for the NPN TLS extension. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-ocsp | 
					
						
							|  |  |  |                    Don't build support for OCSP. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-pic | 
					
						
							|  |  |  |                    Don't build with support for Position Independent Code. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-posix-io | 
					
						
							|  |  |  |                    Don't use POSIX IO capabilities. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-psk | 
					
						
							|  |  |  |                    Don't build support for Pre-Shared Key based ciphersuites. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-rdrand | 
					
						
							|  |  |  |                    Don't use hardware RDRAND capabilities. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-rfc3779 | 
					
						
							|  |  |  |                    Don't build support for RFC3779 ("X.509 Extensions for IP | 
					
						
							|  |  |  |                    Addresses and AS Identifiers") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   sctp | 
					
						
							|  |  |  |                    Build support for SCTP | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-14 21:16:52 +08:00
										 |  |  |   no-shared | 
					
						
							|  |  |  |                    Do not create shared libraries, only static ones.  See "Note | 
					
						
							|  |  |  |                    on shared libraries" below. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-sock | 
					
						
							|  |  |  |                    Don't build support for socket BIOs | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-srp | 
					
						
							|  |  |  |                    Don't build support for SRP or SRP based ciphersuites. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-srtp | 
					
						
							|  |  |  |                    Don't build SRTP support | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-sse2 | 
					
						
							| 
									
										
										
										
											2016-11-21 04:52:41 +08:00
										 |  |  |                    Exclude SSE2 code paths from 32-bit x86 assembly modules. | 
					
						
							|  |  |  |                    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. | 
					
						
							|  |  |  |                    FreeBSD kernel can  be compiled with CPU_ENABLE_SSE, and | 
					
						
							|  |  |  |                    there is a way to disengage SSE2 code paths upon application | 
					
						
							|  |  |  |                    start-up, but if you aim for wider "audience" running | 
					
						
							|  |  |  |                    such kernel, consider no-sse2. Both the 386 and | 
					
						
							|  |  |  |                    no-asm options imply no-sse2. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   enable-ssl-trace | 
					
						
							|  |  |  |                    Build with the SSL Trace capabilities (adds the "-trace" | 
					
						
							|  |  |  |                    option to s_client and s_server). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-static-engine | 
					
						
							|  |  |  |                    Don't build the statically linked engines. This only | 
					
						
							|  |  |  |                    has an impact when not built "shared". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-stdio | 
					
						
							|  |  |  |                    Don't use any C "stdio" features. 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 12:02:50 +08:00
										 |  |  |   no-tests | 
					
						
							|  |  |  |                    Don't build test programs or run any test. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-threads | 
					
						
							|  |  |  |                    Don't try to build with support for multi-threaded | 
					
						
							|  |  |  |                    applications. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   threads | 
					
						
							|  |  |  |                    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! See "Note on | 
					
						
							|  |  |  |                    multi-threading" below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-ts | 
					
						
							|  |  |  |                    Don't build Time Stamping Authority support. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |   enable-ubsan | 
					
						
							| 
									
										
										
										
											2016-06-20 01:39:01 +08:00
										 |  |  |                    Build with the Undefined Behaviour sanitiser. This is a | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |                    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 "-DPEDANTIC" option (or the | 
					
						
							|  |  |  |                    --strict-warnings option). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-ui | 
					
						
							|  |  |  |                    Don't build with the "UI" capability (i.e. the set of | 
					
						
							|  |  |  |                    features enabling text based prompts). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-unit-test | 
					
						
							|  |  |  |                    Enable additional unit test APIs. This should not typically | 
					
						
							|  |  |  |                    be used in production deployments. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-weak-ssl-ciphers | 
					
						
							|  |  |  |                    Build support for SSL/TLS ciphers that are considered "weak" | 
					
						
							|  |  |  |                    (e.g. RC4 based ciphersuites). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   zlib | 
					
						
							|  |  |  |                    Build with support for zlib compression/decompression. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   zlib-dynamic | 
					
						
							|  |  |  |                    Like "zlib", but has OpenSSL load the zlib library | 
					
						
							|  |  |  |                    dynamically when needed.  This is only supported on systems | 
					
						
							|  |  |  |                    where loading of shared libraries is supported. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   386 | 
					
						
							| 
									
										
										
										
											2016-11-21 04:52:41 +08:00
										 |  |  |                    In 32-bit x86 builds, when generating assembly modules, | 
					
						
							|  |  |  |                    use the 80386 instruction set only (the default x86 code | 
					
						
							|  |  |  |                    is more efficient, but requires at least a 486). Note: | 
					
						
							|  |  |  |                    This doesn't affect code generated by compiler, you're | 
					
						
							|  |  |  |                    likely to complement configuration command line with | 
					
						
							|  |  |  |                    suitable compiler-specific option. | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 16:38:52 +08:00
										 |  |  |   enable-tls1_3 | 
					
						
							|  |  |  |                    TODO(TLS1.3): Make this enabled by default | 
					
						
							|  |  |  |                    Build support for TLS1.3. Note: This is a WIP feature and | 
					
						
							|  |  |  |                    does not currently interoperate with other TLS1.3 | 
					
						
							|  |  |  |                    implementations! Use with caution!! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  |   no-<prot> | 
					
						
							|  |  |  |                    Don't build support for negotiating the specified SSL/TLS | 
					
						
							|  |  |  |                    protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2, dtls, | 
					
						
							|  |  |  |                    dtls1 or dtls1_2). If "no-tls" is selected then all of tls1, | 
					
						
							|  |  |  |                    tls1_1 and tls1_2 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. | 
					
						
							|  |  |  |                    OpenSSL will still provide the methods for applications to | 
					
						
							|  |  |  |                    explicitly select the individual protocol versions. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   no-<prot>-method | 
					
						
							|  |  |  |                    As for no-<prot> but in addition do not build the methods for | 
					
						
							|  |  |  |                    applications to explicitly select individual protocol | 
					
						
							|  |  |  |                    versions. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enable-<alg> | 
					
						
							|  |  |  |                    Build with support for the specified algorithm, where <alg> | 
					
						
							| 
									
										
										
										
											2016-11-01 22:28:16 +08:00
										 |  |  |                    is one of: md2 or rc5. | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   no-<alg> | 
					
						
							|  |  |  |                    Build without support for the specified algorithm, where | 
					
						
							|  |  |  |                    <alg> is one of: bf, blake2, camellia, cast, chacha, cmac, | 
					
						
							| 
									
										
										
										
											2016-11-01 22:28:16 +08:00
										 |  |  |                    des, dh, dsa, ecdh, ecdsa, idea, md4, mdc2, ocb, poly1305, | 
					
						
							| 
									
										
										
										
											2017-01-12 05:38:44 +08:00
										 |  |  |                    rc2, rc4, rmd160, scrypt, seed, siphash or whirlpool. The | 
					
						
							|  |  |  |                    "ripemd" algorithm is deprecated and if used is synonymous | 
					
						
							|  |  |  |                    with rmd160. | 
					
						
							| 
									
										
										
										
											2016-04-13 22:04:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   -Dxxx, -lxxx, -Lxxx, -fxxx, -mXXX, -Kxxx | 
					
						
							|  |  |  |                    These system specific options will be passed through to the | 
					
						
							|  |  |  |                    compiler to allow you to define preprocessor symbols, specify | 
					
						
							|  |  |  |                    additional libraries, library directories or other compiler | 
					
						
							| 
									
										
										
										
											2016-11-21 04:52:41 +08:00
										 |  |  |                    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. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |  Installation in Detail | 
					
						
							|  |  |  |  ---------------------- | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |  1a. Configure OpenSSL for your operation system automatically: | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |      NOTE: This is not available on Windows. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ ./config [[ options ]]                         # Unix | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |        or | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ @config [[ options ]]                          ! OpenVMS | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +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. | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |      This guesses at your operating system (and compiler, if necessary) and | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  |      configures OpenSSL based on this guess. Run ./config -t to see | 
					
						
							| 
									
										
										
										
											2000-02-27 06:06:02 +08:00
										 |  |  |      if it guessed correctly. If you want to use a different compiler, you | 
					
						
							|  |  |  |      are cross-compiling for another platform, or the ./config guess was | 
					
						
							|  |  |  |      wrong for other reasons, go to step 1b. Otherwise go to step 2. | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  |      On some systems, you can include debugging information as follows: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ ./config -d [[ options ]] | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-01-02 23:53:22 +08:00
										 |  |  |  1b. Configure OpenSSL for your operating system manually | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |      OpenSSL knows about a range of different operating system, hardware and | 
					
						
							|  |  |  |      compiler combinations. To see the ones it knows about, run | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ ./Configure                                    # Unix | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        or | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        $ perl Configure                                 # All other platforms | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      For the remainder of this text, the Unix form will be used in all | 
					
						
							|  |  |  |      examples, please use the appropriate form for your platform. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |      Pick a suitable name from the list that matches your system. For most | 
					
						
							|  |  |  |      operating systems there is a choice between using "cc" or "gcc".  When | 
					
						
							|  |  |  |      you have identified your system (and if necessary compiler) use this name | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      as the argument to Configure. For example, a "linux-elf" user would | 
					
						
							| 
									
										
										
										
											1999-03-22 23:36:37 +08:00
										 |  |  |      run: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ ./Configure linux-elf [[ options ]] | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 20:53:07 +08:00
										 |  |  |      If your system isn't listed, you will have to create a configuration | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |      file named Configurations/{{ something }}.conf and add the correct | 
					
						
							| 
									
										
										
										
											2016-03-08 20:53:07 +08:00
										 |  |  |      configuration for your system. See the available configs as examples | 
					
						
							|  |  |  |      and read Configurations/README and Configurations/README.design for | 
					
						
							|  |  |  |      more information. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 20:53:07 +08:00
										 |  |  |      The generic configurations "cc" or "gcc" should usually work on 32 bit | 
					
						
							|  |  |  |      Unix-like systems. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +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/opensslconf.h (generated from | 
					
						
							|  |  |  |      include/openssl/opensslconf.h.in). | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |  1c. Configure OpenSSL for building outside of the source tree. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      OpenSSL can be configured to build in a build directory separate from | 
					
						
							|  |  |  |      the directory with the source code.  It's done by placing yourself in | 
					
						
							|  |  |  |      some other directory and invoking the configuration commands from | 
					
						
							|  |  |  |      there. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      Unix example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        $ mkdir /var/tmp/openssl-build | 
					
						
							|  |  |  |        $ cd /var/tmp/openssl-build | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ /PATH/TO/OPENSSL/SOURCE/config [[ options ]] | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |        or | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ /PATH/TO/OPENSSL/SOURCE/Configure {{ target }} [[ options ]] | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |      OpenVMS example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        $ set default sys$login: | 
					
						
							|  |  |  |        $ create/dir [.tmp.openssl-build] | 
					
						
							|  |  |  |        $ set default [.tmp.openssl-build] | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ @[PATH.TO.OPENSSL.SOURCE]config [[ options ]] | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |        or | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ @[PATH.TO.OPENSSL.SOURCE]Configure {{ target }} [[ options ]] | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |      Windows example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        $ C: | 
					
						
							|  |  |  |        $ mkdir \temp-openssl | 
					
						
							|  |  |  |        $ cd \temp-openssl | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |        $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure {{ target }} [[ options ]] | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      Paths can be relative just as well as absolute.  Configure will | 
					
						
							|  |  |  |      do its best to translate them to relative paths whenever possible. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-25 06:59:36 +08:00
										 |  |  |   2. Build OpenSSL by running: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make                                           # Unix | 
					
						
							|  |  |  |        $ mms                                            ! (or mmk) OpenVMS | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |        $ nmake                                          # Windows | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      This will build the OpenSSL libraries (libcrypto.a and libssl.a on | 
					
						
							|  |  |  |      Unix, corresponding on other platforms) and the OpenSSL binary | 
					
						
							|  |  |  |      ("openssl"). The libraries will be built in the top-level directory, | 
					
						
							|  |  |  |      and the binary will be in the "apps" subdirectory. | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-04 22:27:47 +08:00
										 |  |  |      If the build fails, look at the output.  There may be reasons | 
					
						
							|  |  |  |      for the failure that aren't problems in OpenSSL itself (like | 
					
						
							|  |  |  |      missing standard headers).  If you are having problems you can | 
					
						
							|  |  |  |      get help by sending an email to the openssl-users email list (see | 
					
						
							|  |  |  |      https://www.openssl.org/community/mailinglists.html for details). If | 
					
						
							|  |  |  |      it is a bug with OpenSSL itself, please open an issue on GitHub, at | 
					
						
							|  |  |  |      https://github.com/openssl/openssl/issues. Please review the existing | 
					
						
							|  |  |  |      ones first; maybe the bug was already reported or has already been | 
					
						
							| 
									
										
										
										
											2016-03-10 19:05:47 +08:00
										 |  |  |      fixed. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  |      (If you encounter assembler error messages, try the "no-asm" | 
					
						
							|  |  |  |      configuration option as an immediate fix.) | 
					
						
							| 
									
										
										
										
											1999-05-29 07:18:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-05 05:31:15 +08:00
										 |  |  |      Compiling parts of OpenSSL with gcc and others with the system | 
					
						
							|  |  |  |      compiler will result in unresolved symbols on some systems. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-25 06:59:36 +08:00
										 |  |  |   3. After a successful build, the libraries should be tested. Run: | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make test                                      # Unix | 
					
						
							|  |  |  |        $ mms test                                       ! OpenVMS | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |        $ nmake test                                     # Windows | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 02:44:11 +08:00
										 |  |  |      NOTE: you MUST run the tests from an unprivileged account (or | 
					
						
							| 
									
										
										
										
											2016-06-20 01:39:01 +08:00
										 |  |  |      disable your privileges temporarily if your platform allows it). | 
					
						
							| 
									
										
										
										
											2016-06-03 02:44:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  |      If some tests fail, look at the output.  There may be reasons for | 
					
						
							|  |  |  |      the failure that isn't a problem in OpenSSL itself (like a | 
					
						
							|  |  |  |      malfunction with Perl).  You may want increased verbosity, that | 
					
						
							|  |  |  |      can be accomplished like this: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-08 20:09:56 +08:00
										 |  |  |        $ make VERBOSE=1 test                            # Unix | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-08 22:57:55 +08:00
										 |  |  |        $ mms /macro=(VERBOSE=1) test                    ! OpenVMS | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-08 20:09:56 +08:00
										 |  |  |        $ nmake VERBOSE=1 test                           # Windows | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  |      If you want to run just one or a few specific tests, you can use | 
					
						
							|  |  |  |      the make variable TESTS to specify them, like this: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make TESTS='test_rsa test_dsa' test            # Unix | 
					
						
							|  |  |  |        $ mms/macro="TESTS=test_rsa test_dsa" test       ! OpenVMS | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |        $ nmake TESTS='test_rsa test_dsa' test           # Windows | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      And of course, you can combine (Unix example shown): | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  |         | 
					
						
							| 
									
										
										
										
											2016-05-08 20:09:56 +08:00
										 |  |  |        $ make VERBOSE=1 TESTS='test_rsa test_dsa' test | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |      You can find the list of available tests like this: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make list-tests                                # Unix | 
					
						
							| 
									
										
										
										
											2016-03-08 20:53:07 +08:00
										 |  |  |        $ mms list-tests                                 ! OpenVMS | 
					
						
							| 
									
										
										
										
											2016-03-08 21:44:46 +08:00
										 |  |  |        $ nmake list-tests                               # Windows | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-13 01:33:34 +08:00
										 |  |  |      Have a look at the manual for the perl module Test::Harness to | 
					
						
							|  |  |  |      see what other HARNESS_* variables there are. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  |      If you find a problem with OpenSSL itself, try removing any | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      compiler optimization flags from the CFLAGS line in Makefile and | 
					
						
							|  |  |  |      run "make clean; make" or corresponding. | 
					
						
							| 
									
										
										
										
											2015-09-15 20:07:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |      Please send bug reports to <rt@openssl.org>. | 
					
						
							| 
									
										
										
										
											1999-05-01 02:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  |      For more details on how the make variables TESTS can be used, | 
					
						
							|  |  |  |      see section TESTS in Detail below. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-25 06:59:36 +08:00
										 |  |  |   4. If everything tests ok, install OpenSSL with | 
					
						
							| 
									
										
										
										
											1999-01-01 22:04:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make install                                   # Unix | 
					
						
							|  |  |  |        $ mms install                                    ! OpenVMS | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |        $ nmake install                                  # Windows | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |      This will install all the software components in this directory | 
					
						
							|  |  |  |      tree under PREFIX (the directory given with --prefix or its | 
					
						
							|  |  |  |      default): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Unix: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |          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. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |          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 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |                         Contains the HTML rendition of the man-pages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        OpenVMS ('arch' is replaced with the architecture name, "Alpha" | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:16 +08:00
										 |  |  |        or "ia64", 'sover' is replaced with the shared library version | 
					
						
							|  |  |  |        (0101 for 1.1), and 'pz' is replaced with the pointer size | 
					
						
							|  |  |  |        OpenSSL was built with): | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:16 +08:00
										 |  |  |          [.EXE.'arch']  Contains the openssl binary. | 
					
						
							|  |  |  |          [.EXE]         Contains a few utility scripts. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |          [.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. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:16 +08:00
										 |  |  |          [.ENGINES'sover''pz'.'arch'] | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |                         Contains the OpenSSL dynamically loadable engines. | 
					
						
							|  |  |  |          [.SYS$STARTUP] Contains startup, login and shutdown scripts. | 
					
						
							|  |  |  |                         These define appropriate logical names and | 
					
						
							|  |  |  |                         command symbols. | 
					
						
							| 
									
										
										
										
											2016-08-03 13:55:16 +08:00
										 |  |  |          [.SYSTEST]     Contains the installation verification procedure. | 
					
						
							|  |  |  |          [.HTML]        Contains the HTML rendition of the manual pages. | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +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. | 
					
						
							| 
									
										
										
										
											2006-04-12 05:09:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-30 05:52:08 +08:00
										 |  |  |      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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |        $ make DESTDIR=/tmp/package-root install         # Unix | 
					
						
							|  |  |  |        $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS | 
					
						
							| 
									
										
										
										
											1999-04-30 05:52:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-13 04:14:03 +08:00
										 |  |  |      The specified destination directory will be prepended to all | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      installation target paths. | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |   Compatibility issues with previous OpenSSL versions: | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   *  COMPILING existing applications | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |      OpenSSL 1.1.0 hides a number of structures that were previously | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      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. | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      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. | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 07:04:27 +08:00
										 |  |  |      Some APIs have changed as well.  However, older APIs have been | 
					
						
							|  |  |  |      preserved when possible. | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |  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 | 
					
						
							|  |  |  |  config or Configure. Not all environment variables are relevant to all | 
					
						
							|  |  |  |  platforms. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  AR | 
					
						
							|  |  |  |                 The name of the ar executable to use. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 03:18:52 +08:00
										 |  |  |  BUILDFILE | 
					
						
							|  |  |  |                 Use a different build file name than the platform default | 
					
						
							|  |  |  |                 ("Makefile" on Unixly 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |  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 | 
					
						
							|  |  |  |                 to use, e.g. "gcc" or "clang". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  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 | 
					
						
							| 
									
										
										
										
											2016-09-01 03:17:33 +08:00
										 |  |  |                 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 | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |                 file Configurations/README for further information about the | 
					
						
							| 
									
										
										
										
											2016-09-01 03:17:33 +08:00
										 |  |  |                 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 | 
					
						
							| 
									
										
										
										
											2016-09-01 06:06:22 +08:00
										 |  |  |                 and will be considered by Configure before it looks in the | 
					
						
							|  |  |  |                 standard directories. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  PERL | 
					
						
							| 
									
										
										
										
											2016-07-02 22:39:15 +08:00
										 |  |  |                 The name of the Perl executable to use when building OpenSSL. | 
					
						
							| 
									
										
										
										
											2016-09-10 05:45:57 +08:00
										 |  |  |                 This variable is used in config script only. Configure on the | 
					
						
							|  |  |  |                 other hand imposes the interpreter by which it itself was | 
					
						
							|  |  |  |                 executed on the whole build procedure. | 
					
						
							| 
									
										
										
										
											2016-07-02 22:39:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  HASHBANGPERL | 
					
						
							|  |  |  |                 The command string for the Perl executable to insert in the | 
					
						
							|  |  |  |                 #! line of perl scripts that will be publically 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. | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  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 | 
					
						
							|  |  |  |  ---------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  The Configure script generates a Makefile in a format relevant to the specific | 
					
						
							|  |  |  |  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 default target to build all the software 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 in 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  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). | 
					
						
							| 
									
										
										
										
											1999-04-25 01:41:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-02 00:48:19 +08:00
										 |  |  |  TESTS in Detail | 
					
						
							|  |  |  |  --------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  The make variable TESTS supports a versatile set of space separated tokens | 
					
						
							|  |  |  |  with which you can specify a set of tests to be performed.  With a "current | 
					
						
							|  |  |  |  set of tests" in mind, initially being empty, here are the possible tokens: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  alltests       The current set of tests becomes the whole set of available | 
					
						
							|  |  |  |                 tests (as listed when you do 'make list-tests' or similar). | 
					
						
							|  |  |  |  xxx            Adds the test 'xxx' to the current set of tests. | 
					
						
							|  |  |  |  -xxx           Removes 'xxx' from the current set of tests.  If this is the | 
					
						
							|  |  |  |                 first token in the list, the current set of tests is first | 
					
						
							|  |  |  |                 assigned the whole set of available tests, effectively making | 
					
						
							|  |  |  |                 this token equivalent to TESTS="alltests -xxx" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Also, all tokens except for "alltests" may have wildcards, such as *. | 
					
						
							|  |  |  |  (on Unix and Windows, BSD style wildcards are supported, while on VMS, | 
					
						
							|  |  |  |  it's VMS style wildcards) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Example: All tests except for the fuzz tests: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  $ make TESTS=-test_fuzz test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  or (if you want to be explicit) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  $ make TESTS='alltests -test_fuzz' test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Example: All tests that have a name starting with "test_ssl" but not those | 
					
						
							|  |  |  |  starting with "test_ssl_": | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  $ make TESTS='test_ssl* -test_ssl_*' test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-30 00:10:09 +08:00
										 |  |  |  Note on multi-threading | 
					
						
							|  |  |  |  ----------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  For some systems, the OpenSSL Configure script knows what compiler options | 
					
						
							|  |  |  |  are needed to generate a library that is suitable for multi-threaded | 
					
						
							|  |  |  |  applications.  On these systems, support for multi-threading is enabled | 
					
						
							|  |  |  |  by default; use the "no-threads" option to disable (this should never be | 
					
						
							|  |  |  |  necessary). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  On other systems, to enable support for multi-threading, you will have | 
					
						
							| 
									
										
										
										
											1999-05-20 02:39:23 +08:00
										 |  |  |  to specify at least two options: "threads", and a system-dependent option. | 
					
						
							| 
									
										
										
										
											1999-04-30 00:10:09 +08:00
										 |  |  |  (The latter is "-D_REENTRANT" on various systems.)  The default in this | 
					
						
							|  |  |  |  case, obviously, is not to include support for multi-threading (but | 
					
						
							|  |  |  |  you can still use "no-threads" to suppress an annoying warning message | 
					
						
							|  |  |  |  from the Configure script.) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-09 21:12:34 +08:00
										 |  |  |  OpenSSL provides built-in support for two threading models: pthreads (found on | 
					
						
							| 
									
										
										
										
											2016-02-09 18:17:59 +08:00
										 |  |  |  most UNIX/Linux systems), and Windows threads. No other threading models are | 
					
						
							|  |  |  |  supported. If your platform does not provide pthreads or Windows threads then | 
					
						
							|  |  |  |  you should Configure with the "no-threads" option. | 
					
						
							| 
									
										
										
										
											2000-08-02 12:19:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-22 06:49:27 +08:00
										 |  |  |  Notes on shared libraries | 
					
						
							|  |  |  |  ------------------------- | 
					
						
							| 
									
										
										
										
											2000-08-02 12:19:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-14 21:16:52 +08:00
										 |  |  |  For most systems the OpenSSL Configure script knows what is needed to | 
					
						
							|  |  |  |  build shared libraries for libcrypto and libssl. On these systems | 
					
						
							|  |  |  |  the shared libraries will be created by default. This can be suppressed and | 
					
						
							|  |  |  |  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" | 
					
						
							|  |  |  |  option will be forced and only static libraries will be created. | 
					
						
							| 
									
										
										
										
											2002-11-11 16:33:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-22 06:49:27 +08:00
										 |  |  |  Shared libraries are named a little differently on different platforms. | 
					
						
							|  |  |  |  One way or another, they all have the major OpenSSL version number as | 
					
						
							|  |  |  |  part of the file name, i.e. for OpenSSL 1.1.x, 1.1 is somehow part of | 
					
						
							|  |  |  |  the name. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  On most POSIXly platforms, shared libraries are named libcrypto.so.1.1 | 
					
						
							|  |  |  |  and libssl.so.1.1. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  On Windows build with MSVC or using MingW, shared libraries are named | 
					
						
							|  |  |  |  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 | 
					
						
							| 
									
										
										
										
											2016-11-08 17:17:20 +08:00
										 |  |  |  libcrypto.dll.a and libssl.dll.a. | 
					
						
							| 
									
										
										
										
											2016-10-22 06:49:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  On VMS, shareable images (VMS speak for shared libraries) are named | 
					
						
							|  |  |  |  ossl$libcrypto0101_shr.exe and ossl$libssl0101_shr.exe.  However, when | 
					
						
							|  |  |  |  OpenSSL is specifically built for 32-bit pointers, the shareable images | 
					
						
							|  |  |  |  are named ossl$libcrypto0101_shr32.exe and ossl$libssl0101_shr32.exe | 
					
						
							|  |  |  |  instead, and when built for 64-bit pointers, they are named | 
					
						
							|  |  |  |  ossl$libcrypto0101_shr64.exe and ossl$libssl0101_shr64.exe. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-11 16:33:10 +08:00
										 |  |  |  Note on random number generation | 
					
						
							|  |  |  |  -------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Availability of cryptographically secure random numbers is required for | 
					
						
							|  |  |  |  secret key generation. OpenSSL provides several options to seed the | 
					
						
							|  |  |  |  internal PRNG. If not properly seeded, the internal PRNG will refuse | 
					
						
							|  |  |  |  to deliver random bytes and a "PRNG not seeded error" will occur. | 
					
						
							|  |  |  |  On systems without /dev/urandom (or similar) device, it may be necessary | 
					
						
							| 
									
										
										
										
											2016-06-03 03:18:33 +08:00
										 |  |  |  to install additional support software to obtain a random seed. | 
					
						
							| 
									
										
										
										
											2002-11-11 16:33:10 +08:00
										 |  |  |  Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(), | 
					
						
							|  |  |  |  and the FAQ for more information. | 
					
						
							| 
									
										
										
										
											2003-01-10 18:56:14 +08:00
										 |  |  | 
 |