summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-09-16 10:53:33 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-09-16 10:53:33 +0200
commit0774dd451d68dfe4288066d6fd1e0799e67db6de (patch)
tree18583a5922572335ea0efe58a1faf380ded08db0 /jdisc_http_service
parentd1152f2117d932f4dba8e942f9c08527bdcdf0fa (diff)
Allow whitelisting of uri paths in combination with implicit ssl connector
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/ssl/impl/DefaultSslContextFactoryProvider.java35
1 files changed, 30 insertions, 5 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/ssl/impl/DefaultSslContextFactoryProvider.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/ssl/impl/DefaultSslContextFactoryProvider.java
index 615cd5d46ad..f753084152e 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/ssl/impl/DefaultSslContextFactoryProvider.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/ssl/impl/DefaultSslContextFactoryProvider.java
@@ -1,24 +1,49 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.http.ssl.impl;
+import com.google.inject.Inject;
import com.yahoo.component.AbstractComponent;
+import com.yahoo.jdisc.http.ConnectorConfig;
import com.yahoo.jdisc.http.ssl.SslContextFactoryProvider;
import com.yahoo.security.tls.ConfigFileBasedTlsContext;
+import com.yahoo.security.tls.PeerAuthentication;
import com.yahoo.security.tls.TlsContext;
import com.yahoo.security.tls.TransportSecurityUtils;
import org.eclipse.jetty.util.ssl.SslContextFactory;
+import java.nio.file.Path;
+
/**
- * The default implementation of {@link SslContextFactoryProvider} to be injected into connectors without explicit ssl configuration
+ * The default implementation of {@link SslContextFactoryProvider} to be injected into connectors without explicit ssl configuration.
*
* @author bjorncs
*/
public class DefaultSslContextFactoryProvider extends AbstractComponent implements SslContextFactoryProvider {
- private final SslContextFactoryProvider instance = TransportSecurityUtils.getConfigFile()
- .map(configFile -> (SslContextFactoryProvider) new StaticTlsContextBasedProvider(
- new ConfigFileBasedTlsContext(configFile, TransportSecurityUtils.getInsecureAuthorizationMode())))
- .orElseGet(ThrowingSslContextFactoryProvider::new);
+ private final SslContextFactoryProvider instance;
+
+ @Inject
+ public DefaultSslContextFactoryProvider(ConnectorConfig connectorConfig) {
+ this.instance = TransportSecurityUtils.getConfigFile()
+ .map(configFile -> createTlsContextBasedProvider(connectorConfig, configFile))
+ .orElseGet(ThrowingSslContextFactoryProvider::new);
+ }
+
+ private static SslContextFactoryProvider createTlsContextBasedProvider(ConnectorConfig connectorConfig, Path configFile) {
+ return new StaticTlsContextBasedProvider(
+ new ConfigFileBasedTlsContext(
+ configFile, TransportSecurityUtils.getInsecureAuthorizationMode(), getPeerAuthenticationMode(connectorConfig)));
+ }
+
+ /**
+ * Allows white-listing of user provided uri paths.
+ * JDisc will delegate the enforcement of peer authentication from the TLS to the HTTP layer if {@link ConnectorConfig.TlsClientAuthEnforcer#enable()} is true.
+ */
+ private static PeerAuthentication getPeerAuthenticationMode(ConnectorConfig connectorConfig) {
+ return connectorConfig.tlsClientAuthEnforcer().enable()
+ ? PeerAuthentication.WANT
+ : PeerAuthentication.NEED;
+ }
@Override
public SslContextFactory getInstance(String containerId, int port) {