Skip to content

Commit dbf5e6c

Browse files
authored
Support configurable TLS client SNI validation and handle FQDNs with trailing dot (#1383)
1 parent 5b6a1e3 commit dbf5e6c

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/TlsConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class TlsConfiguration extends Configuration
2828
public static final LongPropertyDef TLS_AWAIT_SYNC_CLOSE_MILLIS;
2929
public static final BooleanPropertyDef TLS_PROACTIVE_CLIENT_REPLY_BEGIN;
3030
public static final BooleanPropertyDef TLS_CLIENT_HTTPS_IDENTIFICATION;
31+
public static final BooleanPropertyDef TLS_CLIENT_SERVER_NAME_INDICATION;
3132
public static final BooleanPropertyDef TLS_VERBOSE;
3233
public static final BooleanPropertyDef TLS_DEBUG;
3334

@@ -42,6 +43,7 @@ public class TlsConfiguration extends Configuration
4243
TLS_AWAIT_SYNC_CLOSE_MILLIS = config.property("await.sync.close.millis", 3000L);
4344
TLS_PROACTIVE_CLIENT_REPLY_BEGIN = config.property("proactive.client.reply.begin", false);
4445
TLS_CLIENT_HTTPS_IDENTIFICATION = config.property("client.https.identification", true);
46+
TLS_CLIENT_SERVER_NAME_INDICATION = config.property("client.server.name.indication", true);
4547
TLS_VERBOSE = config.property("verbose", TlsConfiguration::verboseDefault);
4648
TLS_DEBUG = config.property("debug", TlsConfiguration::debugDefault);
4749
TLS_CONFIG = config;
@@ -83,6 +85,11 @@ public boolean clientHttpsIdentification()
8385
return TLS_CLIENT_HTTPS_IDENTIFICATION.getAsBoolean(this);
8486
}
8587

88+
public boolean clientServerNameIndication()
89+
{
90+
return TLS_CLIENT_SERVER_NAME_INDICATION.getAsBoolean(this);
91+
}
92+
8693
public boolean verbose()
8794
{
8895
return TLS_VERBOSE.getAsBoolean(this);

runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/config/TlsBindingConfig.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public final class TlsBindingConfig
7373
private SSLContext context;
7474

7575
private boolean clientHttpsIdentification;
76+
private boolean clientServerNameIndication;
7677

7778
public TlsBindingConfig(
7879
BindingConfig binding)
@@ -126,6 +127,7 @@ public void init(
126127

127128
this.context = context;
128129
this.clientHttpsIdentification = config.clientHttpsIdentification();
130+
this.clientServerNameIndication = config.clientServerNameIndication();
129131
}
130132
catch (Exception ex)
131133
{
@@ -240,9 +242,10 @@ public SSLEngine newClientEngine(
240242
parameters.setEndpointIdentificationAlgorithm("HTTPS");
241243
}
242244

243-
if (sni != null)
245+
if (clientServerNameIndication && sni != null)
244246
{
245247
List<SNIServerName> serverNames = sni.stream()
248+
.map(TlsBindingConfig::trimHostnameTrailingDot)
246249
.map(SNIHostName::new)
247250
.collect(toList());
248251
parameters.setServerNames(serverNames);
@@ -496,4 +499,10 @@ private List<String> ignoreEmptyNames(
496499

497500
return names;
498501
}
502+
503+
private static String trimHostnameTrailingDot(
504+
String hostname)
505+
{
506+
return hostname.endsWith(".") ? hostname.substring(0, hostname.length() - 1) : hostname;
507+
}
499508
}

0 commit comments

Comments
 (0)