⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sslconfigurationfactory.java

📁 JAVA FTP 上传下载 的源文件
💻 JAVA
字号:
/* * 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.ftpserver.ssl;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.security.GeneralSecurityException;import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.TrustManagerFactory;import org.apache.ftpserver.FtpServerConfigurationException;import org.apache.ftpserver.ssl.impl.DefaultSslConfiguration;import org.apache.ftpserver.util.IoUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Used to configure the SSL settings for the control channel or the data * channel. * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 693604 $, $Date: 2008-09-09 22:55:19 +0200 (Tue, 09 Sep 2008) $ */public class SslConfigurationFactory {    private final Logger LOG = LoggerFactory            .getLogger(SslConfigurationFactory.class);    private File keystoreFile = new File("./res/.keystore");    private String keystorePass;    private String keystoreType = KeyStore.getDefaultType();    private String keystoreAlgorithm = KeyManagerFactory.getDefaultAlgorithm();    private File trustStoreFile;    private String trustStorePass;    private String trustStoreType = KeyStore.getDefaultType();    private String trustStoreAlgorithm = TrustManagerFactory.getDefaultAlgorithm();    private String sslProtocol = "TLS";    private ClientAuth clientAuth = ClientAuth.NONE;    private String keyPass;    private String keyAlias;    private String[] enabledCipherSuites;    /**     * The key store file used by this configuration     *      * @return The key store file     */    public File getKeystoreFile() {        return keystoreFile;    }    /**     * Set the key store file to be used by this configuration     *      * @param keyStoreFile     *            A path to an existing key store file     */    public void setKeystoreFile(File keyStoreFile) {        this.keystoreFile = keyStoreFile;    }    /**     * The password used to load the key store     *      * @return The password     */    public String getKeystorePassword() {        return keystorePass;    }    /**     * Set the password used to load the key store     *      * @param keystorePass     *            The password     */    public void setKeystorePassword(String keystorePass) {        this.keystorePass = keystorePass;    }    /**     * The key store type, defaults to @see {@link KeyStore#getDefaultType()}     *      * @return The key store type     */    public String getKeystoreType() {        return keystoreType;    }    /**     * Set the key store type     *      * @param keystoreType     *            The key store type     */    public void setKeystoreType(String keystoreType) {        this.keystoreType = keystoreType;    }    /**     * The algorithm used to open the key store. Defaults to "SunX509"     *      * @return The key store algorithm     */    public String getKeystoreAlgorithm() {        return keystoreAlgorithm;    }    /**     * Override the key store algorithm used to open the key store     *      * @param keystoreAlgorithm     *            The key store algorithm     */    public void setKeystoreAlgorithm(String keystoreAlgorithm) {        this.keystoreAlgorithm = keystoreAlgorithm;    }    /**     * The SSL protocol used for this channel. Supported values are "SSL" and     * "TLS". Defaults to "TLS".     *      * @return The SSL protocol     */    public String getSslProtocol() {        return sslProtocol;    }    /**     * Set the SSL protocol used for this channel. Supported values are "SSL"     * and "TLS". Defaults to "TLS".     *      * @param sslProtocol     *            The SSL protocol     */    public void setSslProtocol(String sslProtocol) {        this.sslProtocol = sslProtocol;    }    /**     * Set what client authentication level to use, supported values are "yes"     * or "true" for required authentication, "want" for wanted authentication     * and "false" or "none" for no authentication. Defaults to "none".     *      * @param clientAuthReqd     *            The desired authentication level     */    public void setClientAuthentication(String clientAuthReqd) {        if ("true".equalsIgnoreCase(clientAuthReqd)                || "yes".equalsIgnoreCase(clientAuthReqd)                || "need".equalsIgnoreCase(clientAuthReqd)) {            this.clientAuth = ClientAuth.NEED;        } else if ("want".equalsIgnoreCase(clientAuthReqd)) {            this.clientAuth = ClientAuth.WANT;        } else {            this.clientAuth = ClientAuth.NONE;        }    }    /**     * The password used to load the key     *      * @return The password     */    public String getKeyPassword() {        return keyPass;    }    /**     * Set the password used to load the key     *      * @param keyPass     *            The password     */    public void setKeyPassword(String keyPass) {        this.keyPass = keyPass;    }    /**     * Get the file used to load the truststore     * @return The {@link File} containing the truststore     */    public File getTruststoreFile() {        return trustStoreFile;    }    /**     * Set the password used to load the trust store     *      * @param trustStoreFile     *            The password     */    public void setTruststoreFile(File trustStoreFile) {        this.trustStoreFile = trustStoreFile;    }    /**     * The password used to load the trust store     *      * @return The password     */    public String getTruststorePassword() {        return trustStorePass;    }    /**     * Set the password used to load the trust store     *      * @param trustStorePass     *            The password     */    public void setTruststorePassword(String trustStorePass) {        this.trustStorePass = trustStorePass;    }    /**     * The trust store type, defaults to @see {@link KeyStore#getDefaultType()}     *      * @return The trust store type     */    public String getTruststoreType() {        return trustStoreType;    }    /**     * Set the trust store type     *      * @param trustStoreType     *            The trust store type     */    public void setTruststoreType(String trustStoreType) {        this.trustStoreType = trustStoreType;    }    /**     * The algorithm used to open the trust store. Defaults to "SunX509"     *      * @return The trust store algorithm     */    public String getTruststoreAlgorithm() {        return trustStoreAlgorithm;    }    /**     * Override the trust store algorithm used to open the trust store     *      * @param trustStoreAlgorithm     *            The trust store algorithm     */    public void setTruststoreAlgorithm(String trustStoreAlgorithm) {        this.trustStoreAlgorithm = trustStoreAlgorithm;    }    private KeyStore loadStore(File storeFile, String storeType,            String storePass) throws IOException, GeneralSecurityException {        InputStream fin = null;        try {            if(storeFile.exists()) {                LOG.debug("Trying to load store from file");                fin = new FileInputStream(storeFile);            } else {                LOG.debug("Trying to load store from classpath");                fin = getClass().getClassLoader().getResourceAsStream(storeFile.getPath());                                if(fin == null) {                    throw new FtpServerConfigurationException("Key store could not be loaded from " + storeFile.getPath());                }            }                        KeyStore store = KeyStore.getInstance(storeType);            store.load(fin, storePass.toCharArray());            return store;        } finally {            IoUtils.close(fin);        }    }    /**     * Create an instance of {@link SslConfiguration} based on the configuration     * of this factory.     * @return The {@link SslConfiguration} instance     */    public SslConfiguration createSslConfiguration() {        try {            // initialize keystore            LOG                    .debug(                            "Loading key store from \"{}\", using the key store type \"{}\"",                            keystoreFile.getAbsolutePath(), keystoreType);            KeyStore keyStore = loadStore(keystoreFile, keystoreType,                    keystorePass);            KeyStore trustStore;            if (trustStoreFile != null) {                LOG                        .debug(                                "Loading trust store from \"{}\", using the key store type \"{}\"",                                trustStoreFile.getAbsolutePath(),                                trustStoreType);                trustStore = loadStore(trustStoreFile, trustStoreType,                        trustStorePass);            } else {                trustStore = keyStore;            }            String keyPassToUse;            if (keyPass == null) {                keyPassToUse = keystorePass;            } else {                keyPassToUse = keyPass;            }            // initialize key manager factory            KeyManagerFactory keyManagerFactory = KeyManagerFactory                    .getInstance(keystoreAlgorithm);            keyManagerFactory.init(keyStore, keyPassToUse.toCharArray());            // initialize trust manager factory            TrustManagerFactory trustManagerFactory = TrustManagerFactory                    .getInstance(trustStoreAlgorithm);            trustManagerFactory.init(trustStore);                        return new DefaultSslConfiguration(                    keyManagerFactory, trustManagerFactory,                     clientAuth, sslProtocol,                     enabledCipherSuites, keyAlias);        } catch (Exception ex) {            LOG.error("DefaultSsl.configure()", ex);            throw new FtpServerConfigurationException("DefaultSsl.configure()",                    ex);        }    }    /**     * Return the required client authentication setting     *      * @return {@link ClientAuth#NEED} if client authentication is required,     *         {@link ClientAuth#WANT} is client authentication is wanted or     *         {@link ClientAuth#NONE} if no client authentication is the be     *         performed     */    public ClientAuth getClientAuth() {        return clientAuth;    }    /**     * Returns the cipher suites that should be enabled for this connection.     * Must return null if the default (as decided by the JVM) cipher suites     * should be used.     *      * @return An array of cipher suites, or null.     */    public String[] getEnabledCipherSuites() {        if (enabledCipherSuites != null) {            return enabledCipherSuites.clone();        } else {            return null;        }    }    /**     * Set the allowed cipher suites, note that the exact list of supported     * cipher suites differs between JRE implementations.     *      * @param enabledCipherSuites     */    public void setEnabledCipherSuites(String[] enabledCipherSuites) {        if (enabledCipherSuites != null) {            this.enabledCipherSuites = enabledCipherSuites.clone();        } else {            this.enabledCipherSuites = null;        }    }    /**     * Get the server key alias to be used for SSL communication     *      * @return The alias, or null if none is set     */    public String getKeyAlias() {        return keyAlias;    }    /**     * Set the alias for the key to be used for SSL communication. If the     * specified key store contains multiple keys, this alias can be set to     * select a specific key.     *      * @param keyAlias     *            The alias to use, or null if JSSE should be allowed to choose     *            the key.     */    public void setKeyAlias(String keyAlias) {        this.keyAlias = keyAlias;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -