diff --git a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/SSLFactory.java b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/SSLFactory.java index 4868f2ec..6e5c84c8 100644 --- a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/SSLFactory.java +++ b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/SSLFactory.java @@ -79,6 +79,7 @@ import static java.util.Objects.isNull; import static java.util.Objects.nonNull; +import static nl.altindag.ssl.util.internal.CollectorsUtils.toStringArray; import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotBlank; import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotEmpty; @@ -904,27 +905,20 @@ private SSLParameters createSslParameters(SSLContext sslContext) { List defaultCiphers = Arrays.asList(defaultSSLParameters.getCipherSuites()); List defaultProtocols = Arrays.asList(defaultSSLParameters.getProtocols()); - List preferredCiphers = ciphers.stream() + String[] preferredCiphers = ciphers.stream() .distinct() + .filter(StringUtils::isNotBlank) .filter(defaultCiphers::contains) - .collect(Collectors.toList()); - - if (preferredCiphers.isEmpty()) { - sslParameters.setCipherSuites(defaultCiphers.stream().toArray(String[]::new)); - } else { - sslParameters.setCipherSuites(preferredCiphers.stream().toArray(String[]::new)); - } + .collect(toStringArray()); - List preferredProtocols = protocols.stream() + String[] preferredProtocols = protocols.stream() .distinct() + .filter(StringUtils::isNotBlank) .filter(defaultProtocols::contains) - .collect(Collectors.toList()); + .collect(toStringArray()); - if (preferredProtocols.isEmpty()) { - sslParameters.setProtocols(defaultProtocols.stream().toArray(String[]::new)); - } else { - sslParameters.setProtocols(preferredProtocols.stream().toArray(String[]::new)); - } + sslParameters.setCipherSuites(preferredCiphers); + sslParameters.setProtocols(preferredProtocols); return SSLParametersUtils.merge(sslParameters, defaultSSLParameters); } diff --git a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/SSLParametersUtils.java b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/SSLParametersUtils.java index 600ce116..2563a4cc 100644 --- a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/SSLParametersUtils.java +++ b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/SSLParametersUtils.java @@ -44,8 +44,10 @@ public static SSLParameters merge(SSLParameters baseSslParameters, SSLParameters SSLParameters target = new SSLParameters(); String[] ciphers = Optional.ofNullable(baseSslParameters.getCipherSuites()) + .filter(array -> array.length != 0) .orElseGet(alternativeSslParameters::getCipherSuites); String[] protocols = Optional.ofNullable(baseSslParameters.getProtocols()) + .filter(array -> array.length != 0) .orElseGet(alternativeSslParameters::getProtocols); target.setCipherSuites(ciphers); diff --git a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/internal/CollectorsUtils.java b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/internal/CollectorsUtils.java index e34a1af6..4884c142 100644 --- a/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/internal/CollectorsUtils.java +++ b/sslcontext-kickstart/src/main/java/nl/altindag/ssl/util/internal/CollectorsUtils.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.List; import java.util.function.Function; +import java.util.function.IntFunction; import java.util.stream.Collector; import java.util.stream.Collectors; @@ -45,4 +46,12 @@ private CollectorsUtils() { return Collectors.collectingAndThen(Collectors.toList(), finisher); } + public static Collector toArray(IntFunction generator) { + return Collectors.collectingAndThen(Collectors.toList(), list -> list.toArray(generator)); + } + + public static Collector toStringArray() { + return toArray(String[]::new); + } + }