This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch 10.1.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push: new 684498fe46 Cleanups 684498fe46 is described below commit 684498fe46a9d27e6d2e03cd816220a050be733d Author: remm <r...@apache.org> AuthorDate: Thu Mar 13 21:13:49 2025 +0100 Cleanups --- .../util/net/openssl/panama/OpenSSLContext.java | 124 +++++++++------------ .../util/net/openssl/panama/OpenSSLEngine.java | 58 ++++------ .../util/net/openssl/panama/OpenSSLLibrary.java | 6 +- 3 files changed, 75 insertions(+), 113 deletions(-) diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java index 2fa18d1e6d..96eddb04ff 100644 --- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java +++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java @@ -67,6 +67,7 @@ import org.apache.tomcat.util.openssl.SSL_CTX_set_alpn_select_cb$cb; import org.apache.tomcat.util.openssl.SSL_CTX_set_cert_verify_callback$cb; import org.apache.tomcat.util.openssl.SSL_CTX_set_tmp_dh_callback$dh; import org.apache.tomcat.util.openssl.SSL_CTX_set_verify$callback; +import org.apache.tomcat.util.openssl.openssl_h; import org.apache.tomcat.util.openssl.openssl_h_Compatibility; import org.apache.tomcat.util.openssl.pem_password_cb; import org.apache.tomcat.util.res.StringManager; @@ -86,7 +87,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { private static final int SSL_AIDX_MAX = 4; public static final int SSL_PROTOCOL_NONE = 0; - public static final int SSL_PROTOCOL_SSLV2 = (1<<0); + public static final int SSL_PROTOCOL_SSLV2 = 1; public static final int SSL_PROTOCOL_SSLV3 = (1<<1); public static final int SSL_PROTOCOL_TLSV1 = (1<<2); public static final int SSL_PROTOCOL_TLSV1_1 = (1<<3); @@ -269,7 +270,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { SSL_CTX_set_default_passwd_cb(sslCtx, pem_password_cb.allocate(new PasswordCallback(null), contextArena)); - if (negotiableProtocols != null && negotiableProtocols.size() > 0) { + if (negotiableProtocols != null && !negotiableProtocols.isEmpty()) { alpn = true; negotiableProtocolsBytes = new ArrayList<>(negotiableProtocols.size() + 1); for (String negotiableProtocol : negotiableProtocols) { @@ -322,7 +323,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { } - private boolean checkConf(OpenSSLConf conf) throws Exception { + private boolean checkConf(OpenSSLConf conf) { boolean result = true; OpenSSLConfCmd cmd; String name; @@ -392,7 +393,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { } - private boolean applyConf(OpenSSLConf conf) throws Exception { + private boolean applyConf(OpenSSLConf conf) { boolean result = true; SSL_CONF_CTX_set_ssl_ctx(state.confCtx, state.sslCtx); OpenSSLConfCmd cmd; @@ -465,7 +466,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { log.warn(sm.getString("openssl.doubleInit")); return; } - boolean success = true; + boolean success; Exception cause = null; try (var localArena = Arena.ofConfined()) { if (sslHostConfig.getInsecureRenegotiation()) { @@ -518,21 +519,12 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { success = addCertificate(certificate, localArena); // Client certificate verification - int value = 0; - switch (sslHostConfig.getCertificateVerification()) { - case NONE: - value = SSL_VERIFY_NONE(); - break; - case OPTIONAL: - value = SSL_VERIFY_PEER(); - break; - case OPTIONAL_NO_CA: - value = OPTIONAL_NO_CA; - break; - case REQUIRED: - value = SSL_VERIFY_FAIL_IF_NO_PEER_CERT(); - break; - } + int value = switch (sslHostConfig.getCertificateVerification()) { + case NONE -> SSL_VERIFY_NONE(); + case OPTIONAL -> SSL_VERIFY_PEER(); + case OPTIONAL_NO_CA -> OPTIONAL_NO_CA; + case REQUIRED -> SSL_VERIFY_FAIL_IF_NO_PEER_CERT(); + }; // Set int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) callback SSL_CTX_set_verify(state.sslCtx, value, @@ -591,7 +583,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { } } - if (negotiableProtocols != null && negotiableProtocols.size() > 0) { + if (negotiableProtocols != null && !negotiableProtocols.isEmpty()) { SSL_CTX_set_alpn_select_cb(state.sslCtx, SSL_CTX_set_alpn_select_cb$cb.allocate(new ALPNSelectCallback(negotiableProtocols), contextArena), state.sslCtx); } @@ -837,44 +829,27 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { private static final String SSL_TXT_ECDSA = "ECDSA"; private static String getCipherAuthenticationMethod(int auth, int kx) { - switch (kx) { - case NID_kx_rsa: - return SSL_TXT_RSA; - case SSL_kDHr: - return SSL_TXT_DH + "_" + SSL_TXT_RSA; - case SSL_kDHd: - return SSL_TXT_DH + "_" + SSL_TXT_DSS; - case SSL_kDHE: - switch (auth) { - case SSL_aDSS: - return "DHE_" + SSL_TXT_DSS; - case SSL_aRSA: - return "DHE_" + SSL_TXT_RSA; - case SSL_aNULL: - return SSL_TXT_DH + "_anon"; - default: - return "UNKNOWN"; - } - case SSL_kKRB5: - return SSL_TXT_KRB5; - case SSL_kECDHr: - return SSL_TXT_ECDH + "_" + SSL_TXT_RSA; - case SSL_kECDHe: - return SSL_TXT_ECDH + "_" + SSL_TXT_ECDSA; - case SSL_kECDHE: - switch (auth) { - case SSL_aECDSA: - return "ECDHE_" + SSL_TXT_ECDSA; - case SSL_aRSA: - return "ECDHE_" + SSL_TXT_RSA; - case SSL_aNULL: - return SSL_TXT_ECDH + "_anon"; - default: - return "UNKNOWN"; - } - default: - return "UNKNOWN"; - } + return switch (kx) { + case NID_kx_rsa -> SSL_TXT_RSA; + case SSL_kDHr -> SSL_TXT_DH + "_" + SSL_TXT_RSA; + case SSL_kDHd -> SSL_TXT_DH + "_" + SSL_TXT_DSS; + case SSL_kDHE -> switch (auth) { + case SSL_aDSS -> "DHE_" + SSL_TXT_DSS; + case SSL_aRSA -> "DHE_" + SSL_TXT_RSA; + case SSL_aNULL -> SSL_TXT_DH + "_anon"; + default -> "UNKNOWN"; + }; + case SSL_kKRB5 -> SSL_TXT_KRB5; + case SSL_kECDHr -> SSL_TXT_ECDH + "_" + SSL_TXT_RSA; + case SSL_kECDHe -> SSL_TXT_ECDH + "_" + SSL_TXT_ECDSA; + case SSL_kECDHE -> switch (auth) { + case SSL_aECDSA -> "ECDHE_" + SSL_TXT_ECDSA; + case SSL_aRSA -> "ECDHE_" + SSL_TXT_RSA; + case SSL_aNULL -> SSL_TXT_ECDH + "_anon"; + default -> "UNKNOWN"; + }; + default -> "UNKNOWN"; + }; } private static class PasswordCallback implements pem_password_cb.Function { @@ -887,7 +862,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { if (log.isTraceEnabled()) { log.trace("Return password for certificate"); } - if (callbackPassword != null && callbackPassword.length() > 0) { + if (callbackPassword != null && !callbackPassword.isEmpty()) { try (var localArena = Arena.ofConfined()) { MemorySegment callbackPasswordNative = localArena.allocateFrom(callbackPassword); if (callbackPasswordNative.byteSize() > bufsiz) { @@ -910,7 +885,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { // Load Server key and certificate if (certificate.getCertificateFile() != null) { // Pick right key password - String keyPassToUse = null; + String keyPassToUse; String keyPass = certificate.getCertificateKeyPassword(); if (keyPass == null) { keyPass = certificate.getCertificateKeystorePassword(); @@ -933,7 +908,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { keyPassToUse = keyPass; } // Set certificate - byte[] certificateFileBytes = null; + byte[] certificateFileBytes; try (Resource resource = ConfigFileLoader.getSource().getResource(certificate.getCertificateFile())) { certificateFileBytes = resource.getInputStream().readAllBytes(); } catch (IOException e) { @@ -948,8 +923,8 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { certificate.getCertificateFile(), OpenSSLLibrary.getLastError())); return false; } - MemorySegment cert = MemorySegment.NULL; - MemorySegment key = MemorySegment.NULL; + MemorySegment cert; + MemorySegment key; if (certificate.getCertificateFile().endsWith(".pkcs12")) { // Load pkcs12 MemorySegment p12 = d2i_PKCS12_bio(certificateBIO, MemorySegment.NULL); @@ -960,7 +935,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { } MemorySegment passwordAddress = MemorySegment.NULL; int passwordLength = 0; - if (keyPassToUse != null && keyPassToUse.length() > 0) { + if (keyPassToUse != null && !keyPassToUse.isEmpty()) { passwordAddress = localArena.allocateFrom(keyPassToUse); passwordLength = (int) (passwordAddress.byteSize() - 1); } @@ -986,7 +961,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { String certificateKeyFileName = (certificate.getCertificateKeyFile() == null) ? certificate.getCertificateFile() : certificate.getCertificateKeyFile(); // Load key - byte[] certificateKeyFileBytes = null; + byte[] certificateKeyFileBytes; try (Resource resource = ConfigFileLoader.getSource().getResource(certificateKeyFileName)) { certificateKeyFileBytes = resource.getInputStream().readAllBytes(); } catch (IOException e) { @@ -1118,7 +1093,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { } // Set certificate chain file if (certificate.getCertificateChainFile() != null) { - byte[] certificateChainBytes = null; + byte[] certificateChainBytes; try (Resource resource = ConfigFileLoader.getSource().getResource(certificate.getCertificateChainFile())) { certificateChainBytes = resource.getInputStream().readAllBytes(); } catch (IOException e) { @@ -1191,12 +1166,13 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { alias = findAlias(x509KeyManager, certificate); chain = x509KeyManager.getCertificateChain(alias); } - StringBuilder sb = new StringBuilder(BEGIN_KEY); - sb.append(Base64.getMimeEncoder(64, new byte[] {'\n'}).encodeToString(x509KeyManager.getPrivateKey(alias).getEncoded())); - sb.append(END_KEY); + String sb = + BEGIN_KEY + + Base64.getMimeEncoder(64, new byte[]{'\n'}).encodeToString(x509KeyManager.getPrivateKey(alias).getEncoded()) + + END_KEY; var rawCertificate = localArena.allocateFrom(ValueLayout.JAVA_BYTE, chain[0].getEncoded()); var rawCertificatePointer = localArena.allocateFrom(ValueLayout.ADDRESS, rawCertificate); - var rawKey = localArena.allocateFrom(ValueLayout.JAVA_BYTE, sb.toString().getBytes(StandardCharsets.US_ASCII)); + var rawKey = localArena.allocateFrom(ValueLayout.JAVA_BYTE, sb.getBytes(StandardCharsets.US_ASCII)); var x509cert = d2i_X509(MemorySegment.NULL, rawCertificatePointer, rawCertificate.byteSize()); if (MemorySegment.NULL.equals(x509cert)) { logLastError("openssl.errorLoadingCertificate"); @@ -1268,7 +1244,7 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { private static int getCertificateIndex(SSLHostConfigCertificate certificate) { - int result = -1; + int result; // If the type is undefined there will only be one certificate (enforced // in SSLHostConfig) so use the RSA slot. if (certificate.getType() == Type.RSA || certificate.getType() == Type.UNDEFINED) { @@ -1399,10 +1375,10 @@ public class OpenSSLContext implements org.apache.tomcat.util.net.SSLContext { // Use another arena to avoid keeping a reference through segments // This also allows making further accesses to the main pointers safer this.sslCtx = sslCtx.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, - (MemorySegment t) -> SSL_CTX_free(t)); + openssl_h::SSL_CTX_free); if (!MemorySegment.NULL.equals(confCtx)) { this.confCtx = confCtx.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, - (MemorySegment t) -> SSL_CONF_CTX_free(t)); + openssl_h::SSL_CONF_CTX_free); } else { this.confCtx = MemorySegment.NULL; } diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java index 8aece600dc..044d5910fa 100644 --- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java +++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java @@ -63,6 +63,7 @@ import org.apache.tomcat.util.net.openssl.ciphers.OpenSSLCipherConfigurationPars import org.apache.tomcat.util.openssl.SSL_CTX_set_verify$callback; import org.apache.tomcat.util.openssl.SSL_set_info_callback$cb; import org.apache.tomcat.util.openssl.SSL_set_verify$callback; +import org.apache.tomcat.util.openssl.openssl_h; import org.apache.tomcat.util.openssl.openssl_h_Compatibility; import org.apache.tomcat.util.res.StringManager; @@ -120,7 +121,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn private final EngineState state; private final Arena engineArena; private final Cleanable cleanable; - private MemorySegment bufSegment = null; + private MemorySegment bufSegment; private enum Accepted { NOT, IMPLICIT, EXPLICIT } private Accepted accepted = Accepted.NOT; @@ -230,7 +231,6 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn /** * Write plain text data to the OpenSSL internal BIO - * * Calling this function with src.remaining == 0 is undefined. * @throws SSLException if the OpenSSL error check fails */ @@ -388,7 +388,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn } while (src.hasRemaining()) { - int bytesWritten = 0; + int bytesWritten; // Write plain text application data to the SSL engine try { bytesWritten = writePlaintextData(state.ssl, src); @@ -476,7 +476,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn } // Write encrypted data to network BIO - int written = 0; + int written; try { written = writeEncryptedData(state.networkBIO, src); } catch (Exception e) { @@ -641,8 +641,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn @Override public String[] getSupportedCipherSuites() { - Set<String> availableCipherSuites = AVAILABLE_CIPHER_SUITES; - return availableCipherSuites.toArray(new String[0]); + return AVAILABLE_CIPHER_SUITES.toArray(new String[0]); } @Override @@ -651,17 +650,13 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn return new String[0]; } String[] enabled = OpenSSLLibrary.getCiphers(state.ssl); - if (enabled == null) { - return new String[0]; - } else { - for (int i = 0; i < enabled.length; i++) { - String mapped = OpenSSLCipherConfigurationParser.openSSLToJsse(enabled[i]); - if (mapped != null) { - enabled[i] = mapped; - } + for (int i = 0; i < enabled.length; i++) { + String mapped = OpenSSLCipherConfigurationParser.openSSLToJsse(enabled[i]); + if (mapped != null) { + enabled[i] = mapped; } - return enabled; } + return enabled; } @Override @@ -692,7 +687,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn buf.append(':'); } - if (buf.length() == 0) { + if (buf.isEmpty()) { throw new IllegalArgumentException(sm.getString("engine.emptyCipherSuite")); } buf.setLength(buf.length() - 1); @@ -738,11 +733,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn enabled.add(Constants.SSL_PROTO_SSLv3); } int size = enabled.size(); - if (size == 0) { - return new String[0]; - } else { - return enabled.toArray(new String[size]); - } + return enabled.toArray(new String[size]); } @Override @@ -767,18 +758,13 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn if (!IMPLEMENTED_PROTOCOLS_SET.contains(p)) { throw new IllegalArgumentException(sm.getString("engine.unsupportedProtocol", p)); } - if (p.equals(Constants.SSL_PROTO_SSLv2)) { - sslv2 = true; - } else if (p.equals(Constants.SSL_PROTO_SSLv3)) { - sslv3 = true; - } else if (p.equals(Constants.SSL_PROTO_TLSv1)) { - tlsv1 = true; - } else if (p.equals(Constants.SSL_PROTO_TLSv1_1)) { - tlsv1_1 = true; - } else if (p.equals(Constants.SSL_PROTO_TLSv1_2)) { - tlsv1_2 = true; - } else if (p.equals(Constants.SSL_PROTO_TLSv1_3)) { - tlsv1_3 = true; + switch (p) { + case Constants.SSL_PROTO_SSLv2 -> sslv2 = true; + case Constants.SSL_PROTO_SSLv3 -> sslv3 = true; + case Constants.SSL_PROTO_TLSv1 -> tlsv1 = true; + case Constants.SSL_PROTO_TLSv1_1 -> tlsv1_1 = true; + case Constants.SSL_PROTO_TLSv1_2 -> tlsv1_2 = true; + case Constants.SSL_PROTO_TLSv1_3 -> tlsv1_3 = true; } } // Enable all and then disable what we not want @@ -1340,7 +1326,7 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn return V_OCSP_CERTSTATUS_UNKNOWN(); } InputStream is = connection.getInputStream(); - int read = 0; + int read; byte[] responseBuf = new byte[1024]; while ((read = is.read(responseBuf)) > 0) { baos.write(responseBuf, 0, read); @@ -1684,9 +1670,9 @@ public final class OpenSSLEngine extends SSLEngine implements SSLUtil.ProtocolIn // Use another arena to avoid keeping a reference through segments // This also allows making further accesses to the main pointers safer this.ssl = ssl.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, - (MemorySegment t) -> SSL_free(t)); + openssl_h::SSL_free); this.networkBIO = networkBIO.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, - (MemorySegment t) -> BIO_free(t)); + openssl_h::BIO_free); } @Override diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java index e6320133bb..6f4f972aff 100644 --- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java +++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java @@ -229,7 +229,7 @@ public class OpenSSLLibrary { // Set the random seed, translated to the Java way boolean seedDone = false; - if (SSLRandomSeed != null && SSLRandomSeed.length() != 0 && !"builtin".equals(SSLRandomSeed)) { + if (SSLRandomSeed != null && !SSLRandomSeed.isEmpty() && !"builtin".equals(SSLRandomSeed)) { var randomSeed = memorySession.allocateFrom(SSLRandomSeed); seedDone = RAND_load_file(randomSeed, 128) > 0; if (!seedDone) { @@ -440,7 +440,7 @@ public class OpenSSLLibrary { try { for (String c : getCiphers(ssl)) { // Filter out bad input. - if (c == null || c.length() == 0 || ciphersList.contains(c)) { + if (c == null || c.isEmpty() || ciphersList.contains(c)) { continue; } ciphersList.add(OpenSSLCipherConfigurationParser.openSSLToJsse(c)); @@ -461,7 +461,7 @@ public class OpenSSLLibrary { MemorySegment sk = SSL_get_ciphers(ssl); int len = openssl_h_Compatibility.OPENSSL_sk_num(sk); if (len <= 0) { - return null; + return new String[0]; } ArrayList<String> ciphers = new ArrayList<>(len); for (int i = 0; i < len; i++) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org