All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.solr.client.solrj.embedded.SSLConfig Maven / Gradle / Ivy

There is a newer version: 9.7.0
Show newest version
/*
 * 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.
 */
package org.apache.solr.client.solrj.embedded;

import org.eclipse.jetty.util.ssl.SslContextFactory;

/** 
 * Encapsulates settings related to SSL Configuration.
 * NOTE: all other settings are ignored if {@link #isSSLMode} is false.
 * @see #setUseSSL
 */
public class SSLConfig {
  private boolean useSsl;
  private boolean clientAuth;
  private String keyStore;
  private String keyStorePassword;
  private String trustStore;
  private String trustStorePassword;

  /** NOTE: all other settings are ignored if useSsl is false; trustStore settings are ignored if clientAuth is false */
  public SSLConfig(boolean useSsl, boolean clientAuth, String keyStore, String keyStorePassword, String trustStore, String trustStorePassword) {
    this.useSsl = useSsl;
    this.clientAuth = clientAuth;
    this.keyStore = keyStore;
    this.keyStorePassword = keyStorePassword;
    this.trustStore = trustStore;
    this.trustStorePassword = trustStorePassword;
  }
  
  public void setUseSSL(boolean useSsl) {
    this.useSsl = useSsl;
  }
  
  public void setClientAuth(boolean clientAuth) {
    this.clientAuth = clientAuth;
  }
  
  /** All other settings on this object are ignored unless this is true */
  public boolean isSSLMode() {
    return useSsl;
  }
  
  public boolean isClientAuthMode() {
    return clientAuth;
  }

  public String getKeyStore() {
    return keyStore;
  }

  public String getKeyStorePassword() {
    return keyStorePassword;
  }

  public String getTrustStore() {
    return trustStore;
  }

  public String getTrustStorePassword() {
    return trustStorePassword;
  }

  /**
   * Returns an SslContextFactory.Server that should be used by a jetty server based on the specified
   * SSLConfig param which may be null.
   *
   * if the SSLConfig param is non-null, then this method will return the results of 
   * {@link #createContextFactory()}.
   * 
   * If the SSLConfig param is null, then this method will return null unless the 
   * tests.jettySsl system property is true, in which case standard "javax.net.ssl.*" 
   * system properties will be used instead, along with "tests.jettySsl.clientAuth".
   * 
   * @see #createContextFactory()
   */
  public static SslContextFactory.Server createContextFactory(SSLConfig sslConfig) {
    if (sslConfig != null) {
      return sslConfig.createContextFactory();
    }
    // else...
    if (Boolean.getBoolean("tests.jettySsl")) {
      return configureSslFromSysProps();
    }
    // else...
    return null;
  }
  
  /**
   * Returns an SslContextFactory.Server that should be used by a jetty server based on this SSLConfig instance,
   * or null if SSL should not be used.
   *
   * The default implementation generates a simple factory according to the keystore, truststore, 
   * and clientAuth properties of this object.
   *
   * @see #getKeyStore
   * @see #getKeyStorePassword
   * @see #isClientAuthMode
   * @see #getTrustStore
   * @see #getTrustStorePassword
   */
  public SslContextFactory.Server createContextFactory() {
    if (! isSSLMode()) {
      return null;
    }
    // else...
    
    SslContextFactory.Server factory = new SslContextFactory.Server();
    if (getKeyStore() != null)
      factory.setKeyStorePath(getKeyStore());
    if (getKeyStorePassword() != null)
      factory.setKeyStorePassword(getKeyStorePassword());
    
    factory.setNeedClientAuth(isClientAuthMode());
    
    if (isClientAuthMode()) {
      if (getTrustStore() != null)
        factory.setTrustStorePath(getTrustStore());
      if (getTrustStorePassword() != null)
        factory.setTrustStorePassword(getTrustStorePassword());
    }
    return factory;
  }

  public SslContextFactory.Client createClientContextFactory() {
    if (! isSSLMode()) {
      return null;
    }
    // else...

    SslContextFactory.Client factory = new SslContextFactory.Client();
    if (getKeyStore() != null) {
      factory.setKeyStorePath(getKeyStore());
    }
    if (getKeyStorePassword() != null) {
      factory.setKeyStorePassword(getKeyStorePassword());
    }

    if (isClientAuthMode()) {
      if (getTrustStore() != null)
        factory.setTrustStorePath(getTrustStore());
      if (getTrustStorePassword() != null)
        factory.setTrustStorePassword(getTrustStorePassword());
    }

    return factory;
  }

  private static SslContextFactory.Server configureSslFromSysProps() {
    SslContextFactory.Server sslcontext = new SslContextFactory.Server();

    if (null != System.getProperty("javax.net.ssl.keyStore")) {
      sslcontext.setKeyStorePath
          (System.getProperty("javax.net.ssl.keyStore"));
    }
    if (null != System.getProperty("javax.net.ssl.keyStorePassword")) {
      sslcontext.setKeyStorePassword
          (System.getProperty("javax.net.ssl.keyStorePassword"));
    }
    if (null != System.getProperty("javax.net.ssl.trustStore")) {
      sslcontext.setTrustStorePath
          (System.getProperty("javax.net.ssl.trustStore"));
    }
    if (null != System.getProperty("javax.net.ssl.trustStorePassword")) {
      sslcontext.setTrustStorePassword
          (System.getProperty("javax.net.ssl.trustStorePassword"));
    }
    sslcontext.setNeedClientAuth(Boolean.getBoolean("tests.jettySsl.clientAuth"));

    return sslcontext;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy