<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<?xml-stylesheet type="application/xslt+xml" href="../style.xsl"?>
<document url="changelog.html">

  &project;

<body>

<section name="Preface">
  <p>
  This is the Changelog for Tomcat Native 1.2.
  </p>
</section>
<section name="Changes in 1.2.39">
  <changelog>
    <fix>
      <bug>67061</bug>: If the insecure optionalNoCA certificate verification
      mode is used, disable OCSP if enabled else client certificates from
      unknown certificate authorities will be rejected. (markt)
    </fix>
    <update>
      Update the recommended minimum version of OpenSSL to 3.0.11. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.38">
  <changelog>
    <update>
      Align default pass phrase prompt with HTTPd. (michaelo)
    </update>
    <fix>
      <bug>66669</bug>: Fix memory leak in SNI processing. (markt)
    </fix>
    <update>
      Update the recommended minimum version of OpenSSL to 1.1.1v. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.37">
  <changelog>
    <update>
      Update the recommended minimum version of APR to 1.7.4. (markt)
    </update>
    <update>
      Update the recommended minimum version of OpenSSL to 1.1.1u. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.36">
  <changelog>
    <update>
      Update the recommended minimum version of APR to 1.7.2. (markt)
    </update>
    <update>
      Update the recommended minimum version of OpenSSL to 1.1.1t. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.35">
  <changelog>
    <docs>
      Document the TLS rengotiation behaviour. (markt)
    </docs>
    <docs>
      Add HOWTO-RELEASE.txt that describes the release process. (markt)
    </docs>
    <update>
      Update recommended OpenSSL version to 1.1.1q or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.34">
  <changelog>
    <scode>
      Refactor library initialization so it is compatible with Tomcat 10.1.x
      onwards where a number of Java classes have been removed. (markt)
    </scode>
    <add>
      Map the OpenSSL 3.x FIPS behaviour to the OpenSSL 1.x API to allow clients
      to determine if the FIPS provider is being used when Tomcat Native is
      compiled against OpenSSL 3.x. (markt)
    </add>
  </changelog>
</section>
<section name="Changes in 1.2.33">
  <changelog>
    <fix>
      <bug>66035</bug>: Fix crash when attempting to read TLS session ID after a
      handshake failure. (schultz/markt)
    </fix>
    <fix>
      Enable <code>download_deps.sh</code> to be called from any directory. Pull
      request <pr>12</pr> provided by Dimitrios Soumis. (markt)
    </fix>
    <update>
      Update recommended OpenSSL version to 1.1.1o or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.32">
  <changelog>
    <update>
      Update recommended OpenSSL version to 1.1.1n or later. (markt)
    </update>
    <fix>
      Fix release script so it works with the current git layout. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.31">
  <changelog>
    <fix>
      <bug>65441</bug>: Correct previous fix that enabled building to continue
      with OpenSSL 3.x. Patch provided by lzsiga. (markt)
    </fix>
    <fix>
      <bug>65659</bug>: Remove remaining reference to <code>pkg-config</code>
      which is no longer included in the Tomcat Native distribution. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.30">
  <changelog>
    <add>
      <bug>65181</bug>: Additional changes required to provided support for
      using OpenSSL Engines that use proprietary key formats. Based on a patch
      provided by Edin Hodzic. (markt)
    </add>
    <fix>
      <bug>65329</bug>: Correct handling of <code>WINVER</code> in make file to
      use correct constant for Windows 7. Add constants for Windows 8,
      Windows 8.1 and Windows 10. Rename <code>WINNT</code> to
      <code>WIN2k</code> as it is used for Windows 2000 upwards, not Windows NT
      upwards. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.29 (not released)">
  <changelog>
    <fix>
      Add a patch for APR that fixes an issue where some Windows systems in some
      configurations would only listen on IPv6 addresses on dual stack systems
      even though configured to listen on both IPv6 and IPv4 addresses.
      (michaelo)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.28">
  <changelog>
    <fix>
      Correct a regression in the fix for <bug>65181</bug> that prevented an
      error message from being displayed if an invalid key file was provided
      and no OpenSSL Engine was configured. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.27">
  <changelog>
    <add>
      <bug>65181</bug>: Improve support for using OpenSSL Engines that use
      proprietary key formats. Patch provided by Edin Hodzic. (markt)
    </add>
    <update>
      Update recommended OpenSSL version to 1.1.1k or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.26">
  <changelog>
    <fix>
      Enable building to continue against OpenSSL 3.x and 1.1.1. (markt)
    </fix>
    <add>
      <bug>64942</bug>: Expose support for Unix Domain Sockets in APR v1.6 and up. (minfrin)
    </add>
    <update>
      Update recommended OpenSSL version to 1.1.1i or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.25">
  <changelog>
    <fix>
      Incomplete name mangling fix for C++ compilers in tcn_api.h. (michaelo)
    </fix>
    <update>
      Improve OS-specific header include for native thread id. (michaelo)
    </update>
    <fix>
      Disable keylog callback support for LibreSSL. (michaelo)
    </fix>
    <add>
      Add support for <code>SSLContext.addChainCertificateRaw()</code> with
      LibreSSL 2.9.1 and up. (michaelo)
    </add>
    <add>
      Add support for HP-UX's _lwp_self() in our
      ssl_thread_id(void). (michaelo)
    </add>
    <remove>
      Remove default option passed for rpath to linker on HP-UX. (michaelo)
    </remove>
    <add>
      Add an option to allow the OCSP responder check to be bypassed. Note that
      if OCSP is enabled, a missing responder is now treated as an error.
      (jfclere)
    </add>
    <fix>
      <bug>64429</bug>: Fix compilation with LibreSSL. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.24">
  <changelog>
    <fix>
      <bug>63671</bug>: libtcnative does not compile with OpenSSL &lt; 1.1.0
      and APR w/o threading support. (michaelo)
    </fix>
    <fix>
      Correct configure message for OpenSSL libdir. (michaelo)
    </fix>
    <update>
      <bug>64260</bug>: Clean up install target. (michaelo)
    </update>
    <fix>
      <bug>64315</bug>: configure output for OpenSSL wrong/incomplete sometimes.
      (michaelo)
    </fix>
    <update>
      Drop obsolete build time workarounds for HP-UX. (michaelo)
    </update>
    <add>
      Add support for FreeBSD's pthread_getthreadid_np() in our
      ssl_thread_id(void). (michaelo)
    </add>
    <update>
      <bug>63701</bug>: Use new OpenSSL initialisation process when building with
      OpenSSL 1.1.0 onwards. (mturk)
    </update>
    <add>
      <bug>64316</bug>: Introduce tcn_get_thread_id(void) to reduce code
	  duplication. (michaelo)
    </add>
    <fix>
      Fix linking against OpenSSL in non-standard locations on FreeBSD.
      (michaelo)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.23">
  <changelog>
    <fix>
      Make file fixes to enable building with APR 1.7.x. (markt)
    </fix>
    <fix>
      Switch to Windows 7 as the default target. (markt)
    </fix>
    <update>
      Update minimum OpenSSL version to 1.0.2r. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.22">
  <changelog>
    <fix>
      <bug>63159</bug>: Unable to complete build when build directory is
      outside of the source tree. Patch provided by Bob Huemmer. (markt)
    </fix>
    <fix>
      <bug>63356</bug>: Fix client certificate authentication when a certificate
      contains an AIA extension without an OCSP URI. Patch provided by Milind
      Takawale. (markt)
    </fix>
    <fix>
      <bug>63500</bug>: Fix JVM crash on Connector start when a certificate
      revocation file or path is specified for OpenSSL. (markt)
    </fix>
    <add>
      Add support for TLS key logging when using OpenSSL 1.1.1 or later. If the
      environment variable SSLKEYLOGFILE is set then the TLS keys will be logged
      to that file. Patch provided by John Kelly. (markt)
    </add>
    <fix>
      Update build script after migration of soucre repository from Subversion
      to Git. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.21">
  <changelog>
    <fix>
      Correct a possible JVM crash during shutdown caused by a bug in the fix
      for the per connection memory leak included in 1.2.20. (rjung)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.20">
  <changelog>
    <fix>
      Update includedir name to tomcat-native instead of apr. (csutherl)
    </fix>
    <fix>
      Fix a minor memory leak. It occurred every time a TLS connector was
      started so the impact was very unlikely to be noticed. (markt)
    </fix>
    <fix>
      Fix some minor memory leaks that could occur after error conditions during
      TLS connector initialisation. (markt)
    </fix>
    <fix>
      Fix a per connection memory leak when using OpenSSL BIO. This is typically
      used when OpenSSL is providing the TLS support for NIO or NIO2. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.19">
  <changelog>
    <fix>
      <bug>62892</bug>: Fix memory leaks in OCSP handling. (jfclere)
    </fix>
    <fix>
      <bug>62944</bug>: Fix copy/paste error that prevented TLS 1.0 and TLS 1.1
      from being used if TLS 1.3 was available. Patch provided by Dean Rasheed.
      (markt)
    </fix>
    <fix>
      Include OpenSSL licensing information in the Tomcat Native binaries for
      Windows that are built with OpenSSL. (markt)
    </fix>
    <update>
      Update recommended OpenSSL version to 1.0.2q or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.18">
  <changelog>
    <fix>
      <bug>62641</bug>: libtool invocations should use --tag=CC. (michaelo)
    </fix>
    <scode>
      Remove support for Netware as there has not been a supported Netware
      platform for a number of years. (markt)
    </scode>
    <add>
      <bug>62748</bug>: Add support for TLS 1.3 when built with OpenSSL 1.1.1 or
      equivalent. (schultz/markt)
    </add>
    <add>
      Expose the API necessary for CLIENT-CERT authentication to be correctly
      supported when using Tomcat's JSSE implementation backed by OpenSSL.
      (markt)
    </add>
  </changelog>
</section>
<section name="Changes in 1.2.17">
  <changelog>
    <fix>
      <bug>62094</bug>: Certificate verification using CRL with
      Tomcat APR connector does not work. (jfclere)
    </fix>
    <fix>
      <bug>62122</bug>: undefined symbol: SSL_COMP_free_compression_methods. (jfclere)
    </fix>
    <fix>
      <bug>62221</bug>: OCSP response processing uses always the first
      entry in the response. (jfclere)
    </fix>
    <fix>
      Further clean-up in the OCSP extension logic. (jfclere)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.16">
  <changelog>
    <fix>
      Further clean-up in the parsing of the OCSP extension. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.15">
  <changelog>
    <update>
      Update recommended OpenSSL version to 1.0.2m. (markt)
    </update>
    <fix>
      Correctly calculate field lengths when parsing the OCSP extension so
      that longer values are read correctly. (markt)
    </fix>
    <update>
      Update the recommended APR version to 1.6.3 or later. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.14">
  <changelog>
    <fix>
      Fix a small memory leak during certificate initialization. (rjung)
    </fix>
    <fix>
      Replace use of deprecated <code>ASN1_STRING_data</code> with
      <code>ASN1_STRING_get0_data</code> when building against
      OpenSSL 1.1.0 and newer. (rjung)
    </fix>
    <fix>
      Fix a thread local key leak. Only relevant when doing
      SSL.initialize() and Library.terminate() a lot of times. (rjung)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.13">
  <changelog>
    <fix>
      Add missing source files to Visual Studio project files. (wrowe)
    </fix>
    <add>
      Add support for the OpenSSL SSL_CONF API. (rjung)
    </add>
    <add>
      Add SSLContext.getCiphers(). (rjung)
    </add>
    <add>
      Add method to add a single CA certificate to the list of CA certificates
      which are accepted as issuers of client certificates. (rjung)
    </add>
    <fix>
      Fix an error not announcing the correct CA list for client certificates
      during TLS handshake. (rjung)
    </fix>
    <fix>
      Fix renegotiation to obtain a client certificate from a user agent.
      (markt)
    </fix>
    <fix>
      <bug>58434</bug>: Allow Tomcat Native to be compiled with LibreSSL. Note
      that some features may not be available when using LibreSSL. (markt)
    </fix>
    <fix>
      <bug>60290</bug>: When building Tomcat Native, don't ignore the value of
      <code>CC</code> if explicitly set. Patch provided by Michael Osipov.
      (markt)
    </fix>
    <fix>
      <bug>60301</bug>: When building Tomcat Native, allow the user to override
      the libtool specified by APR by setting the <code>LIBTOOL</code>
      environment variable. (markt)
    </fix>
    <update>
      Update build to use APR 1.6.x, with 1.6.2 recommended. (markt)
    </update>
    <update>
      Update recommended OpenSSL version to 1.0.2l. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.12">
  <changelog>
    <fix>
      Correct a regression in the fix for <bug>59797</bug> that triggered a JVM
      crash on shutdown in some Tomcat unit tests when using the APR/native
      connector. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.11">
  <changelog>
    <fix>
      <bug>52627</bug>: Prevent a crash in <code>File.infoGet()</code> caused by
      the use of uninitialised variables. Based on patch by Ilya Maykov. (markt)
    </fix>
    <fix>
      <bug>55113</bug>: Document the process for creating a static tc-native
      library with a FIPS-enabled OpenSSL and update the nmake make file to
      support the process. (markt)
    </fix>
    <fix>
      <bug>55114</bug>: Clean up building instructions for the native component
      and expand the instructions for building for Windows platforms. (markt)
    </fix>
    <fix>
      <bug>55938</bug>: Resolve remaining clang-analyzer warnings. Note that the
      use of <code>-1</code> to indicate the full array in
      <code>File.(read|write)[Full]</code> has been removed since it was only
      partially implemented and the implementation was faulty. (markt)
    </fix>
    <fix>
      <bug>58082</bug>: Update unit tests to use JUnit 4. Refactor unit tests
      into separate tests and use an external to reference them in the same way
      an external is used to reference the main code. (markt)
    </fix>
    <fix>
      <bug>59797</bug>: Ensure that the per thread error hash maintained by
      OpenSSL is cleaned up as individual threads exit to ensure it does not
      grow too large. Patch provided by Nate Clark. (markt) 
    </fix>
    <fix>
      <bug>59996</bug>: Correctly handle building tc-native on a 64-bit system
      when using an OpenSSL distribution that is not in <code>/usr</code>.
      (csutherl)
    </fix>
    <fix>
      <bug>60388</bug>: The --disable-maintainer-mode option of the configure
      script no longer enables the maintainer mode. (ebourg)
    </fix>
    <update>
      Update minimum recommended OpenSSL version to 1.0.2k. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.10">
  <changelog>
    <update>
      Update minimum recommended OpenSSL version to 1.0.2j. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.9">
  <changelog>
    <update>
      Update minimum recommended OpenSSL version to 1.0.2i. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.8">
  <changelog>
    <fix>
      <bug>59616</bug>: Correct the Windows build files so that OCSP is
      correctly enabled and disabled in the respective Windows binaries. (markt)
    </fix>
    <fix>
      Correctly handle OS level EAGAIN return codes during non-blocking TLS I/O.
      (markt)
    </fix>
    <fix>
      Correct a potential performance problem identified by Nate Clark due to
      Tomcat Native providing OpenSSL with thread identifiers poorly suited to
      the hash function used by OpenSSL when selecting a bucket for the hash
      that holds the per thread error data. Tomcat Native on Windows and on
      Solaris were not affected. A fix has been applied for OSX and Linux. Other
      platforms may still be affected. (markt/rjung)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.7">
  <changelog>
    <update>
      Update minimum recommended OpenSSL version to 1.0.2h. (markt)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.6">
  <changelog>
    <update>
      Change the OpenSSL version check in <code>configure</code>
      to be fatal. (rjung)
    </update>
    <update>
      Use new OpenSSL 1.1.0 protocol version max and min API
      when creating a new SSL context. (rjung)
    </update>
    <update>
      Improve renegotiation code and make it compatible with
      OpenSSL 1.1.0. (rjung)
    </update>
    <scode>
      OpenSSL 1.1.0 compatibility updates. (rjung)
    </scode>
    <fix>
      Fix some compiler warnings in native ssl code. (rjung)
    </fix>
    <add>
      Add support for using Java keystores for certificate chains. (markt)
    </add>
    <update>
      Remove the explicit CRL check when verifying certificates.
      The checks were already part of the internal certification
      verification since OpenSSL 0.9.7. Backport from mod_ssl.
      (rjung)
    </update>
  </changelog>
</section>
<section name="Changes in 1.2.5">
  <changelog>
    <update>
      Enable OpenSSL version check in <code>configure</code> by
      default. It can be turned off using
      <code>--disable-openssl-version-check</code>. (rjung)
    </update>
    <fix>
      <bug>59024</bug>: Native function <code>versionString()</code> and
      for OpenSSL 1.1.0 also <code>version()</code> (both in in ssl.c) now
      return the OpenSSL run time version, not the compile time version.
      (rjung)
    </fix>
    <scode>
      Track changes in the OpenSSL master branch so it is possible to build
      Tomcat Native with that branch. (billbarker)
    </scode>
  </changelog>
</section>
<section name="Changes in 1.2.4">
  <changelog>
    <fix>
      SSL.getHandshakeCount(), which was unused, now returns the handshake
      completed count rather than the handshake started count. (remm)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.3">
  <changelog>
    <fix>
      Remove Java classes that do not have C implementation code
      for their native methods in the current library. They were
      used for NPN support which is superseded by ALPN support
      in the current code. (kkolinko)
    </fix>
    <fix>
      Fix typo in declaration of a stub method used when the library is
      compiled without OpenSSL support. (kkolinko)
    </fix>
    <fix>
      Fix the signature of the implementation of the native SSL method
      newSSL() in the case when OPENSSL is not available. (rjung)
    </fix>
    <fix>
      Fix the signature of the implementation of the native SSLSocket
      method getInfoB() to return jbyteArray instead of jobject.
      This is consistent with what it actually returns and how
      the native Java method is declared. (rjung)
    </fix>
    <add>
      Add support for using Java keystores for certificates and keys. (jfclere)
    </add>
    <scode>
      Remove code that performs a read after a renegotiation that appears to be
      unnecessary with OpenSSL 1.0.2. (billbarker)
    </scode>
    <add>
      Expose <code>SSL_renegotiate</code> to the Java API. (remm)
    </add>
  </changelog>
</section>
<section name="Changes in 1.2.2">
  <changelog>
    <fix>
      Fix broken debug and maintainer mode build. (rjung)
    </fix>
    <fix>
      Forward port additional fixes to the OpenSSL I/O to align it with
      non-OpenSSL I/O. (markt)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.1">
  <changelog>
    <fix>
      <bug>58566</bug>: Enable Tomcat Native 1.2.x to work with Tomcat releases
      that do not have the necessary Java code to support SNI. (markt)
    </fix>
    <update>
      Minor rework of "buildconf" script. (rjung)
    </update>
    <fix>
      Fix APR dependency version expression in RPM spec file. (rjung)
    </fix>
    <fix>
      Fix major library version number in Windows build files, RPM spec file
      and build description. (rjung)
    </fix>
    <fix>
      Remove files "KEYS" and "download_deps.sh" from Windows (zip)
      source distribution. (rjung)
    </fix>
    <fix>
      Fix "unused variable" compiler warning. (rjung)
    </fix>
  </changelog>
</section>
<section name="Changes in 1.2.0">
  <changelog>
    <add>
      Add support for TLS extension ALPN. (markt)
    </add>
    <add>
      Add support for TLS extension SNI (Server Name Indication).
      (markt)
    </add>
    <add>
      Add support for OpenSSL BIO. (jfclere)
    </add>
    <add>
      Support wakeable pollsets and add Poll.interrupt() API.
      (mturk)
    </add>
    <add>
      Add Pool.unmanaged() API. (mturk)
    </add>
    <update>
      APIs SSL.generateRSATempKey() and SSL.loadDSATempKey()
      have been removed. (rjung)
    </update>
    <update>
      The minimum required APR version is 1.4.3.
    </update>
    <update>
      The minimum required OpenSSL version is 1.0.2.
    </update>
  </changelog>
</section>
<section name="Changes in 1.1.x">
<p>Please see the <a href="../../native-1.1-doc/miscellaneous/changelog.html">1.1.x
   changelog</a>.</p>
</section>
</body>
</document>
