Skip to content
CHANGES 547 KiB
Newer Older
 OpenSSL CHANGES
 This is a high-level summary of the most important changes.
 For a full list of changes, see the git commit log; for example,
 https://github.com/openssl/openssl/commits/ and pick the appropriate
 release branch.

 Changes between 1.1.0g and 1.1.1 [xx XXX xxxx]
  *) Added new public header file <openssl/rand_drbg.h> and documentation
     for the RAND_DRBG API. See manual page RAND_DRBG(7) for an overview.
     [Matthias St. Pierre]

Rich Salz's avatar
Rich Salz committed
  *) QNX support removed (cannot find contributors to get their approval
     for the license change).
     [Rich Salz]

  *) TLSv1.3 replay protection for early data has been implemented. See the
     SSL_read_early_data() man page for further details.
     [Matt Caswell]

  *) Separated TLSv1.3 ciphersuite configuration out from TLSv1.2 ciphersuite
     configuration. TLSv1.3 ciphersuites are not compatible with TLSv1.2 and
     below. Similarly TLSv1.2 ciphersuites are not compatible with TLSv1.3.
     In order to avoid issues where legacy TLSv1.2 ciphersuite configuration
     would otherwise inadvertently disable all TLSv1.3 ciphersuites the
     configuraton has been separated out. See the ciphers man page or the
     SSL_CTX_set_ciphersuites() man page for more information.
     [Matt Caswell]

  *) On POSIX (BSD, Linux, ...) systems the ocsp(1) command running
     in responder mode now supports the new "-multi" option, which
     spawns the specified number of child processes to handle OCSP
     requests.  The "-timeout" option now also limits the OCSP
     responder's patience to wait to receive the full client request
     on a newly accepted connection. Child processes are respawned
     as needed, and the CA index file is automatically reloaded
     when changed.  This makes it possible to run the "ocsp" responder
     as a long-running service, making the OpenSSL CA somewhat more
     feature-complete.  In this mode, most diagnostic messages logged
     after entering the event loop are logged via syslog(3) rather than
     written to stderr.
     [Viktor Dukhovni]

  *) Added support for X448 and Ed448. Heavily based on original work by
     Mike Hamburg.
     [Matt Caswell]

Richard Levitte's avatar
Richard Levitte committed
  *) Extend OSSL_STORE with capabilities to search and to narrow the set of
     objects loaded.  This adds the functions OSSL_STORE_expect() and
     OSSL_STORE_find() as well as needed tools to construct searches and
     get the search data out of them.
     [Richard Levitte]

Matt Caswell's avatar
Matt Caswell committed
  *) Support for TLSv1.3 added. Note that users upgrading from an earlier
     version of OpenSSL should review their configuration settings to ensure
     that they are still appropriate for TLSv1.3. For further information see:
     https://www.openssl.org/blog/blog/2018/02/08/tlsv1.3/
Matt Caswell's avatar
Matt Caswell committed

     NOTE: In this pre-release of OpenSSL a draft version of the
     TLSv1.3 standard has been implemented. Implementations of different draft
     versions of the standard do not inter-operate, and this version will not
     inter-operate with an implementation of the final standard when it is
     eventually published. Different pre-release versions may implement
     different versions of the draft. The final version of OpenSSL 1.1.1 will
     implement the final version of the standard.
     TODO(TLS1.3): Remove the above note before final release
     [Matt Caswell]

  *) Grand redesign of the OpenSSL random generator

     The default RAND method now utilizes an AES-CTR DRBG according to
     NIST standard SP 800-90Ar1. The new random generator is essentially
     a port of the default random generator from the OpenSSL FIPS 2.0
     object module. It is a hybrid deterministic random bit generator
     using an AES-CTR bit stream and which seeds and reseeds itself
     automatically using trusted system entropy sources.

     Some of its new features are:
      o Support for multiple DRBG instances with seed chaining.
      o Add a public DRBG instance for the default RAND method.
      o Add a dedicated DRBG instance for generating long term private keys.
      o Make the DRBG instances fork-safe.
      o Keep all global DRBG instances on the secure heap if it is enabled.
      o Add a DRBG instance to every SSL instance for lock free operation
        and to increase unpredictability.
     [Paul Dale, Benjamin Kaduk, Kurt Roeckx, Rich Salz, Matthias St. Pierre]

  *) Changed Configure so it only says what it does and doesn't dump
     so much data.  Instead, ./configdata.pm should be used as a script
     to display all sorts of configuration data.
     [Richard Levitte]

  *) Added processing of "make variables" to Configure.
     [Richard Levitte]

Pauli's avatar
Pauli committed
  *) Added SHA512/224 and SHA512/256 algorithm support.
     [Paul Dale]

  *) The last traces of Netware support, first removed in 1.1.0, have
     now been removed.
     [Rich Salz]

  *) Get rid of Makefile.shared, and in the process, make the processing
     of certain files (rc.obj, or the .def/.map/.opt files produced from
     the ordinal files) more visible and hopefully easier to trace and
     debug (or make silent).
     [Richard Levitte]

  *) Make it possible to have environment variable assignments as
     arguments to config / Configure.
     [Richard Levitte]

  *) Add multi-prime RSA (RFC 8017) support.
     [Paul Yang]

Jack Lloyd's avatar
Jack Lloyd committed
  *) Add SM3 implemented according to GB/T 32905-2016
     [ Jack Lloyd <jack.lloyd@ribose.com>,
       Ronald Tse <ronald.tse@ribose.com>,
       Erick Borsboom <erick.borsboom@ribose.com> ]

  *) Add 'Maximum Fragment Length' TLS extension negotiation and support
     as documented in RFC6066.
     Based on a patch from Tomasz Moń
     [Filipe Raimundo da Silva]

  *) Add SM4 implemented according to GB/T 32907-2016.
     [ Jack Lloyd <jack.lloyd@ribose.com>,
       Ronald Tse <ronald.tse@ribose.com>,
       Erick Borsboom <erick.borsboom@ribose.com> ]

Rich Salz's avatar
Rich Salz committed
  *) Reimplement -newreq-nodes and ERR_error_string_n; the
     original author does not agree with the license change.
     [Rich Salz]

  *) Add ARIA AEAD TLS support.
     [Jon Spillett]

  *) Some macro definitions to support VS6 have been removed.  Visual
     Studio 6 has not worked since 1.1.0
     [Rich Salz]

  *) Add ERR_clear_last_mark(), to allow callers to clear the last mark
     without clearing the errors.
     [Richard Levitte]

Rich Salz's avatar
Rich Salz committed
  *) Add "atfork" functions.  If building on a system that without
     pthreads, see doc/man3/OPENSSL_fork_prepare.pod for application
     requirements.  The RAND facility now uses/requires this.
     [Rich Salz]

  *) Add SHA3.
     [Andy Polyakov]

  *) The UI API becomes a permanent and integral part of libcrypto, i.e.
     not possible to disable entirely.  However, it's still possible to
     disable the console reading UI method, UI_OpenSSL() (use UI_null()
     as a fallback).

     To disable, configure with 'no-ui-console'.  'no-ui' is still
     possible to use as an alias.  Check at compile time with the
     macro OPENSSL_NO_UI_CONSOLE.  The macro OPENSSL_NO_UI is still
     possible to check and is an alias for OPENSSL_NO_UI_CONSOLE.
     [Richard Levitte]

  *) Add a STORE module, which implements a uniform and URI based reader of
     stores that can contain keys, certificates, CRLs and numerous other
     objects.  The main API is loosely based on a few stdio functions,
     and includes OSSL_STORE_open, OSSL_STORE_load, OSSL_STORE_eof,
     OSSL_STORE_error and OSSL_STORE_close.
     The implementation uses backends called "loaders" to implement arbitrary
     URI schemes.  There is one built in "loader" for the 'file' scheme.
     [Richard Levitte]

  *) Add devcrypto engine.  This has been implemented against cryptodev-linux,
     then adjusted to work on FreeBSD 8.4 as well.
     Enable by configuring with 'enable-devcryptoeng'.  This is done by default
     on BSD implementations, as cryptodev.h is assumed to exist on all of them.
     [Richard Levitte]

  *) Module names can prefixed with OSSL_ or OPENSSL_.  This affects
     util/mkerr.pl, which is adapted to allow those prefixes, leading to
     error code calls like this:

         OSSL_FOOerr(OSSL_FOO_F_SOMETHING, OSSL_FOO_R_WHATEVER);

     With this change, we claim the namespaces OSSL and OPENSSL in a manner
     that can be encoded in C.  For the foreseeable future, this will only
     affect new modules.
     [Richard Levitte and Tim Hudson]

Rich Salz's avatar
Rich Salz committed
  *) Removed BSD cryptodev engine.
     [Rich Salz]

  *) Add a build target 'build_all_generated', to build all generated files
     and only that.  This can be used to prepare everything that requires
     things like perl for a system that lacks perl and then move everything
     to that system and do the rest of the build there.
     [Richard Levitte]

  *) In the UI interface, make it possible to duplicate the user data.  This
     can be used by engines that need to retain the data for a longer time
     than just the call where this user data is passed.
     [Richard Levitte]

  *) Ignore the '-named_curve auto' value for compatibility of applications
     with OpenSSL 1.0.2.
     [Tomas Mraz <tmraz@fedoraproject.org>]

  *) Fragmented SSL/TLS alerts are no longer accepted. An alert message is 2
     bytes long. In theory it is permissible in SSLv3 - TLSv1.2 to fragment such
     alerts across multiple records (some of which could be empty). In practice
     it make no sense to send an empty alert record, or to fragment one. TLSv1.3
     prohibts this altogether and other libraries (BoringSSL, NSS) do not
     support this at all. Supporting it adds significant complexity to the
     record layer, and its removal is unlikely to cause inter-operability
     issues.
     [Matt Caswell]

Richard Levitte's avatar
Richard Levitte committed
  *) Add the ASN.1 types INT32, UINT32, INT64, UINT64 and variants prefixed
     with Z.  These are meant to replace LONG and ZLONG and to be size safe.
     The use of LONG and ZLONG is discouraged and scheduled for deprecation
     in OpenSSL 1.2.0.
     [Richard Levitte]

  *) Add the 'z' and 'j' modifiers to BIO_printf() et al formatting string,
     'z' is to be used for [s]size_t, and 'j' - with [u]int64_t.
     [Richard Levitte, Andy Polyakov]
  *) Add EC_KEY_get0_engine(), which does for EC_KEY what RSA_get0_engine()
     does for RSA, etc.
     [Richard Levitte]

  *) Have 'config' recognise 64-bit mingw and choose 'mingw64' as the target
     platform rather than 'mingw'.
     [Richard Levitte]

  *) The functions X509_STORE_add_cert and X509_STORE_add_crl return
     success if they are asked to add an object which already exists
     in the store. This change cascades to other functions which load
     certificates and CRLs.
     [Paul Dale]

  *) x86_64 assembly pack: annotate code with DWARF CFI directives to
     facilitate stack unwinding even from assembly subroutines.
     [Andy Polyakov]

  *) Remove VAX C specific definitions of OPENSSL_EXPORT, OPENSSL_EXTERN.
     Also remove OPENSSL_GLOBAL entirely, as it became a no-op.
     [Richard Levitte]

  *) Remove the VMS-specific reimplementation of gmtime from crypto/o_times.c.
     VMS C's RTL has a fully up to date gmtime() and gmtime_r() since V7.1,
     which is the minimum version we support.
     [Richard Levitte]

  *) Certificate time validation (X509_cmp_time) enforces stricter
     compliance with RFC 5280. Fractional seconds and timezone offsets
     are no longer allowed.
     [Emilia Käsper]

  *) Add support for ARIA
     [Paul Dale]

  *) s_client will now send the Server Name Indication (SNI) extension by
     default unless the new "-noservername" option is used. The server name is
     based on the host provided to the "-connect" option unless overridden by
     using "-servername".
     [Matt Caswell]

  *) Add support for SipHash
     [Todd Short]

  *) OpenSSL now fails if it receives an unrecognised record type in TLS1.0
     or TLS1.1. Previously this only happened in SSLv3 and TLS1.2. This is to
     prevent issues where no progress is being made and the peer continually
     sends unrecognised record types, using up resources processing them.
     [Matt Caswell]
  *) 'openssl passwd' can now produce SHA256 and SHA512 based output,
     using the algorithm defined in
     https://www.akkadia.org/drepper/SHA-crypt.txt
     [Richard Levitte]

  *) Heartbeat support has been removed; the ABI is changed for now.
     [Richard Levitte, Rich Salz]

Emilia Kasper's avatar
Emilia Kasper committed
  *) Support for SSL_OP_NO_ENCRYPT_THEN_MAC in SSL_CONF_cmd.
     [Emilia Käsper]

  *) The RSA "null" method, which was partially supported to avoid patent
     issues, has been replaced to always returns NULL.
     [Rich Salz]

 Changes between 1.1.0g and 1.1.0h [xx XXX xxxx]

  *) Constructed ASN.1 types with a recursive definition could exceed the stack

     Constructed ASN.1 types with a recursive definition (such as can be found
     in PKCS7) could eventually exceed the stack given malicious input with
     excessive recursion. This could result in a Denial Of Service attack. There
     are no such structures used within SSL/TLS that come from untrusted sources
     so this is considered safe.

     This issue was reported to OpenSSL on 4th January 2018 by the OSS-fuzz
     project.
     (CVE-2018-0739)
     [Matt Caswell]

  *) Incorrect CRYPTO_memcmp on HP-UX PA-RISC

     Because of an implementation bug the PA-RISC CRYPTO_memcmp function is
     effectively reduced to only comparing the least significant bit of each
     byte. This allows an attacker to forge messages that would be considered as
     authenticated in an amount of tries lower than that guaranteed by the
     security claims of the scheme. The module can only be compiled by the
     HP-UX assembler, so that only HP-UX PA-RISC targets are affected.

     This issue was reported to OpenSSL on 2nd March 2018 by Peter Waltenberg
     (IBM).
     (CVE-2018-0733)
     [Andy Polyakov]

  *) Add a build target 'build_all_generated', to build all generated files
     and only that.  This can be used to prepare everything that requires
     things like perl for a system that lacks perl and then move everything
     to that system and do the rest of the build there.
     [Richard Levitte]

  *) Backport SSL_OP_NO_RENGOTIATION

     OpenSSL 1.0.2 and below had the ability to disable renegotiation using the
     (undocumented) SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS flag. Due to the opacity
     changes this is no longer possible in 1.1.0. Therefore the new
     SSL_OP_NO_RENEGOTIATION option from 1.1.1-dev has been backported to
     1.1.0 to provide equivalent functionality.

     Note that if an application built against 1.1.0h headers (or above) is run
     using an older version of 1.1.0 (prior to 1.1.0h) then the option will be
     accepted but nothing will happen, i.e. renegotiation will not be prevented.
     [Matt Caswell]

  *) Removed the OS390-Unix config target.  It relied on a script that doesn't
     exist.
     [Rich Salz]

  *) rsaz_1024_mul_avx2 overflow bug on x86_64

     There is an overflow bug in the AVX2 Montgomery multiplication procedure
     used in exponentiation with 1024-bit moduli. No EC algorithms are affected.
     Analysis suggests that attacks against RSA and DSA as a result of this
     defect would be very difficult to perform and are not believed likely.
     Attacks against DH1024 are considered just feasible, because most of the
     work necessary to deduce information about a private key may be performed
     offline. The amount of resources required for such an attack would be
     significant. However, for an attack on TLS to be meaningful, the server
     would have to share the DH1024 private key among multiple clients, which is
     no longer an option since CVE-2016-0701.

     This only affects processors that support the AVX2 but not ADX extensions
     like Intel Haswell (4th generation).

     This issue was reported to OpenSSL by David Benjamin (Google). The issue
     was originally found via the OSS-Fuzz project.
     (CVE-2017-3738)
     [Andy Polyakov]

 Changes between 1.1.0f and 1.1.0g [2 Nov 2017]

  *) bn_sqrx8x_internal carry bug on x86_64

     There is a carry propagating bug in the x86_64 Montgomery squaring
     procedure. No EC algorithms are affected. Analysis suggests that attacks
     against RSA and DSA as a result of this defect would be very difficult to
     perform and are not believed likely. Attacks against DH are considered just
     feasible (although very difficult) because most of the work necessary to
     deduce information about a private key may be performed offline. The amount
     of resources required for such an attack would be very significant and
     likely only accessible to a limited number of attackers. An attacker would
     additionally need online access to an unpatched system using the target
     private key in a scenario with persistent DH parameters and a private
     key that is shared between multiple clients.

     This only affects processors that support the BMI1, BMI2 and ADX extensions
     like Intel Broadwell (5th generation) and later or AMD Ryzen.

     This issue was reported to OpenSSL by the OSS-Fuzz project.
     (CVE-2017-3736)
     [Andy Polyakov]

  *) Malformed X.509 IPAddressFamily could cause OOB read

     If an X.509 certificate has a malformed IPAddressFamily extension,
     OpenSSL could do a one-byte buffer overread. The most likely result
     would be an erroneous display of the certificate in text format.

     This issue was reported to OpenSSL by the OSS-Fuzz project.
     (CVE-2017-3735)
     [Rich Salz]

 Changes between 1.1.0e and 1.1.0f [25 May 2017]

  *) Have 'config' recognise 64-bit mingw and choose 'mingw64' as the target
     platform rather than 'mingw'.
     [Richard Levitte]

  *) Remove the VMS-specific reimplementation of gmtime from crypto/o_times.c.
     VMS C's RTL has a fully up to date gmtime() and gmtime_r() since V7.1,
     which is the minimum version we support.
     [Richard Levitte]

 Changes between 1.1.0d and 1.1.0e [16 Feb 2017]

  *) Encrypt-Then-Mac renegotiation crash

     During a renegotiation handshake if the Encrypt-Then-Mac extension is
     negotiated where it was not in the original handshake (or vice-versa) then
     this can cause OpenSSL to crash (dependant on ciphersuite). Both clients
     and servers are affected.

     This issue was reported to OpenSSL by Joe Orton (Red Hat).
     (CVE-2017-3733)
     [Matt Caswell]

 Changes between 1.1.0c and 1.1.0d [26 Jan 2017]

  *) Truncated packet could crash via OOB read

     If one side of an SSL/TLS path is running on a 32-bit host and a specific
     cipher is being used, then a truncated packet can cause that host to
     perform an out-of-bounds read, usually resulting in a crash.

     This issue was reported to OpenSSL by Robert Święcki of Google.
     (CVE-2017-3731)
     [Andy Polyakov]

  *) Bad (EC)DHE parameters cause a client crash

     If a malicious server supplies bad parameters for a DHE or ECDHE key
     exchange then this can result in the client attempting to dereference a
     NULL pointer leading to a client crash. This could be exploited in a Denial
     of Service attack.

     This issue was reported to OpenSSL by Guido Vranken.
     (CVE-2017-3730)
     [Matt Caswell]

  *) BN_mod_exp may produce incorrect results on x86_64

     There is a carry propagating bug in the x86_64 Montgomery squaring
     procedure. No EC algorithms are affected. Analysis suggests that attacks
     against RSA and DSA as a result of this defect would be very difficult to
     perform and are not believed likely. Attacks against DH are considered just
     feasible (although very difficult) because most of the work necessary to
     deduce information about a private key may be performed offline. The amount
     of resources required for such an attack would be very significant and
     likely only accessible to a limited number of attackers. An attacker would
     additionally need online access to an unpatched system using the target
     private key in a scenario with persistent DH parameters and a private
     key that is shared between multiple clients. For example this can occur by
     default in OpenSSL DHE based SSL/TLS ciphersuites. Note: This issue is very
     similar to CVE-2015-3193 but must be treated as a separate problem.

     This issue was reported to OpenSSL by the OSS-Fuzz project.
     (CVE-2017-3732)
     [Andy Polyakov]

 Changes between 1.1.0b and 1.1.0c [10 Nov 2016]
Matt Caswell's avatar
Matt Caswell committed
  *) ChaCha20/Poly1305 heap-buffer-overflow

     TLS connections using *-CHACHA20-POLY1305 ciphersuites are susceptible to
     a DoS attack by corrupting larger payloads. This can result in an OpenSSL
     crash. This issue is not considered to be exploitable beyond a DoS.

     This issue was reported to OpenSSL by Robert Święcki (Google Security Team)
     (CVE-2016-7054)
     [Richard Levitte]

  *) CMS Null dereference

     Applications parsing invalid CMS structures can crash with a NULL pointer
     dereference. This is caused by a bug in the handling of the ASN.1 CHOICE
     type in OpenSSL 1.1.0 which can result in a NULL value being passed to the
     structure callback if an attempt is made to free certain invalid encodings.
     Only CHOICE structures using a callback which do not handle NULL value are
     affected.

     This issue was reported to OpenSSL by Tyler Nighswander of ForAllSecure.
     (CVE-2016-7053)
     [Stephen Henson]

  *) Montgomery multiplication may produce incorrect results

     There is a carry propagating bug in the Broadwell-specific Montgomery
     multiplication procedure that handles input lengths divisible by, but
     longer than 256 bits. Analysis suggests that attacks against RSA, DSA
     and DH private keys are impossible. This is because the subroutine in
     question is not used in operations with the private key itself and an input
     of the attacker's direct choice. Otherwise the bug can manifest itself as
     transient authentication and key negotiation failures or reproducible
     erroneous outcome of public-key operations with specially crafted input.
     Among EC algorithms only Brainpool P-512 curves are affected and one
     presumably can attack ECDH key negotiation. Impact was not analyzed in
     detail, because pre-requisites for attack are considered unlikely. Namely
     multiple clients have to choose the curve in question and the server has to
     share the private key among them, neither of which is default behaviour.
     Even then only clients that chose the curve will be affected.

     This issue was publicly reported as transient failures and was not
     initially recognized as a security issue. Thanks to Richard Morgan for
     providing reproducible case.
     (CVE-2016-7055)
     [Andy Polyakov]

  *) Removed automatic addition of RPATH in shared libraries and executables,
     as this was a remainder from OpenSSL 1.0.x and isn't needed any more.
     [Richard Levitte]

 Changes between 1.1.0a and 1.1.0b [26 Sep 2016]

  *) Fix Use After Free for large message sizes

     The patch applied to address CVE-2016-6307 resulted in an issue where if a
     message larger than approx 16k is received then the underlying buffer to
     store the incoming message is reallocated and moved. Unfortunately a
     dangling pointer to the old location is left which results in an attempt to
     write to the previously freed location. This is likely to result in a
     crash, however it could potentially lead to execution of arbitrary code.

     This issue only affects OpenSSL 1.1.0a.

     This issue was reported to OpenSSL by Robert Święcki.
     (CVE-2016-6309)
     [Matt Caswell]

 Changes between 1.1.0 and 1.1.0a [22 Sep 2016]

  *) OCSP Status Request extension unbounded memory growth

     A malicious client can send an excessively large OCSP Status Request
     extension. If that client continually requests renegotiation, sending a
     large OCSP Status Request extension each time, then there will be unbounded
     memory growth on the server. This will eventually lead to a Denial Of
     Service attack through memory exhaustion. Servers with a default
     configuration are vulnerable even if they do not support OCSP. Builds using
     the "no-ocsp" build time option are not affected.

     This issue was reported to OpenSSL by Shi Lei (Gear Team, Qihoo 360 Inc.)
     (CVE-2016-6304)
     [Matt Caswell]

  *) SSL_peek() hang on empty record

     OpenSSL 1.1.0 SSL/TLS will hang during a call to SSL_peek() if the peer
     sends an empty record. This could be exploited by a malicious peer in a
     Denial Of Service attack.

     This issue was reported to OpenSSL by Alex Gaynor.
     (CVE-2016-6305)
     [Matt Caswell]

  *) Excessive allocation of memory in tls_get_message_header() and
     dtls1_preprocess_fragment()

     A (D)TLS message includes 3 bytes for its length in the header for the
     message. This would allow for messages up to 16Mb in length. Messages of
     this length are excessive and OpenSSL includes a check to ensure that a
     peer is sending reasonably sized messages in order to avoid too much memory
     being consumed to service a connection. A flaw in the logic of version
     1.1.0 means that memory for the message is allocated too early, prior to
     the excessive message length check. Due to way memory is allocated in
     OpenSSL this could mean an attacker could force up to 21Mb to be allocated
     to service a connection. This could lead to a Denial of Service through
     memory exhaustion. However, the excessive message length check still takes
     place, and this would cause the connection to immediately fail. Assuming
FdaSilvaYY's avatar
FdaSilvaYY committed
     that the application calls SSL_free() on the failed connection in a timely
     manner then the 21Mb of allocated memory will then be immediately freed
     again. Therefore the excessive memory allocation will be transitory in
     nature. This then means that there is only a security impact if:

     1) The application does not call SSL_free() in a timely manner in the event
     that the connection fails
     or
     2) The application is working in a constrained environment where there is
     very little free memory
     or
     3) The attacker initiates multiple connection attempts such that there are
     multiple connections in a state where memory has been allocated for the
     connection; SSL_free() has not yet been called; and there is insufficient
     memory to service the multiple requests.

     Except in the instance of (1) above any Denial Of Service is likely to be
     transitory because as soon as the connection fails the memory is
     subsequently freed again in the SSL_free() call. However there is an
     increased risk during this period of application crashes due to the lack of
     memory - which would then mean a more serious Denial of Service.

     This issue was reported to OpenSSL by Shi Lei (Gear Team, Qihoo 360 Inc.)
     (CVE-2016-6307 and CVE-2016-6308)
     [Matt Caswell]

  *) solaris-x86-cc, i.e. 32-bit configuration with vendor compiler,
     had to be removed. Primary reason is that vendor assembler can't
     assemble our modules with -KPIC flag. As result it, assembly
     support, was not even available as option. But its lack means
     lack of side-channel resistant code, which is incompatible with
     security by todays standards. Fortunately gcc is readily available
     prepackaged option, which we firmly point at...
     [Andy Polyakov]

 Changes between 1.0.2h and 1.1.0  [25 Aug 2016]
  *) Windows command-line tool supports UTF-8 opt-in option for arguments
     and console input. Setting OPENSSL_WIN32_UTF8 environment variable
     (to any value) allows Windows user to access PKCS#12 file generated
     with Windows CryptoAPI and protected with non-ASCII password, as well
     as files generated under UTF-8 locale on Linux also protected with
     non-ASCII password.
     [Andy Polyakov]

  *) To mitigate the SWEET32 attack (CVE-2016-2183), 3DES cipher suites
     have been disabled by default and removed from DEFAULT, just like RC4.
     See the RC4 item below to re-enable both.
  *) The method for finding the storage location for the Windows RAND seed file
     has changed. First we check %RANDFILE%. If that is not set then we check
     the directories %HOME%, %USERPROFILE% and %SYSTEMROOT% in that order. If
     all else fails we fall back to C:\.
  *) The EVP_EncryptUpdate() function has had its return type changed from void
     to int. A return of 0 indicates and error while a return of 1 indicates
     success.
     [Matt Caswell]

  *) The flags RSA_FLAG_NO_CONSTTIME, DSA_FLAG_NO_EXP_CONSTTIME and
     DH_FLAG_NO_EXP_CONSTTIME which previously provided the ability to switch
     off the constant time implementation for RSA, DSA and DH have been made
     no-ops and deprecated.
     [Matt Caswell]

Rich Salz's avatar
Rich Salz committed
  *) Windows RAND implementation was simplified to only get entropy by
     calling CryptGenRandom(). Various other RAND-related tickets
     were also closed.
     [Joseph Wylie Yandle, Rich Salz]

  *) The stack and lhash API's were renamed to start with OPENSSL_SK_
     and OPENSSL_LH_, respectively.  The old names are available
     with API compatibility.  They new names are now completely documented.
     [Rich Salz]

  *) Unify TYPE_up_ref(obj) methods signature.
     SSL_CTX_up_ref(), SSL_up_ref(), X509_up_ref(), EVP_PKEY_up_ref(),
     X509_CRL_up_ref(), X509_OBJECT_up_ref_count() methods are now returning an
     int (instead of void) like all others TYPE_up_ref() methods.
     So now these methods also check the return value of CRYPTO_atomic_add(),
     and the validity of object reference counter.
     [fdasilvayy@gmail.com]
  *) With Windows Visual Studio builds, the .pdb files are installed
     alongside the installed libraries and executables.  For a static
     library installation, ossl_static.pdb is the associate compiler
     generated .pdb file to be used when linking programs.
     [Richard Levitte]

Richard Levitte's avatar
Richard Levitte committed
  *) Remove openssl.spec.  Packaging files belong with the packagers.
     [Richard Levitte]

  *) Automatic Darwin/OSX configuration has had a refresh, it will now
     recognise x86_64 architectures automatically.  You can still decide
     to build for a different bitness with the environment variable
     KERNEL_BITS (can be 32 or 64), for example:

         KERNEL_BITS=32 ./config

     [Richard Levitte]

  *) Change default algorithms in pkcs8 utility to use PKCS#5 v2.0,
     256 bit AES and HMAC with SHA256.
     [Steve Henson]

Andy Polyakov's avatar
Andy Polyakov committed
  *) Remove support for MIPS o32 ABI on IRIX (and IRIX only).
     [Andy Polyakov]

Rich Salz's avatar
Rich Salz committed
  *) Triple-DES ciphers have been moved from HIGH to MEDIUM.
Rich Salz's avatar
Rich Salz committed
     [Rich Salz]
  *) To enable users to have their own config files and build file templates,
     Configure looks in the directory indicated by the environment variable
     OPENSSL_LOCAL_CONFIG_DIR as well as the in-source Configurations/
     directory.  On VMS, OPENSSL_LOCAL_CONFIG_DIR is expected to be a logical
     name and is used as is.
     [Richard Levitte]

  *) The following datatypes were made opaque: X509_OBJECT, X509_STORE_CTX,
     X509_STORE, X509_LOOKUP, and X509_LOOKUP_METHOD.  The unused type
     X509_CERT_FILE_CTX was removed.
     [Rich Salz]

  *) "shared" builds are now the default. To create only static libraries use
     the "no-shared" Configure option.
     [Matt Caswell]

  *) Remove the no-aes, no-hmac, no-rsa, no-sha and no-md5 Configure options.
     All of these option have not worked for some while and are fundamental
     algorithms.
     [Matt Caswell]

  *) Make various cleanup routines no-ops and mark them as deprecated. Most
     global cleanup functions are no longer required because they are handled
     via auto-deinit (see OPENSSL_init_crypto and OPENSSL_init_ssl man pages).
     Explicitly de-initing can cause problems (e.g. where a library that uses
     OpenSSL de-inits, but an application is still using it). The affected
     functions are CONF_modules_free(), ENGINE_cleanup(), OBJ_cleanup(),
     EVP_cleanup(), BIO_sock_cleanup(), CRYPTO_cleanup_all_ex_data(),
     RAND_cleanup(), SSL_COMP_free_compression_methods(), ERR_free_strings() and
     COMP_zlib_cleanup().
     [Matt Caswell]
  *) --strict-warnings no longer enables runtime debugging options
     such as REF_DEBUG. Instead, debug options are automatically
     enabled with '--debug' builds.
     [Andy Polyakov, Emilia Käsper]

  *) Made DH and DH_METHOD opaque. The structures for managing DH objects
     have been moved out of the public header files. New functions for managing
     these have been added.
     [Matt Caswell]

  *) Made RSA and RSA_METHOD opaque. The structures for managing RSA
     objects have been moved out of the public header files. New
     functions for managing these have been added.
     [Richard Levitte]

  *) Made DSA and DSA_METHOD opaque. The structures for managing DSA objects
     have been moved out of the public header files. New functions for managing
     these have been added.
     [Matt Caswell]

  *) Made BIO and BIO_METHOD opaque. The structures for managing BIOs have been
     moved out of the public header files. New functions for managing these
     have been added.
     [Matt Caswell]

  *) Removed no-rijndael as a config option. Rijndael is an old name for AES.
     [Matt Caswell]
  *) Removed the mk1mf build scripts.
     [Richard Levitte]

  *) Headers are now wrapped, if necessary, with OPENSSL_NO_xxx, so
     it is always safe to #include a header now.
     [Rich Salz]

  *) Removed the aged BC-32 config and all its supporting scripts
     [Richard Levitte]

Rich Salz's avatar
Rich Salz committed
  *) Removed support for Ultrix, Netware, and OS/2.
Rich Salz's avatar
Rich Salz committed
     [Rich Salz]

Emilia Kasper's avatar
Emilia Kasper committed
  *) Add support for HKDF.
     [Alessandro Ghedini]

Kurt Roeckx's avatar
Kurt Roeckx committed
  *) Add support for blake2b and blake2s
     [Bill Cox]

Matt Caswell's avatar
Matt Caswell committed
  *) Added support for "pipelining". Ciphers that have the
     EVP_CIPH_FLAG_PIPELINE flag set have a capability to process multiple
     encryptions/decryptions simultaneously. There are currently no built-in
     ciphers with this property but the expectation is that engines will be able
     to offer it to significantly improve throughput. Support has been extended
     into libssl so that multiple records for a single connection can be
     processed in one go (for >=TLS 1.1).
     [Matt Caswell]

  *) Added the AFALG engine. This is an async capable engine which is able to
     offload work to the Linux kernel. In this initial version it only supports
     AES128-CBC. The kernel must be version 4.1.0 or greater.
     [Catriona Lucey]

  *) OpenSSL now uses a new threading API. It is no longer necessary to
     set locking callbacks to use OpenSSL in a multi-threaded environment. There
     are two supported threading models: pthreads and windows threads. It is
     also possible to configure OpenSSL at compile time for "no-threads". The
     old threading API should no longer be used. The functions have been
     replaced with "no-op" compatibility macros.
     [Alessandro Ghedini, Matt Caswell]

Todd Short's avatar
Todd Short committed
  *) Modify behavior of ALPN to invoke callback after SNI/servername
     callback, such that updates to the SSL_CTX affect ALPN.
     [Todd Short]

Todd Short's avatar
Todd Short committed
  *) Add SSL_CIPHER queries for authentication and key-exchange.
     [Todd Short]

  *) Changes to the DEFAULT cipherlist:
       - Prefer (EC)DHE handshakes over plain RSA.
       - Prefer AEAD ciphers over legacy ciphers.
       - Prefer ECDSA over RSA when both certificates are available.
       - Prefer TLSv1.2 ciphers/PRF.
       - Remove DSS, SEED, IDEA, CAMELLIA, and AES-CCM from the
         default cipherlist.
     [Emilia Käsper]

Rich Salz's avatar
Rich Salz committed
  *) Change the ECC default curve list to be this, in order: x25519,
     secp256r1, secp521r1, secp384r1.
     [Rich Salz]

  *) RC4 based libssl ciphersuites are now classed as "weak" ciphers and are
     disabled by default. They can be re-enabled using the
     enable-weak-ssl-ciphers option to Configure.
     [Matt Caswell]

  *) If the server has ALPN configured, but supports no protocols that the
     client advertises, send a fatal "no_application_protocol" alert.
     This behaviour is SHALL in RFC 7301, though it isn't universally
     implemented by other servers.
     [Emilia Käsper]

  *) Add X25519 support.
Dr. Stephen Henson's avatar
Dr. Stephen Henson committed
     Add ASN.1 and EVP_PKEY methods for X25519. This includes support
     for public and private key encoding using the format documented in
FdaSilvaYY's avatar
FdaSilvaYY committed
     draft-ietf-curdle-pkix-02. The corresponding EVP_PKEY method supports
Dr. Stephen Henson's avatar
Dr. Stephen Henson committed
     key generation and key derivation.

     TLS support complies with draft-ietf-tls-rfc4492bis-08 and uses
     X25519(29).
     [Steve Henson]

  *) Deprecate SRP_VBASE_get_by_user.
     SRP_VBASE_get_by_user had inconsistent memory management behaviour.
     In order to fix an unavoidable memory leak (CVE-2016-0798),
     SRP_VBASE_get_by_user was changed to ignore the "fake user" SRP
     seed, even if the seed is configured.

     Users should use SRP_VBASE_get1_by_user instead. Note that in
     SRP_VBASE_get1_by_user, caller must free the returned value. Note
     also that even though configuring the SRP seed attempts to hide
     invalid usernames by continuing the handshake with fake
     credentials, this behaviour is not constant time and no strong
     guarantees are made that the handshake is indistinguishable from
     that of a valid user.
     [Emilia Käsper]

  *) Configuration change; it's now possible to build dynamic engines
     without having to build shared libraries and vice versa.  This
     only applies to the engines in engines/, those in crypto/engine/
     will always be built into libcrypto (i.e. "static").

     Building dynamic engines is enabled by default; to disable, use
     the configuration option "disable-dynamic-engine".

Richard Levitte's avatar
Richard Levitte committed
     The only requirements for building dynamic engines are the
     presence of the DSO module and building with position independent
     code, so they will also automatically be disabled if configuring
Richard Levitte's avatar
Richard Levitte committed
     with "disable-dso" or "disable-pic".

     The macros OPENSSL_NO_STATIC_ENGINE and OPENSSL_NO_DYNAMIC_ENGINE
     are also taken away from openssl/opensslconf.h, as they are
     irrelevant.
     [Richard Levitte]

  *) Configuration change; if there is a known flag to compile
     position independent code, it will always be applied on the
     libcrypto and libssl object files, and never on the application
     object files.  This means other libraries that use routines from
     libcrypto / libssl can be made into shared libraries regardless
     of how OpenSSL was configured.

     If this isn't desirable, the configuration options "disable-pic"
     or "no-pic" can be used to disable the use of PIC.  This will
     also disable building shared libraries and dynamic engines.
Rich Salz's avatar
Rich Salz committed
  *) Removed JPAKE code.  It was experimental and has no wide use.
     [Rich Salz]

  *) The INSTALL_PREFIX Makefile variable has been renamed to
     DESTDIR.  That makes for less confusion on what this variable
     is for.  Also, the configuration option --install_prefix is
     removed.
     [Richard Levitte]

  *) Heartbeat for TLS has been removed and is disabled by default
     for DTLS; configure with enable-heartbeats.  Code that uses the
     old #define's might need to be updated.
     [Emilia Käsper, Rich Salz]

  *) Rename REF_CHECK to REF_DEBUG.
     [Rich Salz]

  *) New "unified" build system

     The "unified" build system is aimed to be a common system for all
     platforms we support.  With it comes new support for VMS.

FdaSilvaYY's avatar
FdaSilvaYY committed
     This system builds supports building in a different directory tree
     than the source tree.  It produces one Makefile (for unix family
     or lookalikes), or one descrip.mms (for VMS).

     The source of information to make the Makefile / descrip.mms is
     small files called 'build.info', holding the necessary
     information for each directory with source to compile, and a
     template in Configurations, like unix-Makefile.tmpl or
     descrip.mms.tmpl.

     With this change, the library names were also renamed on Windows
     and on VMS.  They now have names that are closer to the standard
     on Unix, and include the major version number, and in certain
     cases, the architecture they are built for.  See "Notes on shared
     libraries" in INSTALL.

     We rely heavily on the perl module Text::Template.
     [Richard Levitte]

  *) Added support for auto-initialisation and de-initialisation of the library.
     OpenSSL no longer requires explicit init or deinit routines to be called,
     except in certain circumstances. See the OPENSSL_init_crypto() and
     OPENSSL_init_ssl() man pages for further information.
  *) The arguments to the DTLSv1_listen function have changed. Specifically the
     "peer" argument is now expected to be a BIO_ADDR object.

  *) Rewrite of BIO networking library. The BIO library lacked consistent
     support of IPv6, and adding it required some more extensive
     modifications.  This introduces the BIO_ADDR and BIO_ADDRINFO types,
     which hold all types of addresses and chains of address information.
     It also introduces a new API, with functions like BIO_socket,
     BIO_connect, BIO_listen, BIO_lookup and a rewrite of BIO_accept.
     The source/sink BIOs BIO_s_connect, BIO_s_accept and BIO_s_datagram
     have been adapted accordingly.
     [Richard Levitte]

Emilia Kasper's avatar
Emilia Kasper committed
  *) RSA_padding_check_PKCS1_type_1 now accepts inputs with and without
     the leading 0-byte.
     [Emilia Käsper]

  *) CRIME protection: disable compression by default, even if OpenSSL is
     compiled with zlib enabled. Applications can still enable compression
     by calling SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION), or by
     using the SSL_CONF library to configure compression.
     [Emilia Käsper]

Emilia Kasper's avatar
Emilia Kasper committed
  *) The signature of the session callback configured with
     SSL_CTX_sess_set_get_cb was changed. The read-only input buffer
     was explicitly marked as 'const unsigned char*' instead of
     'unsigned char*'.
     [Emilia Käsper]

Emilia Kasper's avatar
Emilia Kasper committed
  *) Always DPURIFY. Remove the use of uninitialized memory in the
     RNG, and other conditional uses of DPURIFY. This makes -DPURIFY a no-op.
     [Emilia Käsper]

  *) Removed many obsolete configuration items, including
        DES_PTR, DES_RISC1, DES_RISC2, DES_INT
        MD2_CHAR, MD2_INT, MD2_LONG
        BF_PTR, BF_PTR2
        IDEA_SHORT, IDEA_LONG
        RC2_SHORT, RC2_LONG, RC4_LONG, RC4_CHUNK, RC4_INDEX
     [Rich Salz, with advice from Andy Polyakov]

  *) Many BN internals have been moved to an internal header file.
     [Rich Salz with help from Andy Polyakov]

  *) Configuration and writing out the results from it has changed.
     Files such as Makefile include/openssl/opensslconf.h and are now
     produced through general templates, such as Makefile.in and
     crypto/opensslconf.h.in and some help from the perl module
     Text::Template.

     Also, the center of configuration information is no longer
     Makefile.  Instead, Configure produces a perl module in
     configdata.pm which holds most of the config data (in the hash
     table %config), the target data that comes from the target
     configuration in one of the Configurations/*.conf files (in
     %target).
     [Richard Levitte]

  *) To clarify their intended purposes, the Configure options
     --prefix and --openssldir change their semantics, and become more
     straightforward and less interdependent.

     --prefix shall be used exclusively to give the location INSTALLTOP
     where programs, scripts, libraries, include files and manuals are
     going to be installed.  The default is now /usr/local.

     --openssldir shall be used exclusively to give the default
     location OPENSSLDIR where certificates, private keys, CRLs are
     managed.  This is also where the default openssl.cnf gets
     installed.
     If the directory given with this option is a relative path, the
     values of both the --prefix value and the --openssldir value will
     be combined to become OPENSSLDIR.
     The default for --openssldir is INSTALLTOP/ssl.