This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new f4c5d54ce0 Add doc and jextract helpers
f4c5d54ce0 is described below
commit f4c5d54ce045e87a2ec3a1c70b93d3716a3e2f94
Author: remm <[email protected]>
AuthorDate: Thu Jul 11 10:34:22 2024 +0200
Add doc and jextract helpers
---
res/openssl/README.md | 42 +++++
res/openssl/addlicense.sh | 22 +++
res/openssl/license.header | 17 ++
res/openssl/openssl-tomcat.conf | 370 ++++++++++++++++++++++++++++++++++++++
res/openssl/openssl.h | 31 ++++
webapps/docs/config/listeners.xml | 65 ++++++-
6 files changed, 545 insertions(+), 2 deletions(-)
diff --git a/res/openssl/README.md b/res/openssl/README.md
new file mode 100644
index 0000000000..5fd1eba39e
--- /dev/null
+++ b/res/openssl/README.md
@@ -0,0 +1,42 @@
+# OpenSSL support for Apache Tomcat
+
+## Building
+
+The OpenSSL API support classes can be built using jextract from Java 22+.
+
+jextract is now available in its own standalone repository. Clone
+`https://github.com/openjdk/jextract` in some location and
+checkout the branch that supports Java 22. Please refer to the
+instructions from the repository for building. It should be the
+`panama` branch.
+
+This step is only useful to be able to use additional native APIs from OpenSSL
+or stdlib.
+
+Find include paths using `gcc -xc -E -v -`, on Fedora it is
+`/usr/lib/gcc/x86_64-redhat-linux/12/include`. Edit `openssl-tomcat.conf`
+accordingly to set the appropriate path.
+
+```
+export JEXTRACT_HOME=<pathto>/jextract/build/jextract
+$JEXTRACT_HOME/bin/jextract @openssl-tomcat.conf openssl.h
+```
+Note: The build path for the JDK will be different on other platforms.
+
+The code included was generated using OpenSSL 3.0. As long as things remain
+API compatible, the generated code will still work.
+
+The `openssl-tomcat.conf` will generate a trimmed down OpenSSL API. When
+developing new features, the full API can be generated instead using:
+```
+$JEXTRACT_HOME/bin/jextract --source -t org.apache.tomcat.util.openssl -lssl
-I /usr/lib/gcc/x86_64-redhat-linux/12/include openssl.h --output src/main/java
+```
+
+The `openssl.conf` file lists all the API calls and constants that can be
+generated using jextract, as a reference to what is available. Some macros are
+not supported and have to be reproduced in code.
+
+Before committing updated generated files, they need to have the license header
+added. The `addlicense.sh` script can do that and process all Java source files
+in the `src/main/java/org/apache/tomcat/util/openssl` directory.
+
diff --git a/res/openssl/addlicense.sh b/res/openssl/addlicense.sh
new file mode 100755
index 0000000000..4ab5e3894b
--- /dev/null
+++ b/res/openssl/addlicense.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# 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.
+
+for generated in ../../java/org/apache/tomcat/util/openssl/*.java; do
+ cat license.header $generated >> $generated.$$
+ mv $generated.$$ $generated
+ echo Updated $generated
+done
diff --git a/res/openssl/license.header b/res/openssl/license.header
new file mode 100644
index 0000000000..4b326ae5c2
--- /dev/null
+++ b/res/openssl/license.header
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
diff --git a/res/openssl/openssl-tomcat.conf b/res/openssl/openssl-tomcat.conf
new file mode 100644
index 0000000000..0d75c2654d
--- /dev/null
+++ b/res/openssl/openssl-tomcat.conf
@@ -0,0 +1,370 @@
+# 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.
+
+-t org.apache.tomcat.util.openssl
+-lssl
+# Configure include path
+-I /usr/lib/gcc/x86_64-redhat-linux/12/include
+--output ../../java
+
+#### Extracted from: /usr/include/openssl/asn1.h
+
+--include-function ASN1_STRING_get0_data # header:
/usr/include/openssl/asn1.h
+--include-function ASN1_STRING_length # header:
/usr/include/openssl/asn1.h
+
+#### Extracted from: /usr/include/openssl/bio.h
+
+--include-function BIO_ctrl # header:
/usr/include/openssl/bio.h
+--include-function BIO_ctrl_pending # header:
/usr/include/openssl/bio.h
+--include-function BIO_free # header:
/usr/include/openssl/bio.h
+--include-function BIO_new # header:
/usr/include/openssl/bio.h
+--include-function BIO_new_bio_pair # header:
/usr/include/openssl/bio.h
+--include-function BIO_new_file # header:
/usr/include/openssl/bio.h
+--include-function BIO_read # header:
/usr/include/openssl/bio.h
+--include-function BIO_s_bio # header:
/usr/include/openssl/bio.h
+--include-function BIO_s_file # header:
/usr/include/openssl/bio.h
+--include-function BIO_s_mem # header:
/usr/include/openssl/bio.h
+--include-function BIO_write # header:
/usr/include/openssl/bio.h
+--include-constant BIO_CLOSE # header:
/usr/include/openssl/bio.h
+--include-constant BIO_CTRL_RESET # header:
/usr/include/openssl/bio.h
+--include-constant BIO_C_SET_FILENAME # header:
/usr/include/openssl/bio.h
+--include-constant BIO_FP_READ # header:
/usr/include/openssl/bio.h
+
+#### Extracted from: /usr/include/openssl/bn.h
+
+--include-function BN_get_rfc2409_prime_1024 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc2409_prime_768 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_1536 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_2048 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_3072 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_4096 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_6144 # header:
/usr/include/openssl/bn.h
+--include-function BN_get_rfc3526_prime_8192 # header:
/usr/include/openssl/bn.h
+--include-function BN_new # header:
/usr/include/openssl/bn.h
+--include-function BN_set_word # header:
/usr/include/openssl/bn.h
+
+#### Extracted from: /usr/include/openssl/crypto.h
+
+--include-function CRYPTO_free # header:
/usr/include/openssl/crypto.h
+--include-function OpenSSL_version # header:
/usr/include/openssl/crypto.h
+--include-function OpenSSL_version_num # header:
/usr/include/openssl/crypto.h
+--include-constant OPENSSL_INIT_ENGINE_ALL_BUILTIN # deprecated header:
/usr/include/openssl/crypto.h
+
+#### Extracted from: /usr/include/openssl/dh.h
+
+--include-function DH_free # deprecated header:
/usr/include/openssl/dh.h
+--include-function DH_new # deprecated header:
/usr/include/openssl/dh.h
+--include-function DH_set0_pqg # deprecated header:
/usr/include/openssl/dh.h
+
+#### Extracted from: /usr/include/openssl/ec.h
+
+--include-function d2i_ECPKParameters # header:
/usr/include/openssl/ec.h
+--include-function EC_GROUP_free # header:
/usr/include/openssl/ec.h
+--include-function EC_GROUP_get_curve_name # header:
/usr/include/openssl/ec.h
+--include-function EC_KEY_free # deprecated
header: /usr/include/openssl/ec.h
+--include-function EC_KEY_new_by_curve_name # deprecated
header: /usr/include/openssl/ec.h
+
+#### Extracted from: /usr/include/openssl/engine.h
+
+--include-function ENGINE_by_id # deprecated
header: /usr/include/openssl/engine.h
+--include-function ENGINE_ctrl_cmd_string # deprecated
header: /usr/include/openssl/engine.h
+--include-function ENGINE_free # deprecated
header: /usr/include/openssl/engine.h
+--include-function ENGINE_load_private_key # deprecated
header: /usr/include/openssl/engine.h
+--include-function ENGINE_register_all_complete # deprecated
header: /usr/include/openssl/engine.h
+--include-function ENGINE_set_default # deprecated
header: /usr/include/openssl/engine.h
+--include-constant ENGINE_METHOD_ALL # deprecated
header: /usr/include/openssl/engine.h
+
+#### Extracted from: /usr/include/openssl/err.h
+
+--include-function ERR_clear_error # header:
/usr/include/openssl/err.h
+--include-function ERR_error_string # header:
/usr/include/openssl/err.h
+--include-function ERR_error_string_n # header:
/usr/include/openssl/err.h
+--include-function ERR_get_error # header:
/usr/include/openssl/err.h
+--include-function ERR_peek_last_error # header:
/usr/include/openssl/err.h
+--include-constant ERR_REASON_MASK # header:
/usr/include/openssl/err.h
+
+#### Extracted from: /usr/include/openssl/evp.h
+
+--include-function EVP_MD_fetch # header:
/usr/include/openssl/evp.h
+--include-function EVP_MD_free # header:
/usr/include/openssl/evp.h
+--include-function EVP_MD_get0_provider # header:
/usr/include/openssl/evp.h
+--include-function EVP_PKEY_get_base_id # header:
/usr/include/openssl/evp.h
+--include-function EVP_PKEY_get_bits # header:
/usr/include/openssl/evp.h
+--include-function EVP_PKEY_free # header:
/usr/include/openssl/evp.h
+--include-constant EVP_PKEY_DSA # header:
/usr/include/openssl/evp.h
+--include-constant EVP_PKEY_NONE # header:
/usr/include/openssl/evp.h
+--include-constant EVP_PKEY_RSA # header:
/usr/include/openssl/evp.h
+
+#### Extracted from: /usr/include/openssl/obj_mac.h
+
+--include-constant NID_info_access
# header: /usr/include/openssl/obj_mac.h
+
+#### Extracted from: /usr/include/openssl/ocsp.h
+
+--include-function OCSP_BASICRESP_free # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_CERTID_free # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_REQUEST_free # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_REQUEST_new # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_RESPONSE_free # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_cert_to_id # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_request_add0_id # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_response_get1_basic # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_response_status # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_resp_find # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_resp_get0 # header:
/usr/include/openssl/ocsp.h
+--include-function OCSP_single_get0_status # header:
/usr/include/openssl/ocsp.h
+--include-function d2i_OCSP_RESPONSE # header:
/usr/include/openssl/ocsp.h
+--include-function i2d_OCSP_REQUEST # header:
/usr/include/openssl/ocsp.h
+--include-constant OCSP_RESPONSE_STATUS_SUCCESSFUL # header:
/usr/include/openssl/ocsp.h
+--include-constant V_OCSP_CERTSTATUS_GOOD # header:
/usr/include/openssl/ocsp.h
+--include-constant V_OCSP_CERTSTATUS_REVOKED # header:
/usr/include/openssl/ocsp.h
+--include-constant V_OCSP_CERTSTATUS_UNKNOWN # header:
/usr/include/openssl/ocsp.h
+
+#### Extracted from: /usr/include/openssl/opensslconf-x86_64.h
+
+--include-constant OPENSSL_API_COMPAT # header:
/usr/include/openssl/opensslconf-x86_64.h
+--include-constant OPENSSL_FILE # header:
/usr/include/openssl/opensslconf-x86_64.h
+--include-constant OPENSSL_LINE # header:
/usr/include/openssl/opensslconf-x86_64.h
+--include-constant OPENSSL_MIN_API # header:
/usr/include/openssl/opensslconf-x86_64.h
+
+#### Extracted from: /usr/include/openssl/pem.h
+
+--include-function PEM_ASN1_read_bio # header:
/usr/include/openssl/pem.h
+--include-function PEM_read_bio_DHparams # deprecated header:
/usr/include/openssl/pem.h
+--include-function PEM_read_bio_ECPKParameters # deprecated header:
/usr/include/openssl/pem.h
+--include-function PEM_read_bio_Parameters # header:
/usr/include/openssl/pem.h
+--include-function PEM_read_bio_PrivateKey # header:
/usr/include/openssl/pem.h
+--include-function PEM_read_bio_X509_AUX # header:
/usr/include/openssl/pem.h
+--include-constant PEM_STRING_ECPARAMETERS # header:
/usr/include/openssl/pem.h
+
+#### Extracted from: /usr/include/openssl/pemerr.h
+
+--include-constant PEM_R_NO_START_LINE # header:
/usr/include/openssl/pemerr.h
+
+#### Extracted from: /usr/include/openssl/pkcs12.h
+
+--include-function PKCS12_free # header:
/usr/include/openssl/pkcs12.h
+--include-function PKCS12_parse # header:
/usr/include/openssl/pkcs12.h
+--include-function PKCS12_verify_mac # header:
/usr/include/openssl/pkcs12.h
+--include-function d2i_PKCS12_bio # header:
/usr/include/openssl/pkcs12.h
+
+#### Extracted from: /usr/include/openssl/provider.h
+
+--include-function OSSL_PROVIDER_get0_name # header:
/usr/include/openssl/provider.h
+
+#### Extracted from: /usr/include/openssl/rand.h
+
+--include-function RAND_load_file # header:
/usr/include/openssl/rand.h
+--include-function RAND_seed # header:
/usr/include/openssl/rand.h
+
+#### Extracted from: /usr/include/openssl/ssl.h
+
+--include-function OPENSSL_init_ssl # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CIPHER_get_auth_nid # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CIPHER_get_kx_nid # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CIPHER_get_name # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_CTX_finish # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_CTX_free # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_CTX_new # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_CTX_set_flags # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_CTX_set_ssl_ctx # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_cmd # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CONF_cmd_value_type # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_add_client_CA # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_check_private_key # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_clear_options # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_ctrl # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_free # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_get_cert_store # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_get_ciphers # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_get_client_CA_list # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_get_options # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_get_timeout # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_load_verify_locations # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_new # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_alpn_select_cb # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_cert_verify_callback # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_cipher_list # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_ciphersuites # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_client_CA_list # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_default_passwd_cb # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_default_verify_paths # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_options # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_session_id_context # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_timeout # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_tmp_dh_callback # deprecated
header: /usr/include/openssl/ssl.h
+--include-function SSL_CTX_set_verify # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_set0_tmp_dh_pkey # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_use_certificate # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_use_certificate_chain_file # header:
/usr/include/openssl/ssl.h
+--include-function SSL_CTX_use_PrivateKey # header:
/usr/include/openssl/ssl.h
+--include-function SSL_SESSION_get_id # header:
/usr/include/openssl/ssl.h
+--include-function SSL_SESSION_get_time # header:
/usr/include/openssl/ssl.h
+--include-function SSL_add_file_cert_subjects_to_stack # header:
/usr/include/openssl/ssl.h
+--include-function SSL_do_handshake # header:
/usr/include/openssl/ssl.h
+--include-function SSL_free # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_ciphers # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_current_cipher # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_ex_data_X509_STORE_CTX_idx # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_options # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_peer_cert_chain # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_privatekey # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_session # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_shutdown # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get_version # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get0_alpn_selected # header:
/usr/include/openssl/ssl.h
+--include-function SSL_get1_peer_certificate # header:
/usr/include/openssl/ssl.h
+--include-function SSL_in_init # header:
/usr/include/openssl/ssl.h
+--include-function SSL_load_client_CA_file # header:
/usr/include/openssl/ssl.h
+--include-function SSL_new # header:
/usr/include/openssl/ssl.h
+--include-function SSL_pending # header:
/usr/include/openssl/ssl.h
+--include-function SSL_read # header:
/usr/include/openssl/ssl.h
+--include-function SSL_renegotiate # header:
/usr/include/openssl/ssl.h
+--include-function SSL_renegotiate_pending # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_accept_state # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_bio # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_cipher_list # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_connect_state # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_info_callback # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_options # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_verify # header:
/usr/include/openssl/ssl.h
+--include-function SSL_set_verify_result # header:
/usr/include/openssl/ssl.h
+--include-function SSL_shutdown # header:
/usr/include/openssl/ssl.h
+--include-function SSL_verify_client_post_handshake # header:
/usr/include/openssl/ssl.h
+--include-function SSL_write # header:
/usr/include/openssl/ssl.h
+--include-function TLS_server_method # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CB_HANDSHAKE_DONE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_FLAG_CERTIFICATE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_FLAG_FILE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_FLAG_SERVER # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_FLAG_SHOW_ERRORS # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_TYPE_DIR # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_TYPE_FILE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CONF_TYPE_UNKNOWN # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_CHAIN_CERT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_GET_SESS_CACHE_MODE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_GET_SESS_CACHE_SIZE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_ACCEPT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_ACCEPT_GOOD # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_ACCEPT_RENEGOTIATE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_CACHE_FULL # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_CB_HIT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_CONNECT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_CONNECT_GOOD # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_CONNECT_RENEGOTIATE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_HIT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_MISSES # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_NUMBER # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SESS_TIMEOUTS # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_DH_AUTO # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_GROUPS # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_MAX_PROTO_VERSION # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_MIN_PROTO_VERSION # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_SESS_CACHE_MODE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_SESS_CACHE_SIZE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_TLSEXT_TICKET_KEYS # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_TMP_DH #
deprecated header: /usr/include/openssl/ssl.h
+--include-constant SSL_CTRL_SET_TMP_ECDH #
deprecated header: /usr/include/openssl/ssl.h
+--include-constant SSL_ERROR_NONE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_ALL # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_CIPHER_SERVER_PREFERENCE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_COMPRESSION # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_SSLv2 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_SSLv3 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_TICKET # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_TLSv1 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_TLSv1_1 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_TLSv1_2 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_NO_TLSv1_3 # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_SINGLE_DH_USE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_OP_SINGLE_ECDH_USE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_RECEIVED_SHUTDOWN # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_SENT_SHUTDOWN # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_SESS_CACHE_OFF # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_SESS_CACHE_SERVER # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_VERIFY_FAIL_IF_NO_PEER_CERT # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_VERIFY_NONE # header:
/usr/include/openssl/ssl.h
+--include-constant SSL_VERIFY_PEER # header:
/usr/include/openssl/ssl.h
+
+#### Extracted from: /usr/include/openssl/ssl2.h
+
+--include-constant SSL2_VERSION # header:
/usr/include/openssl/ssl2.h
+
+#### Extracted from: /usr/include/openssl/ssl3.h
+
+--include-constant SSL3_VERSION # header:
/usr/include/openssl/ssl3.h
+
+#### Extracted from: /usr/include/openssl/tls1.h
+
+--include-constant SSL_TLSEXT_ERR_NOACK #
header: /usr/include/openssl/tls1.h
+--include-constant SSL_TLSEXT_ERR_OK #
header: /usr/include/openssl/tls1.h
+--include-constant TLS1_1_VERSION #
header: /usr/include/openssl/tls1.h
+--include-constant TLS1_2_VERSION #
header: /usr/include/openssl/tls1.h
+--include-constant TLS1_3_VERSION #
header: /usr/include/openssl/tls1.h
+--include-constant TLS1_VERSION #
header: /usr/include/openssl/tls1.h
+
+#### Extracted from: /usr/include/openssl/stack.h
+
+--include-function OPENSSL_sk_num # header:
/usr/include/openssl/stack.h
+--include-function OPENSSL_sk_value # header:
/usr/include/openssl/stack.h
+
+#### Extracted from: /usr/include/openssl/types.h
+
+--include-typedef pem_password_cb
+
+#### Extracted from: /usr/include/openssl/x509.h
+
+--include-function i2d_X509 # header:
/usr/include/openssl/x509.h
+--include-function d2i_X509 # header:
/usr/include/openssl/x509.h
+--include-function d2i_X509_bio # header:
/usr/include/openssl/x509.h
+--include-function X509_EXTENSION_get_data # header:
/usr/include/openssl/x509.h
+--include-function X509_free # header:
/usr/include/openssl/x509.h
+--include-function X509_get_ext # header:
/usr/include/openssl/x509.h
+--include-function X509_get_ext_by_NID # header:
/usr/include/openssl/x509.h
+--include-constant X509_FILETYPE_PEM # header:
/usr/include/openssl/x509.h
+
+#### Extracted from: /usr/include/openssl/x509v3.h
+
+--include-function X509_check_issued # header:
/usr/include/openssl/x509v3.h
+
+#### Extracted from: /usr/include/openssl/x509_vfy.h
+
+--include-function X509_LOOKUP_ctrl # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_LOOKUP_file # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_LOOKUP_hash_dir # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_add_lookup # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get_current_cert # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get_error # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get_error_depth # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get_ex_data # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get0_current_issuer # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_get0_untrusted # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_CTX_set_error # header:
/usr/include/openssl/x509_vfy.h
+--include-function X509_STORE_set_flags # header:
/usr/include/openssl/x509_vfy.h
+--include-constant X509_L_ADD_DIR #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_L_FILE_LOAD #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_APPLICATION_VERIFICATION #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_CERT_UNTRUSTED #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_CRL_HAS_EXPIRED #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_FLAG_CRL_CHECK #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_FLAG_CRL_CHECK_ALL #
header: /usr/include/openssl/x509_vfy.h
+--include-constant X509_V_OK #
header: /usr/include/openssl/x509_vfy.h
+
diff --git a/res/openssl/openssl.h b/res/openssl/openssl.h
new file mode 100644
index 0000000000..e31fad9e1b
--- /dev/null
+++ b/res/openssl/openssl.h
@@ -0,0 +1,31 @@
+/* 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.
+ */
+
+#include <openssl/opensslv.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs12.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/rand.h>
+#include <openssl/x509v3.h>
+#include <openssl/dh.h>
+#include <openssl/bn.h>
+#include <openssl/engine.h>
+#include <openssl/ocsp.h>
+#include <openssl/provider.h>
diff --git a/webapps/docs/config/listeners.xml
b/webapps/docs/config/listeners.xml
index 0036bd623c..88b0cc614a 100644
--- a/webapps/docs/config/listeners.xml
+++ b/webapps/docs/config/listeners.xml
@@ -83,8 +83,8 @@
<subsection name="APR Lifecycle Listener -
org.apache.catalina.core.AprLifecycleListener">
<p>The <strong>APR Lifecycle Listener</strong> checks for the presence of
- the APR/native library and loads the library if it is present. For more
- information see the <a href="../apr.html">APR/native guide</a>.</p>
+ the Apache Tomcat Native library and loads the library if it is present.
+ For more information see the <a href="../apr.html">APR/native
guide</a>.</p>
<p>This listener must only be nested within <a
href="server.html">Server</a>
elements.</p>
@@ -372,6 +372,67 @@
</subsection>
+ <subsection name="OpenSSL Lifecycle Listener -
org.apache.catalina.core.OpenSSLLifecycleListener">
+
+ <p>The <strong>OpenSSL Lifecycle Listener</strong> checks for the presence
+ of the OpenSSL library and loads the library if it is present. This
+ uses the FFM API from Java 22 instead of additional native code. When
+ enabled and successfully loaded, NIO and NIO2 connector will then make use
+ of OpenSSL for TLS functionality. This is a functional replacement to the
+ <strong>APR Lifecycle Listener</strong> described above.</p>
+
+ <p>This listener must only be nested within <a
href="server.html">Server</a>
+ elements.</p>
+
+ <p>The following additional attributes are supported by the <strong>OpenSSL
+ Lifecycle Listener</strong>:</p>
+
+ <attributes>
+
+ <attribute name="SSLEngine" required="false">
+ <p>Name of the SSLEngine to use, for OpenSSL 1.x.</p>
+ <p>See the <a href="http://www.openssl.org/">Official OpenSSL
website</a>
+ for more details on supported SSL hardware engines and manufacturers.
+ </p>
+ </attribute>
+
+ <attribute name="SSLRandomSeed" required="false">
+ <p>Entropy source used to seed the SSLEngine's PRNG. The default value
+ is <code>builtin</code>. On development systems, you may want to set
+ this to <code>/dev/urandom</code> to allow quicker start times.</p>
+ </attribute>
+
+ <attribute name="FIPSMode" required="false">
+ <p>The behaviour of this attribute depends on whether Tomcat Native has
+ been compiled against OpenSSL 1.x or OpenSSL 3.x.</p>
+ <p>For OpenSSL 1.x: Set to <code>on</code> to request that OpenSSL be
in
+ FIPS mode (if OpenSSL is already in FIPS mode, it will remain in FIPS
+ mode).
+ Set to <code>enter</code> to force OpenSSL to enter FIPS mode (an
+ error will occur if OpenSSL is already in FIPS mode).
+ Set to <code>require</code> to require that OpenSSL <i>already</i> be
+ in FIPS mode (an error will occur if OpenSSL is not already in FIPS
+ mode).</p>
+ <p>For OpenSSL 3.x: <code>on</code>, <code>enter</code> and
+ <code>require</code> all behave the same way. If the FIPS provider is
+ the default provider, it will be used. If the FIPS provider is not the
+ default provider, an error will occur.</p>
+ <p>FIPS mode <em>requires you to have a FIPS-capable OpenSSL
library</em>.
+ If this attribute is set to anything other than <code>off</code>, the
+ <b>SSLEngine</b> must be enabled as well.</p>
+ <p>The default value is <code>off</code>.</p>
+ </attribute>
+
+ <attribute name="useOpenSSL" required="false">
+ <p>This attribute controls the auto-selection of the OpenSSL JSSE
+ implementation. The default is <code>true</code> which will use OpenSSL
+ if the FFM API is available.</p>
+ </attribute>
+
+ </attributes>
+
+ </subsection>
+
<subsection name="Properties Role Mapping Listener -
org.apache.catalina.core.PropertiesRoleMappingListener">
<p>The <strong>Properties Role Mapping Listener</strong> populates the
context's role mapping
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]