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

oracle.kv.impl.security.ssl.SSLControl Maven / Gradle / Ivy

/*-
 * Copyright (C) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle NoSQL
 * Database made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/nosqldb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle NoSQL Database for a copy of the license and
 * additional information.
 */

package oracle.kv.impl.security.ssl;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocket;

import com.sleepycat.je.rep.net.SSLAuthenticator;

/**
 * SSL policy control information.
 */
public class SSLControl {

    private final SSLParameters sslParameters;
    private final SSLContext sslContext;
    private final SSLAuthenticator sslAuthenticator;
    private final HostnameVerifier sslHostVerifier;

    public SSLControl(SSLParameters sslParameters,
                      SSLContext sslContext,
                      HostnameVerifier sslHostVerifier,
                      SSLAuthenticator sslAuthenticator) {
        this.sslParameters = sslParameters;
        this.sslContext = sslContext;
        this.sslHostVerifier = sslHostVerifier;
        this.sslAuthenticator = sslAuthenticator;
    }

    public SSLParameters sslParameters() {
        return this.sslParameters;
    }

    public SSLContext sslContext() {
        return this.sslContext;
    }

    public SSLAuthenticator peerAuthenticator() {
        return this.sslAuthenticator;
    }

    public HostnameVerifier hostVerifier() {
        return this.sslHostVerifier;
    }

    public void applySSLParameters(SSLSocket sslSocket) {
        if (sslParameters != null) {
            /* Apply sslParameter-selected policies */
            if (sslParameters.getCipherSuites() != null) {
                sslSocket.setEnabledCipherSuites(
                    sslParameters.getCipherSuites());
            }

            if (sslParameters.getProtocols() != null) {
                sslSocket.setEnabledProtocols(
                    sslParameters.getProtocols());
            }

            /* These are only applicable to the server side */
            if (sslParameters.getNeedClientAuth()) {
                sslSocket.setNeedClientAuth(true);
            }
        }
    }

    /*
     * Override hashCode() and equals() to give us a better chance to
     * reduce socket usage.
     */
    @Override
    public int hashCode() {
        int result = 17;
        if (sslParameters != null) {
            result = result * 31 + sslParameters.hashCode();
        }
        if (sslContext != null) {
            result = result * 31 + sslContext.hashCode();
        }
        if (sslAuthenticator != null) {
            result = result * 31 + sslAuthenticator.hashCode();
        }
        return result;
    }

    @Override
    public boolean equals(Object obj) {

        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        final SSLControl other = (SSLControl) obj;

        if (sslParameters != other.sslParameters) {
            return false;
        }

        if (sslContext != other.sslContext) {
            return false;
        }

        if (sslAuthenticator != other.sslAuthenticator) {
            return false;
        }

        return true;
    }

    @Override
    public String toString() {
        return "SSLControl[" +
            " sslParameters=" + sslParameters +
            " sslContext=" + sslContext +
            " sslAuthenticator=" + sslAuthenticator + "]";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy