/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.visualvm.modules.security; import com.sun.tools.visualvm.core.datasupport.Utils; import java.util.prefs.Preferences; import org.openide.util.NbPreferences; /** * * @author Jiri Sedlacek */ class SecurityModel { static final String KEYSTORE_LOCATION = "javax.net.ssl.keyStore"; // NOI18N static final String KEYSTORE_TYPE = "javax.net.ssl.keyStoreType"; // NOI18N static final String KEYSTORE_PASSWORD = "javax.net.ssl.keyStorePassword"; // NOI18N static final String TRUSTSTORE_LOCATION = "javax.net.ssl.trustStore"; // NOI18N static final String TRUSTSTORE_TYPE = "javax.net.ssl.trustStoreType"; // NOI18N static final String TRUSTSTORE_PASSWORD = "javax.net.ssl.trustStorePassword"; // NOI18N static final String ENABLED_CIPHER_SUITES = "javax.rmi.ssl.client.enabledCipherSuites"; // NOI18N static final String ENABLED_PROTOCOLS = "javax.rmi.ssl.client.enabledProtocols"; // NOI18N private static final String CUSTOMIZED_MSG = "Environment already customized by command line"; // NOI18N private static SecurityModel INSTANCE; private final boolean environmentCustomized; private final Preferences prefs; static synchronized SecurityModel getInstance() { if (INSTANCE == null) INSTANCE = new SecurityModel(); return INSTANCE; } boolean environmentCustomized() { return environmentCustomized; } boolean customizeEnvironment() { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); boolean customized = false; String keyStore = getKeyStore(); if (keyStore != null) { customized = true; System.setProperty(KEYSTORE_LOCATION, keyStore); char[] keyStorePassword = getKeyStorePassword(); if (keyStorePassword != null) System.setProperty(KEYSTORE_PASSWORD, new String(keyStorePassword)); String keyStoreType = getKeyStoreType(); if (keyStoreType != null) System.setProperty(KEYSTORE_TYPE, keyStoreType); } String trustStore = getTrustStore(); if (trustStore != null) { customized = true; System.setProperty(TRUSTSTORE_LOCATION, trustStore); char[] trustStorePassword = getTrustStorePassword(); if (trustStorePassword != null) System.setProperty(TRUSTSTORE_PASSWORD, new String(trustStorePassword)); String trustStoreType = getTrustStoreType(); if (trustStoreType != null) System.setProperty(TRUSTSTORE_TYPE, trustStoreType); } String enabledProtocols = getEnabledProtocols(); if (enabledProtocols != null) { customized = true; System.setProperty(ENABLED_PROTOCOLS, enabledProtocols); } String enabledCipherSuites = getEnabledCipherSuites(); if (enabledCipherSuites != null) { customized = true; System.setProperty(ENABLED_CIPHER_SUITES, enabledCipherSuites); } return customized; } String getKeyStore() { if (environmentCustomized) return getKeyStoreEnv(); else return prefs.get(KEYSTORE_LOCATION, null); } static String getKeyStoreEnv() { return System.getProperty(KEYSTORE_LOCATION); } void setKeyStore(String keyStore) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (keyStore == null) prefs.remove(KEYSTORE_LOCATION); else prefs.put(KEYSTORE_LOCATION, keyStore); } char[] getKeyStorePassword() { if (environmentCustomized) return getKeyStorePasswordEnv(); String password = prefs.get(KEYSTORE_PASSWORD, null); return password == null ? null : Utils.decodePassword(password).toCharArray(); } static char[] getKeyStorePasswordEnv() { String password = System.getProperty(KEYSTORE_PASSWORD); return password == null ? null : password.toCharArray(); } void setKeyStorePassword(char[] keyStorePassword) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (keyStorePassword == null) prefs.remove(KEYSTORE_PASSWORD); else prefs.put(KEYSTORE_PASSWORD, Utils.encodePassword( new String(keyStorePassword))); } String getKeyStoreType() { if (environmentCustomized) return getKeyStoreTypeEnv(); else return prefs.get(KEYSTORE_TYPE, null); } static String getKeyStoreTypeEnv() { return System.getProperty(KEYSTORE_TYPE); } void setKeyStoreType(String keyStoreType) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (keyStoreType == null) prefs.remove(KEYSTORE_TYPE); else prefs.put(KEYSTORE_TYPE, keyStoreType); } String getTrustStore() { if (environmentCustomized) return getTrustStoreEnv(); else return prefs.get(TRUSTSTORE_LOCATION, null); } static String getTrustStoreEnv() { return System.getProperty(TRUSTSTORE_LOCATION); } void setTrustStore(String trustStore) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (trustStore == null) prefs.remove(TRUSTSTORE_LOCATION); else prefs.put(TRUSTSTORE_LOCATION, trustStore); } char[] getTrustStorePassword() { if (environmentCustomized) return getTrustStorePasswordEnv(); String password = prefs.get(TRUSTSTORE_PASSWORD, null); return password == null ? null : Utils.decodePassword(password).toCharArray(); } static char[] getTrustStorePasswordEnv() { String password = System.getProperty(TRUSTSTORE_PASSWORD); return password == null ? null : password.toCharArray(); } void setTrustStorePassword(char[] trustStorePassword) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (trustStorePassword == null) prefs.remove(TRUSTSTORE_PASSWORD); else prefs.put(TRUSTSTORE_PASSWORD, Utils.encodePassword( new String(trustStorePassword))); } String getTrustStoreType() { if (environmentCustomized) return getTrustStoreTypeEnv(); else return prefs.get(TRUSTSTORE_TYPE, null); } static String getTrustStoreTypeEnv() { return System.getProperty(TRUSTSTORE_TYPE); } void setTrustStoreType(String trustStoreType) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (trustStoreType == null) prefs.remove(TRUSTSTORE_TYPE); else prefs.put(TRUSTSTORE_TYPE, trustStoreType); } String getEnabledProtocols() { if (environmentCustomized) return getEnabledProtocolsEnv(); else return prefs.get(ENABLED_PROTOCOLS, null); } static String getEnabledProtocolsEnv() { return System.getProperty(ENABLED_PROTOCOLS); } void setEnabledProtocols(String enabledProtocols) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (enabledProtocols == null) prefs.remove(ENABLED_PROTOCOLS); // NOI18N else prefs.put(ENABLED_PROTOCOLS, enabledProtocols); } String getEnabledCipherSuites() { if (environmentCustomized) return getEnabledCipherSuitesEnv(); else return prefs.get(ENABLED_CIPHER_SUITES, null); } static String getEnabledCipherSuitesEnv() { return System.getProperty(ENABLED_CIPHER_SUITES); } void setEnabledCipherSuites(String enabledCipherSuites) { if (environmentCustomized) throw new UnsupportedOperationException(CUSTOMIZED_MSG); if (enabledCipherSuites == null) prefs.remove(ENABLED_CIPHER_SUITES); // NOI18N else prefs.put(ENABLED_CIPHER_SUITES, enabledCipherSuites); } private static boolean environmentCustomizedImpl() { if (getKeyStoreEnv() != null) return true; else if (getKeyStorePasswordEnv() != null) return true; else if (getKeyStoreTypeEnv() != null) return true; else if (getTrustStoreEnv() != null) return true; else if (getTrustStorePasswordEnv() != null) return true; else if (getTrustStoreTypeEnv() != null) return true; else if (getEnabledProtocolsEnv() != null) return true; else if (getEnabledCipherSuitesEnv() != null) return true; return false; } private SecurityModel() { environmentCustomized = environmentCustomizedImpl(); prefs = NbPreferences.forModule(SecurityModel.class); } }