blob: 2bb9f6882b35ceffd8e43c5d771cb5b4dc8ab555 (
plain) (
tree)
|
|
package org.openslx.satellitedaemon;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.Properties;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.log4j.Logger;
public class Globals {
private static Logger log = Logger.getLogger(Globals.class);
private static final Properties properties = new Properties();
private static SSLContext context = null;
private static final KeyFactory keyFact;
public static final int BLOCKSIZE = 16 * 1024 * 1024; // 16 MB blocksize
public static void init() {
}
/***********************************************************************************************/
/**
* A call of Globals.getXXXXXX() returns the corresponding entry in config/global.properties
*/
// * Properties *//
// Strings //
public static String getMasterserverHost() {
return properties.getProperty("MASTERSERVER_HOST");
}
public static String getKeystoreType() {
return properties.getProperty("KEYSTORE_TYPE");
}
public static String getFiletransferKeystorePath() {
return properties.getProperty("FILETRANSFER_KEYSTORE_PATH");
}
public static String getFiletransferKeystorePassword() {
return properties.getProperty("FILETRANSFER_KEYSTORE_PASSWORD");
}
public static String getOrganizationName() {
return properties.getProperty("ORGANIZATION_NAME");
}
public static String getThriftKeystoreAlias() {
return properties.getProperty("THRIFT_KEYSTORE_ALIAS");
}
public static String getThriftKeystorePassword() {
return properties.getProperty("THRIFT_KEYSTORE_PASSWORD");
}
public static String getThriftKeystorePath() {
return properties.getProperty("THRIFT_KEYSTORE_PATH");
}
public static String getImageFolder() {
return properties.getProperty("IMAGE_FOLDER");
}
// Integers //
public static int getThriftPort() {
return tryToParseInt(properties.getProperty("THRIFT_PORT"));
}
/**
* Load properties
*/
static {
try {
// Load all entries of the config file into properties
InputStreamReader stream = new InputStreamReader(
new FileInputStream("config/global.properties"), StandardCharsets.UTF_8);
properties.load(stream);
stream.close();
} catch (IOException e) {
log.error("Could not load properties. Exiting.");
System.exit(2);
}
KeyFactory kf;
try {
kf = KeyFactory.getInstance("RSA");
} catch (NoSuchAlgorithmException nSAE) {
kf = null;
}
keyFact = kf;
notNullOrEmptyFatal(getMasterserverHost(), "Masterserver Host must not be empty!");
// TODO: check properties
}
/***********************************************************************************************/
/**
*
* @return
*/
public static boolean masterServerSslContextInit() {
char[] passphrase = getFiletransferKeystorePassword().toCharArray();
KeyStore keystore;
try {
keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream(getFiletransferKeystorePath()),
passphrase);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);
context = SSLContext.getInstance("SSLv3");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
} catch (KeyStoreException e) {
log.error("KeyStoreException");
return false;
} catch (NoSuchAlgorithmException e) {
log.error("NoSuchAlgorithmException");
return false;
} catch (CertificateException e) {
log.error("CertificateException");
return false;
} catch (FileNotFoundException e) {
log.error("Could not find the keystore for the filetransfer. Path was '" + getFiletransferKeystorePath() + "'");
return false;
} catch (IOException e) {
log.error("IOException", e);
return false;
} catch (KeyManagementException e) {
log.error("KeyManagementException");
return false;
}
return true;
}
public static SSLContext getMasterServerSslContext() {
return Globals.context;
}
/**
* Tries to parse an int. Returns 0 on error.
*
* @param s
* The strig to parse
* @return The parsed int or 0 on error
*/
public static int tryToParseInt(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return 0;
}
}
public static void notNullOrEmptyFatal(String something, String message) {
if (something == null || something.isEmpty()) {
if (message != null)
log.fatal("[NOTNULL] " + message);
log.warn(Thread.currentThread().getStackTrace().toString());
System.exit(2);
}
}
public static PrivateKey getPrivateKey() {
PrivateKey ret;
BufferedReader br = null;
String modulus, exponent;
try {
br = new BufferedReader(new FileReader("config/private.key"));
modulus = br.readLine();
exponent = br.readLine();
} catch (FileNotFoundException e) {
log.error("File 'private.key' not found!", e);
return null;
} catch (IOException e) {
log.error("File 'private.key' not correct readable.", e);
return null;
} finally {
try {
br.close();
} catch (IOException e) {
}
}
if (modulus == null || exponent == null) {
return null;
}
try {
BigInteger mod = new BigInteger(modulus);
BigInteger exp = new BigInteger(exponent);
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(mod, exp);
synchronized (keyFact) {
ret = keyFact.generatePrivate(keySpec);
}
} catch (InvalidKeySpecException e) {
log.error("Not able to build key with given numbers.", e);
return null;
} catch (NumberFormatException e) {
log.error("Invalid number format.", e);
return null;
}
return ret;
}
}
|