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

com.hazelcast.config.JavaKeyStoreSecureStoreConfig Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
/*
 * Copyright (c) 2008-2023, Hazelcast, Inc. All Rights Reserved.
 *
 * Licensed 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 com.hazelcast.config;

import java.io.File;
import java.util.Objects;

import static com.hazelcast.internal.util.Preconditions.checkNotNegative;
import static com.hazelcast.internal.util.Preconditions.checkNotNull;

/**
 * Java KeyStore Secure Store configuration.
 * 

* The Java KeyStore Secure Store exposes (symmetric) encryption keys stored in a Java KeyStore * with path, type, and password as specified by {@link #getType()}, {@link #getPath()}, and * {@link #getPassword()}, respectively. The Java KeyStore SecureStore loads all symmetric keys * available in the KeyStore and treats them as versions of a single key. More specifically: *

    *
  • If an alias for the current encryption key is set (see * {@link #setCurrentKeyAlias(String)}), the corresponding KeyStore entry is treated as * the current version of the encryption key, while any other entries are treated as * historical versions of the encryption key.
  • *
  • If an alias for the current encryption key is not set, the KeyStore entry with an * alias that comes last in alphabetical order is treated as the current version of the * encryption key, while any other entries are treated as historical versions of the * encryption key.
  • *
  • The KeyStore entries are expected to use the same password as the KeyStore.
  • *
* The Java KeyStore can also poll the KeyStore for changes at preconfigured interval (disabled * by default). *

* Only file-based KeyStores are supported. */ public class JavaKeyStoreSecureStoreConfig extends SecureStoreConfig { /** * The default Java KeyStore type (PKCS12). */ public static final String DEFAULT_KEYSTORE_TYPE = "PKCS12"; /** * Default interval (in seconds) for polling for changes in the KeyStore: 0 (polling * disabled). */ public static final int DEFAULT_POLLING_INTERVAL = 0; private File path; private String type = DEFAULT_KEYSTORE_TYPE; private String password; private String currentKeyAlias; private int pollingInterval = DEFAULT_POLLING_INTERVAL; /** * Creates a new Java KeyStore Secure Store configuration. */ public JavaKeyStoreSecureStoreConfig() { } /** * Creates a new Java KeyStore Secure Store configuration. * @param path the KeyStore file path */ public JavaKeyStoreSecureStoreConfig(File path) { checkNotNull(path, "Java Key Store path cannot be null!"); this.path = path; } /** * Returns the type of the Java KeyStore. * @return the Java KeyStore type */ public String getType() { return type; } /** * Sets the Java KeyStore type (PKCS12, JCEKS etc.) * @param type the KeyStore type * @return the updated {@link JavaKeyStoreSecureStoreConfig} instance * @throws IllegalArgumentException if type is {code null} */ public JavaKeyStoreSecureStoreConfig setType(String type) { checkNotNull(type, "Java Key Store type cannot be null!"); this.type = type; return this; } /** * Returns the Java KeyStore file path. * @return the file path */ public File getPath() { return path; } /** * Sets the Java KeyStore file path. * @param path the file path * @return the updated {@link JavaKeyStoreSecureStoreConfig} instance * @throws IllegalArgumentException if path is {code null} */ public JavaKeyStoreSecureStoreConfig setPath(File path) { checkNotNull(path, "Java Key Store path cannot be null!"); this.path = path; return this; } /** * Returns the Java KeyStore password. * @return the password */ public String getPassword() { return password; } /** * Sets the Java KeyStore password. * @param password the KeyStore password * @return the updated {@link JavaKeyStoreSecureStoreConfig} instance */ public JavaKeyStoreSecureStoreConfig setPassword(String password) { // null password allowed this.password = password; return this; } /** * Returns the alias for the current encryption key entry or {@code null} if no alias is set. * @return the alias or {@code null} */ public String getCurrentKeyAlias() { return currentKeyAlias; } /** * Sets the alias for the current encryption key entry. * @param currentKeyAlias the alias for the current encryption key or {@code null} * @return the updated {@link JavaKeyStoreSecureStoreConfig} instance */ public JavaKeyStoreSecureStoreConfig setCurrentKeyAlias(String currentKeyAlias) { this.currentKeyAlias = currentKeyAlias; return this; } /** * Returns the polling interval (in seconds) for checking for changes in the KeyStore. * * @return the polling interval */ public int getPollingInterval() { return pollingInterval; } /** * Sets the polling interval (in seconds) for checking for changes in the KeyStore. The value 0 disables polling. * * @param pollingInterval the polling interval * @return the updated {@link JavaKeyStoreSecureStoreConfig} instance * @throws IllegalArgumentException if pollingInterval is less than zero */ public JavaKeyStoreSecureStoreConfig setPollingInterval(int pollingInterval) { checkNotNegative(pollingInterval, "Polling interval cannot be negative!"); this.pollingInterval = pollingInterval; return this; } @Override public String toString() { return "JavaKeyStoreSecureStoreConfig{" + "path='" + path + '\'' + ", type='" + type + '\'' + ", pollingInterval='" + pollingInterval + '\'' + ", currentKeyAlias='" + currentKeyAlias + '\'' + ", password='***'" + '}'; } @Override public final boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof JavaKeyStoreSecureStoreConfig)) { return false; } JavaKeyStoreSecureStoreConfig other = (JavaKeyStoreSecureStoreConfig) o; if (!Objects.equals(path, other.path)) { return false; } if (!Objects.equals(type, other.type)) { return false; } if (!Objects.equals(password, other.password)) { return false; } if (!Objects.equals(currentKeyAlias, other.currentKeyAlias)) { return false; } return this.pollingInterval == other.pollingInterval; } @Override public final int hashCode() { int result = path == null ? 0 : path.hashCode(); result = 31 * result + (type == null ? 0 : type.hashCode()); result = 31 * result + (password == null ? 0 : password.hashCode()); result = 31 * result + (currentKeyAlias == null ? 0 : currentKeyAlias.hashCode()); result = 31 * result + pollingInterval; return result; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy