This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-native.git
The following commit(s) were added to refs/heads/main by this push:
new eb9b8d866 Align Java code with current 12.0.x
eb9b8d866 is described below
commit eb9b8d866eba37463a1f344a2c3276b202c2cfe0
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Jun 11 16:58:05 2026 +0100
Align Java code with current 12.0.x
---
java/org/apache/tomcat/jni/AprStatus.java | 50 +++
java/org/apache/tomcat/jni/Buffer.java | 3 +
java/org/apache/tomcat/jni/Library.java | 47 +-
.../apache/tomcat/jni/LibraryNotFoundError.java | 15 +-
java/org/apache/tomcat/jni/Pool.java | 10 +-
java/org/apache/tomcat/jni/SSL.java | 478 ++++++++++++++++++++-
java/org/apache/tomcat/jni/SSLConf.java | 10 +
java/org/apache/tomcat/jni/SSLContext.java | 151 ++++---
8 files changed, 696 insertions(+), 68 deletions(-)
diff --git a/java/org/apache/tomcat/jni/AprStatus.java
b/java/org/apache/tomcat/jni/AprStatus.java
index 5b463afd6..9b2a96c7e 100644
--- a/java/org/apache/tomcat/jni/AprStatus.java
+++ b/java/org/apache/tomcat/jni/AprStatus.java
@@ -29,39 +29,87 @@ public class AprStatus {
private static volatile int openSSLVersion = 0;
private static ReentrantReadWriteLock statusLock = new
ReentrantReadWriteLock();
+ /**
+ * Prevents instantiation.
+ */
+ private AprStatus() {
+ }
+
+ /**
+ * Returns whether APR has been initialized.
+ *
+ * @return {@code true} if APR has been initialized
+ */
public static boolean isAprInitialized() {
return aprInitialized;
}
+ /**
+ * Returns whether APR is available.
+ *
+ * @return {@code true} if APR is available
+ */
public static boolean isAprAvailable() {
return aprAvailable;
}
+ /**
+ * Returns whether OpenSSL is in use.
+ *
+ * @return {@code true} if OpenSSL is in use
+ */
public static boolean getUseOpenSSL() {
return useOpenSSL;
}
+ /**
+ * Returns whether an APR instance has been created.
+ *
+ * @return {@code true} if an APR instance has been created
+ */
public static boolean isInstanceCreated() {
return instanceCreated;
}
+ /**
+ * Sets the APR initialized status.
+ *
+ * @param aprInitialized the APR initialized status to set
+ */
public static void setAprInitialized(boolean aprInitialized) {
AprStatus.aprInitialized = aprInitialized;
}
+ /**
+ * Sets the APR available status.
+ *
+ * @param aprAvailable the APR available status to set
+ */
public static void setAprAvailable(boolean aprAvailable) {
AprStatus.aprAvailable = aprAvailable;
}
+ /**
+ * Sets whether to use OpenSSL.
+ *
+ * @param useOpenSSL the use OpenSSL status to set
+ */
public static void setUseOpenSSL(boolean useOpenSSL) {
AprStatus.useOpenSSL = useOpenSSL;
}
+ /**
+ * Sets the instance created status.
+ *
+ * @param instanceCreated the instance created status to set
+ */
public static void setInstanceCreated(boolean instanceCreated) {
AprStatus.instanceCreated = instanceCreated;
}
/**
+ * Returns the OpenSSL version.
+ *
* @return the openSSLVersion
*/
public static int getOpenSSLVersion() {
@@ -69,6 +117,8 @@ public class AprStatus {
}
/**
+ * Sets the OpenSSL version.
+ *
* @param openSSLVersion the openSSLVersion to set
*/
public static void setOpenSSLVersion(int openSSLVersion) {
diff --git a/java/org/apache/tomcat/jni/Buffer.java
b/java/org/apache/tomcat/jni/Buffer.java
index 530021c5f..6e1c64d1b 100644
--- a/java/org/apache/tomcat/jni/Buffer.java
+++ b/java/org/apache/tomcat/jni/Buffer.java
@@ -23,6 +23,9 @@ import java.nio.ByteBuffer;
*/
public class Buffer {
+ /** Utility class - do not instantiate. */
+ private Buffer() { }
+
/**
* Returns the memory address of the ByteBuffer.
*
diff --git a/java/org/apache/tomcat/jni/Library.java
b/java/org/apache/tomcat/jni/Library.java
index 8b89ff73a..ed4909cc9 100644
--- a/java/org/apache/tomcat/jni/Library.java
+++ b/java/org/apache/tomcat/jni/Library.java
@@ -18,6 +18,9 @@ package org.apache.tomcat.jni;
import java.io.File;
+/**
+ * Manages loading of the Tomcat Native (tcnative) library.
+ */
public final class Library {
/* Default library names - use 2.x in preference to 1.x if both are
available */
@@ -110,27 +113,51 @@ public final class Library {
/* Internal function for loading APR Features */
private static native int version(int what);
- /* TCN_MAJOR_VERSION */
+ /**
+ * TCN major version.
+ */
public static int TCN_MAJOR_VERSION = 0;
- /* TCN_MINOR_VERSION */
+ /**
+ * TCN minor version.
+ */
public static int TCN_MINOR_VERSION = 0;
- /* TCN_PATCH_VERSION */
+ /**
+ * TCN patch version.
+ */
public static int TCN_PATCH_VERSION = 0;
- /* TCN_IS_DEV_VERSION */
+ /**
+ * TCN is development version flag.
+ */
public static int TCN_IS_DEV_VERSION = 0;
- /* APR_MAJOR_VERSION */
+ /**
+ * APR major version.
+ */
public static int APR_MAJOR_VERSION = 0;
- /* APR_MINOR_VERSION */
+ /**
+ * APR minor version.
+ */
public static int APR_MINOR_VERSION = 0;
- /* APR_PATCH_VERSION */
+ /**
+ * APR patch version.
+ */
public static int APR_PATCH_VERSION = 0;
- /* APR_IS_DEV_VERSION */
+ /**
+ * APR is development version flag.
+ */
public static int APR_IS_DEV_VERSION = 0;
- /* TCN_VERSION_STRING */
+ /**
+ * Returns the TCN version string.
+ *
+ * @return the TCN version string
+ */
public static native String versionString();
- /* APR_VERSION_STRING */
+ /**
+ * Returns the APR version string.
+ *
+ * @return the APR version string
+ */
public static native String aprVersionString();
/**
diff --git a/java/org/apache/tomcat/jni/LibraryNotFoundError.java
b/java/org/apache/tomcat/jni/LibraryNotFoundError.java
index 3d0c16003..a8d775b5e 100644
--- a/java/org/apache/tomcat/jni/LibraryNotFoundError.java
+++ b/java/org/apache/tomcat/jni/LibraryNotFoundError.java
@@ -18,22 +18,35 @@ package org.apache.tomcat.jni;
import java.io.Serial;
+/**
+ * Exception thrown when a required native library cannot be found.
+ */
public class LibraryNotFoundError extends UnsatisfiedLinkError {
@Serial
private static final long serialVersionUID = 1L;
+ /**
+ * The names of the libraries that failed to load.
+ */
private final String libraryNames;
/**
+ * Constructs an instance with the given library names and error messages.
+ *
* @param libraryNames A list of the file names of the native libraries
that failed to load
- * @param errors A list of the error messages received when trying
to load each of the libraries
+ * @param errors A list of the error messages received when trying to load
each of the libraries
*/
public LibraryNotFoundError(String libraryNames, String errors) {
super(errors);
this.libraryNames = libraryNames;
}
+ /**
+ * Returns the names of the libraries that failed to load.
+ *
+ * @return the library names
+ */
public String getLibraryNames() {
return libraryNames;
}
diff --git a/java/org/apache/tomcat/jni/Pool.java
b/java/org/apache/tomcat/jni/Pool.java
index 628f99a5b..03afd7ed7 100644
--- a/java/org/apache/tomcat/jni/Pool.java
+++ b/java/org/apache/tomcat/jni/Pool.java
@@ -17,10 +17,16 @@
package org.apache.tomcat.jni;
/**
- * Provides access to APR memory pools which are used to manage memory
allocations for natively created instances.
- */
+ * Provides access to APR memory pools which are used to manage memory
allocations for natively created instances.
+ */
public class Pool {
+ /**
+ * Default constructor required by JNI.
+ */
+ public Pool() {
+ }
+
/**
* Create a new pool.
*
diff --git a/java/org/apache/tomcat/jni/SSL.java
b/java/org/apache/tomcat/jni/SSL.java
index 24eaffb3e..8753beb09 100644
--- a/java/org/apache/tomcat/jni/SSL.java
+++ b/java/org/apache/tomcat/jni/SSL.java
@@ -16,61 +16,172 @@
*/
package org.apache.tomcat.jni;
+/**
+ * JNI bindings for OpenSSL SSL functionality.
+ */
public final class SSL {
+ /**
+ * Private constructor to prevent instantiation.
+ */
+ private SSL() {
+ }
+
/*
* Type definitions mostly from mod_ssl
*/
+ /**
+ * Unset value.
+ */
public static final int UNSET = -1;
/*
* Define the certificate algorithm types
*/
+ /**
+ * Unknown algorithm type.
+ */
public static final int SSL_ALGO_UNKNOWN = 0;
+ /**
+ * RSA algorithm type.
+ */
public static final int SSL_ALGO_RSA = (1 << 0);
+ /**
+ * DSA algorithm type.
+ */
public static final int SSL_ALGO_DSA = (1 << 1);
+ /**
+ * All algorithm types.
+ */
public static final int SSL_ALGO_ALL = (SSL_ALGO_RSA | SSL_ALGO_DSA);
+ /**
+ * RSA algorithm index.
+ */
public static final int SSL_AIDX_RSA = 0;
+ /**
+ * DSA algorithm index.
+ */
public static final int SSL_AIDX_DSA = 1;
+ /**
+ * ECC algorithm index.
+ */
public static final int SSL_AIDX_ECC = 3;
+ /**
+ * Maximum algorithm index.
+ */
public static final int SSL_AIDX_MAX = 4;
/*
* Define IDs for the temporary RSA keys and DH params
*/
+ /**
+ * 512-bit temporary RSA key.
+ */
public static final int SSL_TMP_KEY_RSA_512 = 0;
+ /**
+ * 1024-bit temporary RSA key.
+ */
public static final int SSL_TMP_KEY_RSA_1024 = 1;
+ /**
+ * 2048-bit temporary RSA key.
+ */
public static final int SSL_TMP_KEY_RSA_2048 = 2;
+ /**
+ * 4096-bit temporary RSA key.
+ */
public static final int SSL_TMP_KEY_RSA_4096 = 3;
+ /**
+ * 512-bit temporary DH key.
+ */
public static final int SSL_TMP_KEY_DH_512 = 4;
+ /**
+ * 1024-bit temporary DH key.
+ */
public static final int SSL_TMP_KEY_DH_1024 = 5;
+ /**
+ * 2048-bit temporary DH key.
+ */
public static final int SSL_TMP_KEY_DH_2048 = 6;
+ /**
+ * 4096-bit temporary DH key.
+ */
public static final int SSL_TMP_KEY_DH_4096 = 7;
+ /**
+ * Maximum temporary key ID.
+ */
public static final int SSL_TMP_KEY_MAX = 8;
/*
* Define the SSL options
*/
+ /**
+ * No SSL options.
+ */
public static final int SSL_OPT_NONE = 0;
+ /**
+ * SSL option for relative settings.
+ */
public static final int SSL_OPT_RELSET = (1 << 0);
+ /**
+ * SSL option for standard environment variables.
+ */
public static final int SSL_OPT_STDENVVARS = (1 << 1);
+ /**
+ * SSL option for exporting certificate data.
+ */
public static final int SSL_OPT_EXPORTCERTDATA = (1 << 3);
+ /**
+ * SSL option for fake basic authentication.
+ */
public static final int SSL_OPT_FAKEBASICAUTH = (1 << 4);
+ /**
+ * SSL option for strict require.
+ */
public static final int SSL_OPT_STRICTREQUIRE = (1 << 5);
+ /**
+ * SSL option for optional renegotiation.
+ */
public static final int SSL_OPT_OPTRENEGOTIATE = (1 << 6);
+ /**
+ * All SSL options combined.
+ */
public static final int SSL_OPT_ALL = (SSL_OPT_STDENVVARS |
SSL_OPT_EXPORTCERTDATA | SSL_OPT_FAKEBASICAUTH |
SSL_OPT_STRICTREQUIRE | SSL_OPT_OPTRENEGOTIATE);
/*
* Define the SSL Protocol options
*/
+ /**
+ * No protocol options.
+ */
public static final int SSL_PROTOCOL_NONE = 0;
+ /**
+ * SSLv2 protocol.
+ */
public static final int SSL_PROTOCOL_SSLV2 = (1 << 0);
+ /**
+ * SSLv3 protocol.
+ */
public static final int SSL_PROTOCOL_SSLV3 = (1 << 1);
+ /**
+ * TLSv1.0 protocol.
+ */
public static final int SSL_PROTOCOL_TLSV1 = (1 << 2);
+ /**
+ * TLSv1.1 protocol.
+ */
public static final int SSL_PROTOCOL_TLSV1_1 = (1 << 3);
+ /**
+ * TLSv1.2 protocol.
+ */
public static final int SSL_PROTOCOL_TLSV1_2 = (1 << 4);
+ /**
+ * TLSv1.3 protocol.
+ */
public static final int SSL_PROTOCOL_TLSV1_3 = (1 << 5);
+ /**
+ * All TLS protocol versions combined.
+ */
public static final int SSL_PROTOCOL_ALL =
(SSL_PROTOCOL_TLSV1 | SSL_PROTOCOL_TLSV1_1 | SSL_PROTOCOL_TLSV1_2
| SSL_PROTOCOL_TLSV1_3);
@@ -78,30 +189,87 @@ public final class SSL {
/*
* Define the SSL verify levels
*/
+ /**
+ * Client verification unset.
+ */
public static final int SSL_CVERIFY_UNSET = UNSET;
+ /**
+ * No client certificate verification.
+ */
public static final int SSL_CVERIFY_NONE = 0;
+ /**
+ * Optional client certificate verification.
+ */
public static final int SSL_CVERIFY_OPTIONAL = 1;
+ /**
+ * Required client certificate verification.
+ */
public static final int SSL_CVERIFY_REQUIRE = 2;
+ /**
+ * Optional client certificate verification without CA requirement.
+ */
public static final int SSL_CVERIFY_OPTIONAL_NO_CA = 3;
/*
* Use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are
'ored' with SSL_VERIFY_PEER if they are
* desired
*/
+ /**
+ * No peer verification.
+ */
public static final int SSL_VERIFY_NONE = 0;
+ /**
+ * Verify peer certificate.
+ */
public static final int SSL_VERIFY_PEER = 1;
+ /**
+ * Fail if no peer certificate is presented.
+ */
public static final int SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2;
+ /**
+ * Only verify client certificate once per session.
+ */
public static final int SSL_VERIFY_CLIENT_ONCE = 4;
+ /**
+ * Strict peer verification including certificate requirement.
+ */
public static final int SSL_VERIFY_PEER_STRICT = (SSL_VERIFY_PEER |
SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
+ /**
+ * Workaround for Microsoft session ID bug.
+ */
public static final int SSL_OP_MICROSOFT_SESS_ID_BUG = 0x00000001;
+ /**
+ * Workaround for Netscape challenge bug.
+ */
public static final int SSL_OP_NETSCAPE_CHALLENGE_BUG = 0x00000002;
+ /**
+ * Workaround for Netscape cipher change bug.
+ */
public static final int SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG =
0x00000008;
+ /**
+ * Workaround for SSLREF2 certificate type reuse bug.
+ */
public static final int SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 0x00000010;
+ /**
+ * Workaround for Microsoft SSLv3 buffer bug.
+ */
public static final int SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 0x00000020;
+ /**
+ * Workaround for MSIE SSLv2 RSA padding bug.
+ */
public static final int SSL_OP_MSIE_SSLV2_RSA_PADDING = 0x00000040;
+ /**
+ * Workaround for SSLeay 0.8.0 client DH bug.
+ */
public static final int SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 0x00000080;
+ /**
+ * Workaround for TLS D5 bug.
+ */
public static final int SSL_OP_TLS_D5_BUG = 0x00000100;
+ /**
+ * Workaround for TLS block padding bug.
+ */
public static final int SSL_OP_TLS_BLOCK_PADDING_BUG = 0x00000200;
/*
@@ -109,140 +277,409 @@ public final class SSL {
* application protocol) the workaround is not needed. Unfortunately some
broken SSL/TLS implementations cannot
* handle it at all, which is why we include it in SSL_OP_ALL.
*/
+ /**
+ * Disable empty fragment insertion for CBC vulnerability workaround.
+ */
public static final int SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 0x00000800;
/*
* SSL_OP_ALL: various bug workarounds that should be rather harmless.
This used to be 0x000FFFFFL before 0.9.7.
*/
+ /**
+ * All bug workaround options combined.
+ */
public static final int SSL_OP_ALL = 0x00000FFF;
- /* As server, disallow session resumption on renegotiation */
+/* As server, disallow session resumption on renegotiation */
+ /**
+ * Disallow session resumption on renegotiation.
+ */
public static final int SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION =
0x00010000;
/* Don't use compression even if supported */
+ /**
+ * Disable compression.
+ */
public static final int SSL_OP_NO_COMPRESSION = 0x00020000;
/* Permit unsafe legacy renegotiation */
+ /**
+ * Allow unsafe legacy renegotiation.
+ */
public static final int SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION =
0x00040000;
/* If set, always create a new key when using tmp_eddh parameters */
+ /**
+ * Always create a new key when using ECDH parameters.
+ */
public static final int SSL_OP_SINGLE_ECDH_USE = 0x00080000;
/* If set, always create a new key when using tmp_dh parameters */
+ /**
+ * Always create a new key when using DH parameters.
+ */
public static final int SSL_OP_SINGLE_DH_USE = 0x00100000;
/*
* Set to always use the tmp_rsa key when doing RSA operations, even when
this violates protocol specs
*/
+ /**
+ * Always use ephemeral RSA key for RSA operations.
+ */
public static final int SSL_OP_EPHEMERAL_RSA = 0x00200000;
/*
* Set on servers to choose the cipher according to the server's
preferences
*/
+ /**
+ * Server prefers its own cipher order.
+ */
public static final int SSL_OP_CIPHER_SERVER_PREFERENCE = 0x00400000;
/*
* If set, a server will allow a client to issue an SSLv3.0 version number
as latest version supported in the
* premaster secret, even when TLSv1.0 (version 3.1) was announced in the
client hello. Normally this is forbidden
* to prevent version rollback attacks.
*/
+ /**
+ * Allow TLS rollback bug workaround.
+ */
public static final int SSL_OP_TLS_ROLLBACK_BUG = 0x00800000;
+ /**
+ * Disable SSLv2 protocol.
+ */
public static final int SSL_OP_NO_SSLv2 = 0x01000000;
+ /**
+ * Disable SSLv3 protocol.
+ */
public static final int SSL_OP_NO_SSLv3 = 0x02000000;
+ /**
+ * Disable TLSv1.0 protocol.
+ */
public static final int SSL_OP_NO_TLSv1 = 0x04000000;
+ /**
+ * Disable TLSv1.2 protocol.
+ */
public static final int SSL_OP_NO_TLSv1_2 = 0x08000000;
+ /**
+ * Disable TLSv1.1 protocol.
+ */
public static final int SSL_OP_NO_TLSv1_1 = 0x10000000;
+ /**
+ * Disable TLS session tickets.
+ */
public static final int SSL_OP_NO_TICKET = 0x00004000;
+ /**
+ * Workaround for Netscape CA DN bug.
+ */
public static final int SSL_OP_NETSCAPE_CA_DN_BUG = 0x20000000;
+ /**
+ * Workaround for Netscape demo cipher change bug.
+ */
public static final int SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG =
0x40000000;
+ /**
+ * Undefined certificate format.
+ */
public static final int SSL_CRT_FORMAT_UNDEF = 0;
+ /**
+ * ASN.1 certificate format.
+ */
public static final int SSL_CRT_FORMAT_ASN1 = 1;
+ /**
+ * Text certificate format.
+ */
public static final int SSL_CRT_FORMAT_TEXT = 2;
+ /**
+ * PEM certificate format.
+ */
public static final int SSL_CRT_FORMAT_PEM = 3;
+ /**
+ * Netscape certificate format.
+ */
public static final int SSL_CRT_FORMAT_NETSCAPE = 4;
+ /**
+ * PKCS12 certificate format.
+ */
public static final int SSL_CRT_FORMAT_PKCS12 = 5;
+ /**
+ * S/MIME certificate format.
+ */
public static final int SSL_CRT_FORMAT_SMIME = 6;
+ /**
+ * Engine certificate format.
+ */
public static final int SSL_CRT_FORMAT_ENGINE = 7;
+ /**
+ * Client SSL mode.
+ */
public static final int SSL_MODE_CLIENT = 0;
+ /**
+ * Server SSL mode.
+ */
public static final int SSL_MODE_SERVER = 1;
+ /**
+ * Combined client and server SSL mode.
+ */
public static final int SSL_MODE_COMBINED = 2;
+ /**
+ * Configuration flag for command line.
+ */
public static final int SSL_CONF_FLAG_CMDLINE = 0x0001;
+ /**
+ * Configuration flag for file.
+ */
public static final int SSL_CONF_FLAG_FILE = 0x0002;
+ /**
+ * Configuration flag for client.
+ */
public static final int SSL_CONF_FLAG_CLIENT = 0x0004;
+ /**
+ * Configuration flag for server.
+ */
public static final int SSL_CONF_FLAG_SERVER = 0x0008;
+ /**
+ * Configuration flag to show errors.
+ */
public static final int SSL_CONF_FLAG_SHOW_ERRORS = 0x0010;
+ /**
+ * Configuration flag for certificate context.
+ */
public static final int SSL_CONF_FLAG_CERTIFICATE = 0x0020;
+ /**
+ * Unknown configuration type.
+ */
public static final int SSL_CONF_TYPE_UNKNOWN = 0x0000;
+ /**
+ * String configuration type.
+ */
public static final int SSL_CONF_TYPE_STRING = 0x0001;
+ /**
+ * File configuration type.
+ */
public static final int SSL_CONF_TYPE_FILE = 0x0002;
+ /**
+ * Directory configuration type.
+ */
public static final int SSL_CONF_TYPE_DIR = 0x0003;
+ /**
+ * Shutdown type unset.
+ */
public static final int SSL_SHUTDOWN_TYPE_UNSET = 0;
+ /**
+ * Standard shutdown type.
+ */
public static final int SSL_SHUTDOWN_TYPE_STANDARD = 1;
+ /**
+ * Unclean shutdown type.
+ */
public static final int SSL_SHUTDOWN_TYPE_UNCLEAN = 2;
+ /**
+ * Accurate shutdown type.
+ */
public static final int SSL_SHUTDOWN_TYPE_ACCURATE = 3;
+ /**
+ * Info flag for session ID.
+ */
public static final int SSL_INFO_SESSION_ID = 0x0001;
+ /**
+ * Info flag for cipher name.
+ */
public static final int SSL_INFO_CIPHER = 0x0002;
+ /**
+ * Info flag for cipher effective key size.
+ */
public static final int SSL_INFO_CIPHER_USEKEYSIZE = 0x0003;
+ /**
+ * Info flag for cipher algorithm key size.
+ */
public static final int SSL_INFO_CIPHER_ALGKEYSIZE = 0x0004;
+ /**
+ * Info flag for cipher version.
+ */
public static final int SSL_INFO_CIPHER_VERSION = 0x0005;
+ /**
+ * Info flag for cipher description.
+ */
public static final int SSL_INFO_CIPHER_DESCRIPTION = 0x0006;
+ /**
+ * Info flag for protocol version.
+ */
public static final int SSL_INFO_PROTOCOL = 0x0007;
/*
* To obtain the CountryName of the Client Certificate Issuer use the
SSL_INFO_CLIENT_I_DN + SSL_INFO_DN_COUNTRYNAME
*/
+ /**
+ * Info flag for client subject distinguished name.
+ */
public static final int SSL_INFO_CLIENT_S_DN = 0x0010;
+ /**
+ * Info flag for client issuer distinguished name.
+ */
public static final int SSL_INFO_CLIENT_I_DN = 0x0020;
+ /**
+ * Info flag for server subject distinguished name.
+ */
public static final int SSL_INFO_SERVER_S_DN = 0x0040;
+ /**
+ * Info flag for server issuer distinguished name.
+ */
public static final int SSL_INFO_SERVER_I_DN = 0x0080;
+ /**
+ * DN field for country name.
+ */
public static final int SSL_INFO_DN_COUNTRYNAME = 0x0001;
+ /**
+ * DN field for state or province name.
+ */
public static final int SSL_INFO_DN_STATEORPROVINCENAME = 0x0002;
+ /**
+ * DN field for locality name.
+ */
public static final int SSL_INFO_DN_LOCALITYNAME = 0x0003;
+ /**
+ * DN field for organization name.
+ */
public static final int SSL_INFO_DN_ORGANIZATIONNAME = 0x0004;
+ /**
+ * DN field for organizational unit name.
+ */
public static final int SSL_INFO_DN_ORGANIZATIONALUNITNAME = 0x0005;
+ /**
+ * DN field for common name.
+ */
public static final int SSL_INFO_DN_COMMONNAME = 0x0006;
+ /**
+ * DN field for title.
+ */
public static final int SSL_INFO_DN_TITLE = 0x0007;
+ /**
+ * DN field for initials.
+ */
public static final int SSL_INFO_DN_INITIALS = 0x0008;
+ /**
+ * DN field for given name.
+ */
public static final int SSL_INFO_DN_GIVENNAME = 0x0009;
+ /**
+ * DN field for surname.
+ */
public static final int SSL_INFO_DN_SURNAME = 0x000A;
+ /**
+ * DN field for description.
+ */
public static final int SSL_INFO_DN_DESCRIPTION = 0x000B;
+ /**
+ * DN field for unique identifier.
+ */
public static final int SSL_INFO_DN_UNIQUEIDENTIFIER = 0x000C;
+ /**
+ * DN field for email address.
+ */
public static final int SSL_INFO_DN_EMAILADDRESS = 0x000D;
+ /**
+ * Info flag for client certificate version.
+ */
public static final int SSL_INFO_CLIENT_M_VERSION = 0x0101;
+ /**
+ * Info flag for client certificate serial number.
+ */
public static final int SSL_INFO_CLIENT_M_SERIAL = 0x0102;
+ /**
+ * Info flag for client certificate validity start.
+ */
public static final int SSL_INFO_CLIENT_V_START = 0x0103;
+ /**
+ * Info flag for client certificate validity end.
+ */
public static final int SSL_INFO_CLIENT_V_END = 0x0104;
+ /**
+ * Info flag for client certificate signature algorithm.
+ */
public static final int SSL_INFO_CLIENT_A_SIG = 0x0105;
+ /**
+ * Info flag for client certificate public key algorithm.
+ */
public static final int SSL_INFO_CLIENT_A_KEY = 0x0106;
+ /**
+ * Info flag for client certificate data.
+ */
public static final int SSL_INFO_CLIENT_CERT = 0x0107;
+ /**
+ * Info flag for client certificate validity remaining.
+ */
public static final int SSL_INFO_CLIENT_V_REMAIN = 0x0108;
+ /**
+ * Info flag for server certificate version.
+ */
public static final int SSL_INFO_SERVER_M_VERSION = 0x0201;
+ /**
+ * Info flag for server certificate serial number.
+ */
public static final int SSL_INFO_SERVER_M_SERIAL = 0x0202;
+ /**
+ * Info flag for server certificate validity start.
+ */
public static final int SSL_INFO_SERVER_V_START = 0x0203;
+ /**
+ * Info flag for server certificate validity end.
+ */
public static final int SSL_INFO_SERVER_V_END = 0x0204;
+ /**
+ * Info flag for server certificate signature algorithm.
+ */
public static final int SSL_INFO_SERVER_A_SIG = 0x0205;
+ /**
+ * Info flag for server certificate public key algorithm.
+ */
public static final int SSL_INFO_SERVER_A_KEY = 0x0206;
+ /**
+ * Info flag for server certificate data.
+ */
public static final int SSL_INFO_SERVER_CERT = 0x0207;
/*
* Return client certificate chain. Add certificate chain number to that
flag (0 ... verify depth)
*/
+ /**
+ * Info flag for client certificate chain.
+ */
public static final int SSL_INFO_CLIENT_CERT_CHAIN = 0x0400;
/* Only support OFF and SERVER for now */
+ /**
+ * Session cache disabled.
+ */
public static final long SSL_SESS_CACHE_OFF = 0x0000;
+ /**
+ * Session cache enabled for server.
+ */
public static final long SSL_SESS_CACHE_SERVER = 0x0002;
+ /**
+ * Do not advertise protocol on selector failure.
+ */
public static final int SSL_SELECTOR_FAILURE_NO_ADVERTISE = 0;
+ /**
+ * Choose last protocol on selector failure.
+ */
public static final int SSL_SELECTOR_FAILURE_CHOOSE_MY_LAST_PROTOCOL = 1;
- /* Return OpenSSL version number (run time version) */
+ /**
+ * Return OpenSSL version number (run time version).
+ *
+ * @return OpenSSL version number
+ */
public static native int version();
- /* Return OpenSSL version string (run time version) */
+ /**
+ * Return OpenSSL version string (run time version).
+ *
+ * @return OpenSSL version string
+ */
public static native String versionString();
/**
@@ -303,17 +740,50 @@ public final class SSL {
* Begin Twitter API additions
*/
+ /**
+ * Shutdown has been sent.
+ */
public static final int SSL_SENT_SHUTDOWN = 1;
+ /**
+ * Shutdown has been received.
+ */
public static final int SSL_RECEIVED_SHUTDOWN = 2;
+ /**
+ * No SSL error.
+ */
public static final int SSL_ERROR_NONE = 0;
+ /**
+ * SSL library error.
+ */
public static final int SSL_ERROR_SSL = 1;
+ /**
+ * SSL operation would block reading.
+ */
public static final int SSL_ERROR_WANT_READ = 2;
+ /**
+ * SSL operation would block writing.
+ */
public static final int SSL_ERROR_WANT_WRITE = 3;
+ /**
+ * SSL operation wants X.509 lookup.
+ */
public static final int SSL_ERROR_WANT_X509_LOOKUP = 4;
+ /**
+ * SSL syscall error.
+ */
public static final int SSL_ERROR_SYSCALL = 5; /* look at error
stack/return value/errno */
+ /**
+ * SSL connection closed cleanly (zero return).
+ */
public static final int SSL_ERROR_ZERO_RETURN = 6;
+ /**
+ * SSL operation wants connect.
+ */
public static final int SSL_ERROR_WANT_CONNECT = 7;
+ /**
+ * SSL operation wants accept.
+ */
public static final int SSL_ERROR_WANT_ACCEPT = 8;
/**
@@ -505,6 +975,8 @@ public final class SSL {
*/
public static native int getPostHandshakeAuthInProgress(long ssl);
+ public static native void markPostHandshakeAuthComplete(long ssl);
+
/**
* SSL_in_init.
*
diff --git a/java/org/apache/tomcat/jni/SSLConf.java
b/java/org/apache/tomcat/jni/SSLConf.java
index c474afe82..755416b29 100644
--- a/java/org/apache/tomcat/jni/SSLConf.java
+++ b/java/org/apache/tomcat/jni/SSLConf.java
@@ -16,8 +16,18 @@
*/
package org.apache.tomcat.jni;
+/**
+ * JNI bindings for OpenSSL SSL_CONF operations.
+ */
public final class SSLConf {
+ /**
+ * Default constructor. This class provides only static methods.
+ */
+ public SSLConf() {
+ super();
+ }
+
/**
* Create a new SSL_CONF context.
*
diff --git a/java/org/apache/tomcat/jni/SSLContext.java
b/java/org/apache/tomcat/jni/SSLContext.java
index ae307a6b2..25a3718ce 100644
--- a/java/org/apache/tomcat/jni/SSLContext.java
+++ b/java/org/apache/tomcat/jni/SSLContext.java
@@ -16,12 +16,21 @@
*/
package org.apache.tomcat.jni;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
+/**
+ * JNI bindings for OpenSSL SSL_CTX operations.
+ */
public final class SSLContext {
+ /**
+ * Default constructor. This class provides only static methods.
+ */
+ public SSLContext() {
+ super();
+ }
+
+ /**
+ * Default session ID context value.
+ */
public static final byte[] DEFAULT_SESSION_ID_CONTEXT = new byte[] { 'd',
'e', 'f', 'a', 'u', 'l', 't' };
/**
@@ -249,28 +258,114 @@ public final class SSLContext {
/*
* Session resumption statistics methods.
http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html
*/
+
+ /**
+ * Returns the total number of session attempts accepted by the server.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of accepted sessions
+ */
public static native long sessionAccept(long ctx);
+ /**
+ * Returns the number of sessions actually reused on the server side.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of good session accepts
+ */
public static native long sessionAcceptGood(long ctx);
+ /**
+ * Returns the number of session renegotiations on the server side.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session renegotiations accepted
+ */
public static native long sessionAcceptRenegotiate(long ctx);
+ /**
+ * Returns the number of times the session cache grew to the maximum
allowed size and therefore further entries
+ * could not be inserted.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of times the session cache was full
+ */
public static native long sessionCacheFull(long ctx);
+ /**
+ * Returns the number of sessions that were resumed by the callback.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session callback hits
+ */
public static native long sessionCbHits(long ctx);
+ /**
+ * Returns the total number of session connection attempts by the client.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session connects
+ */
public static native long sessionConnect(long ctx);
+ /**
+ * Returns the number of sessions that were actually reused on the client
side.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of good session connects
+ */
public static native long sessionConnectGood(long ctx);
+ /**
+ * Returns the number of session renegotiations on the client side.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session renegotiations connected
+ */
public static native long sessionConnectRenegotiate(long ctx);
+ /**
+ * Returns the number of sessions that were actually reused (hits).
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session hits
+ */
public static native long sessionHits(long ctx);
+ /**
+ * Returns the number of sessions that were not found in the cache
(misses).
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session misses
+ */
public static native long sessionMisses(long ctx);
+ /**
+ * Returns the total number of sessions currently in the cache.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The total number of sessions
+ */
public static native long sessionNumber(long ctx);
+ /**
+ * Returns the number of sessions that have timed out.
+ *
+ * @param ctx Server or Client context to use.
+ *
+ * @return The number of session timeouts
+ */
public static native long sessionTimeouts(long ctx);
/**
@@ -333,54 +428,6 @@ public final class SSLContext {
*/
public static native void setVerify(long ctx, int level, int depth);
- /**
- * When tc-native encounters a SNI extension in the TLS handshake it will
call this method to determine which
- * OpenSSL SSLContext to use for the connection.
- *
- * @param currentCtx The OpenSSL SSLContext that the handshake started to
use. This will be the default OpenSSL
- * SSLContext for the endpoint associated with the
socket.
- * @param sniHostName The host name requested by the client
- *
- * @return The Java representation of the pointer to the OpenSSL
SSLContext to use for the given host or zero if no
- * SSLContext could be identified
- */
- public static long sniCallBack(long currentCtx, String sniHostName) {
- SNICallBack sniCallBack = sniCallBacks.get(Long.valueOf(currentCtx));
- if (sniCallBack == null) {
- return 0;
- }
- // Can't be sure OpenSSL is going to provide the SNI value in lower
case
- // so convert it before looking up the SSLContext
- String hostName = (sniHostName == null) ? null :
sniHostName.toLowerCase(Locale.ENGLISH);
- return sniCallBack.getSslContext(hostName);
- }
-
- /**
- * A map of default SSL Contexts to SNICallBack instances (in Tomcat these
are instances of AprEndpoint) that will
- * be used to determine the SSL Context to use bases on the SNI host name.
It is structured this way since a Tomcat
- * instance may have several TLS enabled endpoints that each have
different SSL Context mappings for the same host
- * name.
- */
- private static final Map<Long,SNICallBack> sniCallBacks = new
ConcurrentHashMap<>();
-
- /**
- * Interface implemented by components that will receive the call back to
select an OpenSSL SSLContext based on the
- * host name requested by the client.
- */
- public interface SNICallBack {
-
- /**
- * This callback is made during the TLS handshake when the client uses
the SNI extension to request a specific
- * TLS host.
- *
- * @param sniHostName The host name requested by the client - must be
in lower case
- *
- * @return The Java representation of the pointer to the OpenSSL
SSLContext to use for the given host or zero if
- * no SSLContext could be identified
- */
- long getSslContext(String sniHostName);
- }
-
/**
* Allow to hook {@link CertificateVerifier} into the handshake
processing. This will call
* {@code SSL_CTX_set_cert_verify_callback} and so replace the default
verification callback used by openssl
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]