From 83b4d2f7f9b7cab290ca1b2b23687cc2f36d33ac Mon Sep 17 00:00:00 2001 From: kishan Date: Mon, 24 Oct 2011 10:25:20 +0530 Subject: [PATCH] bug 5822, 10783: Security enhancements initial checkin. Added encryption support to db.properties and some DB values. --- client/tomcatconf/components-premium.xml.in | 1 + client/tomcatconf/components.xml.in | 1 + client/tomcatconf/db.properties.in | 3 + .../cloud/configuration/ConfigurationVO.java | 2 +- core/src/com/cloud/host/DetailVO.java | 2 +- core/src/com/cloud/network/VpnUserVO.java | 2 +- core/src/com/cloud/user/UserAccountVO.java | 2 +- core/src/com/cloud/user/UserVO.java | 6 +- core/src/com/cloud/vm/VMInstanceVO.java | 2 +- deps/.classpath | 1 + deps/cloud-jasypt-1.8.jar | Bin 0 -> 178961 bytes .../dao/ConfigurationDaoImpl.java | 3 +- .../cloud/upgrade/DatabaseUpgradeChecker.java | 32 +-- .../PremiumDatabaseUpgradeChecker.java | 32 +-- .../cloud/upgrade/dao/Upgrade2213to30.java | 238 ++++++++++++++++++ ...chema-2212to30.sql => schema-2213to30.sql} | 2 +- .../utils/component/ComponentLocator.java | 8 +- .../cloud/utils/crypt/DBEncryptionUtil.java | 84 +++++++ .../crypt/EncryptionSecretKeyChecker.java | 140 +++++++++++ .../crypt/EncryptionSecretKeySender.java | 65 +++++ utils/src/com/cloud/utils/db/Attribute.java | 10 +- .../com/cloud/utils/db/GenericDaoBase.java | 20 +- utils/src/com/cloud/utils/db/Transaction.java | 14 +- utils/src/javax/persistence/Column.java | 4 + 24 files changed, 623 insertions(+), 51 deletions(-) create mode 100644 deps/cloud-jasypt-1.8.jar create mode 100644 server/src/com/cloud/upgrade/dao/Upgrade2213to30.java rename setup/db/db/{schema-2212to30.sql => schema-2213to30.sql} (98%) create mode 100755 utils/src/com/cloud/utils/crypt/DBEncryptionUtil.java create mode 100755 utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java create mode 100755 utils/src/com/cloud/utils/crypt/EncryptionSecretKeySender.java diff --git a/client/tomcatconf/components-premium.xml.in b/client/tomcatconf/components-premium.xml.in index 9472e76744d..366383fe672 100755 --- a/client/tomcatconf/components-premium.xml.in +++ b/client/tomcatconf/components-premium.xml.in @@ -2,6 +2,7 @@ + diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index c6307bfac6e..9a1a4ccc7b0 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -25,6 +25,7 @@ + diff --git a/client/tomcatconf/db.properties.in b/client/tomcatconf/db.properties.in index f3a01a9835b..698ce41270a 100644 --- a/client/tomcatconf/db.properties.in +++ b/client/tomcatconf/db.properties.in @@ -33,6 +33,9 @@ db.cloud.keyStorePassword= db.cloud.trustStore= db.cloud.trustStorePassword= +# Encryption Settings +db.cloud.encryption.type=none +db.cloud.encrypt.secret= # usage database settings db.usage.username=@DBUSER@ diff --git a/core/src/com/cloud/configuration/ConfigurationVO.java b/core/src/com/cloud/configuration/ConfigurationVO.java index 500f1ea701e..95f32fd04db 100644 --- a/core/src/com/cloud/configuration/ConfigurationVO.java +++ b/core/src/com/cloud/configuration/ConfigurationVO.java @@ -36,7 +36,7 @@ public class ConfigurationVO implements Configuration{ @Column(name="name") private String name; - @Column(name="value", length=4095) + @Column(name="value", length=4095, encryptable=true) private String value; @Column(name="description", length=1024) diff --git a/core/src/com/cloud/host/DetailVO.java b/core/src/com/cloud/host/DetailVO.java index 021590a3c90..d87081f25cb 100644 --- a/core/src/com/cloud/host/DetailVO.java +++ b/core/src/com/cloud/host/DetailVO.java @@ -38,7 +38,7 @@ public class DetailVO { @Column(name="name") private String name; - @Column(name="value") + @Column(name="value", encryptable=true) private String value; protected DetailVO() { diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 586fb690db4..9bd869e5985 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -44,7 +44,7 @@ public class VpnUserVO implements VpnUser { @Column(name="username") private String username; - @Column(name="password") + @Column(name="password", encryptable=true) private String password; @Column(name="state") diff --git a/core/src/com/cloud/user/UserAccountVO.java b/core/src/com/cloud/user/UserAccountVO.java index af578d76636..69f4cb747fd 100644 --- a/core/src/com/cloud/user/UserAccountVO.java +++ b/core/src/com/cloud/user/UserAccountVO.java @@ -44,7 +44,7 @@ public class UserAccountVO implements UserAccount { @Column(name="username") private String username = null; - @Column(name="password") + @Column(name="password", encryptable=true) private String password = null; @Column(name="firstname") diff --git a/core/src/com/cloud/user/UserVO.java b/core/src/com/cloud/user/UserVO.java index c5fc3b70250..dcd7578c059 100644 --- a/core/src/com/cloud/user/UserVO.java +++ b/core/src/com/cloud/user/UserVO.java @@ -50,7 +50,7 @@ public class UserVO implements User { @Column(name = "username") private String username = null; - @Column(name = "password") + @Column(name = "password", encryptable=true) private String password = null; @Column(name = "firstname") @@ -69,10 +69,10 @@ public class UserVO implements User { @Enumerated(value=EnumType.STRING) private State state; - @Column(name = "api_key") + @Column(name = "api_key", encryptable=true) private String apiKey = null; - @Column(name = "secret_key") + @Column(name = "secret_key", encryptable=true) private String secretKey = null; @Column(name = GenericDao.CREATED_COLUMN) diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java index df02d666230..8c28a31d892 100644 --- a/core/src/com/cloud/vm/VMInstanceVO.java +++ b/core/src/com/cloud/vm/VMInstanceVO.java @@ -56,7 +56,7 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject + diff --git a/deps/cloud-jasypt-1.8.jar b/deps/cloud-jasypt-1.8.jar new file mode 100644 index 0000000000000000000000000000000000000000..daaed002a464ed4279b71fbb33c494d75aee7666 GIT binary patch literal 178961 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

euzjz&F8FX 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

  • ?0g&*6bH1&#JIpJ%J0@fe5W1d~Ef~bJ}Q8A9$ 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%0DJ*%nk0t7@}wYF;Vf?1iK7Y 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 literal 0 HcmV?d00001 diff --git a/server/src/com/cloud/configuration/dao/ConfigurationDaoImpl.java b/server/src/com/cloud/configuration/dao/ConfigurationDaoImpl.java index e6505e55fee..8bf4754391c 100644 --- a/server/src/com/cloud/configuration/dao/ConfigurationDaoImpl.java +++ b/server/src/com/cloud/configuration/dao/ConfigurationDaoImpl.java @@ -32,6 +32,7 @@ import org.apache.log4j.Logger; import com.cloud.configuration.ConfigurationVO; import com.cloud.storage.DiskOfferingVO; +import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -126,7 +127,7 @@ public class ConfigurationDaoImpl extends GenericDaoBase. + * + */ +package com.cloud.upgrade.dao; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; + +import org.apache.log4j.Logger; + +import com.cloud.utils.crypt.DBEncryptionUtil; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; + +public class Upgrade2213to30 implements DbUpgrade { + final static Logger s_logger = Logger.getLogger(Upgrade2213to30.class); + + @Override + public String[] getUpgradableVersionRange() { + return new String[] { "2.2.13", "3.0.0"}; + } + + @Override + public String getUpgradedVersion() { + return "3.0.0"; + } + + @Override + public boolean supportsRollingUpgrade() { + return true; + } + + @Override + public File[] getPrepareScripts() { + String script = Script.findScript("", "db/db/schema-2213to30.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-2213to30.sql"); + } + + return new File[] { new File(script) }; + } + + @Override + public void performDataMigration(Connection conn) { + encryptData(conn); + } + + @Override + public File[] getCleanupScripts() { + return null; + } + + + private void encryptData(Connection conn) { + encryptConfigValues(conn); + encryptHostDetails(conn); + encryptVNCPassword(conn); + encryptUserCredentials(conn); + } + + private void encryptConfigValues(Connection conn) { + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + pstmt = conn.prepareStatement("select name, value from configuration"); + rs = pstmt.executeQuery(); + while (rs.next()) { + String name = rs.getString(1); + String value = rs.getString(2); + if(value == null){ + continue; + } + String encryptedValue = DBEncryptionUtil.encrypt(value); + pstmt = conn.prepareStatement("update configuration set value=? where name=?"); + pstmt.setBytes(1, encryptedValue.getBytes("UTF-8")); + pstmt.setString(2, name); + pstmt.executeUpdate(); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Unable encrypt configuration values"); + } catch (UnsupportedEncodingException e) { + throw new CloudRuntimeException("Unable encrypt configuration values"); + } finally { + try { + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } + } + + private void encryptHostDetails(Connection conn) { + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + pstmt = conn.prepareStatement("select id, value from host_details"); + rs = pstmt.executeQuery(); + while (rs.next()) { + long id = rs.getLong(1); + String value = rs.getString(2); + if(value == null){ + continue; + } + String encryptedValue = DBEncryptionUtil.encrypt(value); + pstmt = conn.prepareStatement("update host_details set value=? where id=?"); + pstmt.setBytes(1, encryptedValue.getBytes("UTF-8")); + pstmt.setLong(2, id); + pstmt.executeUpdate(); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Unable encrypt host_details values"); + } catch (UnsupportedEncodingException e) { + throw new CloudRuntimeException("Unable encrypt configuration values"); + } finally { + try { + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } + } + + private void encryptVNCPassword(Connection conn) { + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + pstmt = conn.prepareStatement("select id, vnc_password from vm_instance"); + rs = pstmt.executeQuery(); + while (rs.next()) { + long id = rs.getLong(1); + String value = rs.getString(2); + if(value == null){ + continue; + } + String encryptedValue = DBEncryptionUtil.encrypt(value); + pstmt = conn.prepareStatement("update vm_instance set vnc_password=? where id=?"); + pstmt.setBytes(1, encryptedValue.getBytes("UTF-8")); + pstmt.setLong(2, id); + pstmt.executeUpdate(); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Unable encrypt vm_instance vnc_password"); + } catch (UnsupportedEncodingException e) { + throw new CloudRuntimeException("Unable encrypt configuration values"); + } finally { + try { + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } + } + + private void encryptUserCredentials(Connection conn) { + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + pstmt = conn.prepareStatement("select id, password, api_key, secret_key from user"); + rs = pstmt.executeQuery(); + while (rs.next()) { + long id = rs.getLong(1); + String password = rs.getString(2); + String encryptedPassword = DBEncryptionUtil.encrypt(password); + String apiKey = rs.getString(3); + String encryptedApiKey = DBEncryptionUtil.encrypt(apiKey); + String secretKey = rs.getString(4); + String encryptedSecretKey = DBEncryptionUtil.encrypt(secretKey); + pstmt = conn.prepareStatement("update user set password=?, api_key=?, secret_key=? where id=?"); + if(encryptedPassword == null){ + pstmt.setNull(1, Types.VARCHAR); + } else { + pstmt.setBytes(1, encryptedPassword.getBytes("UTF-8")); + } + if(encryptedApiKey == null){ + pstmt.setNull(2, Types.VARCHAR); + } else { + pstmt.setBytes(2, encryptedApiKey.getBytes("UTF-8")); + } + if(encryptedSecretKey == null){ + pstmt.setNull(3, Types.VARCHAR); + } else { + pstmt.setBytes(3, encryptedSecretKey.getBytes("UTF-8")); + } + pstmt.setLong(4, id); + pstmt.executeUpdate(); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Unable encrypt user credentials"); + } catch (UnsupportedEncodingException e) { + throw new CloudRuntimeException("Unable encrypt configuration values"); + } finally { + try { + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } + } +} diff --git a/setup/db/db/schema-2212to30.sql b/setup/db/db/schema-2213to30.sql similarity index 98% rename from setup/db/db/schema-2212to30.sql rename to setup/db/db/schema-2213to30.sql index dae28eeec6d..37c6e36b59d 100644 --- a/setup/db/db/schema-2212to30.sql +++ b/setup/db/db/schema-2213to30.sql @@ -1,5 +1,5 @@ --; --- Schema upgrade from 2.2.12 to 3.0; +-- Schema upgrade from 2.2.x to 3.0; --; ALTER TABLE `cloud`.`template_host_ref` DROP COLUMN `pool_id`; diff --git a/utils/src/com/cloud/utils/component/ComponentLocator.java b/utils/src/com/cloud/utils/component/ComponentLocator.java index 489b2619bd3..4a2598121b6 100755 --- a/utils/src/com/cloud/utils/component/ComponentLocator.java +++ b/utils/src/com/cloud/utils/component/ComponentLocator.java @@ -95,7 +95,7 @@ public class ComponentLocator implements ComponentLocatorMBean { protected HashMap> _adapterMap; protected HashMap> _managerMap; - protected HashMap> _checkerMap; + protected LinkedHashMap> _checkerMap; protected LinkedHashMap>> _daoMap; protected String _serverName; protected Object _component; @@ -131,7 +131,7 @@ public class ComponentLocator implements ComponentLocatorMBean { SAXParser saxParser = spfactory.newSAXParser(); _daoMap = new LinkedHashMap>>(); _managerMap = new LinkedHashMap>(); - _checkerMap = new HashMap>(); + _checkerMap = new LinkedHashMap>(); _adapterMap = new HashMap>(); _factories = new HashMap, Class>(); File file = PropertiesUtil.findConfigFile(filename); @@ -866,7 +866,7 @@ public class ComponentLocator implements ComponentLocatorMBean { protected class XmlHandler extends DefaultHandler { public HashMap>> adapters; public HashMap> managers; - public HashMap> checkers; + public LinkedHashMap> checkers; public LinkedHashMap>> daos; public String parent; public String library; @@ -884,7 +884,7 @@ public class ComponentLocator implements ComponentLocatorMBean { parse = false; adapters = new HashMap>>(); managers = new HashMap>(); - checkers = new HashMap>(); + checkers = new LinkedHashMap>(); daos = new LinkedHashMap>>(); value = null; parent = null; diff --git a/utils/src/com/cloud/utils/crypt/DBEncryptionUtil.java b/utils/src/com/cloud/utils/crypt/DBEncryptionUtil.java new file mode 100755 index 00000000000..7d07bd3fac2 --- /dev/null +++ b/utils/src/com/cloud/utils/crypt/DBEncryptionUtil.java @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.utils.crypt; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; + +import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.jasypt.properties.EncryptableProperties; + +import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.exception.CloudRuntimeException; + +public class DBEncryptionUtil { + + private static StandardPBEStringEncryptor s_encryptor = null; + + public static String encrypt(String plain){ + if(!EncryptionSecretKeyChecker.useEncryption()){ + return plain; + } + //synchornize ?? + if(s_encryptor == null){ + initialize(); + } + return s_encryptor.encrypt(plain); + } + + public static String decrypt(String encrypted){ + if(!EncryptionSecretKeyChecker.useEncryption()){ + return encrypted; + } + if(s_encryptor == null){ + initialize(); + } + return s_encryptor.decrypt(encrypted); + } + + private static void initialize(){ + final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); + final Properties dbProps; + + if(EncryptionSecretKeyChecker.useEncryption()){ + StandardPBEStringEncryptor encryptor = EncryptionSecretKeyChecker.getEncryptor(); + dbProps = new EncryptableProperties(encryptor); + try { + dbProps.load(new FileInputStream(dbPropsFile)); + } catch (FileNotFoundException e) { + throw new CloudRuntimeException("db.properties file not found while reading DB secret key", e); + } catch (IOException e) { + throw new CloudRuntimeException("Erroe while reading DB secret key from db.properties", e); + } + + String dbSecretKey = dbProps.getProperty("db.cloud.encrypt.secret"); + if(dbSecretKey == null || dbSecretKey.isEmpty()){ + throw new CloudRuntimeException("Empty DB secret key in db.properties"); + } + + s_encryptor = new StandardPBEStringEncryptor(); + s_encryptor.setAlgorithm("PBEWithMD5AndDES"); + s_encryptor.setPassword(dbSecretKey); + } else { + throw new CloudRuntimeException("Trying to encrypt db values when encrytion is not enabled"); + } + } +} diff --git a/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java new file mode 100755 index 00000000000..230b8be6dbc --- /dev/null +++ b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.utils.crypt; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.Properties; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; +import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; + +import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.component.SystemIntegrityChecker; +import com.cloud.utils.exception.CloudRuntimeException; + +@Local(value = {SystemIntegrityChecker.class}) +public class EncryptionSecretKeyChecker implements SystemIntegrityChecker { + + private static final Logger s_logger = Logger.getLogger(EncryptionSecretKeyChecker.class); + + private static final String s_keyFile = "/etc/cloud/management/key"; + private static final String s_envKey = "CLOUD_SECRET_KEY"; + private static StandardPBEStringEncryptor s_encryptor = new StandardPBEStringEncryptor(); + private static boolean s_useEncryption = false; + + @Override + public void check() { + //Get encryption type from db.properties + final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); + final Properties dbProps = new Properties(); + try { + dbProps.load(new FileInputStream(dbPropsFile)); + + final String encryptionType = dbProps.getProperty("db.cloud.encryption.type"); + + s_logger.debug("Encryption Type: "+ encryptionType); + + if(encryptionType == null || encryptionType.equals("none")){ + return; + } + + s_encryptor.setAlgorithm("PBEWithMD5AndDES"); + String secretKey = null; + + SimpleStringPBEConfig stringConfig = new SimpleStringPBEConfig(); + + if(encryptionType.equals("file")){ + try { + BufferedReader in = new BufferedReader(new FileReader(s_keyFile)); + secretKey = in.readLine(); + //Check for null or empty secret key + } catch (FileNotFoundException e) { + throw new CloudRuntimeException("File containing secret key not found: "+s_keyFile, e); + } catch (IOException e) { + throw new CloudRuntimeException("Error while reading secret key from: "+s_keyFile, e); + } + + if(secretKey == null || secretKey.isEmpty()){ + throw new CloudRuntimeException("Secret key is null or empty in file "+s_keyFile); + } + + } else if(encryptionType.equals("env")){ + secretKey = System.getenv(s_envKey); + if(secretKey == null || secretKey.isEmpty()){ + throw new CloudRuntimeException("Environment variable "+s_envKey+" is not set or empty"); + } + } else if(encryptionType.equals("web")){ + ServerSocket serverSocket = null; + int port = 8097; + try { + serverSocket = new ServerSocket(port); + } catch (IOException ioex) { + throw new CloudRuntimeException("Error initializing secret key reciever", ioex); + } + s_logger.info("Waiting for admin to send secret key on port "+port); + Socket clientSocket = null; + try { + clientSocket = serverSocket.accept(); + } catch (IOException e) { + throw new CloudRuntimeException("Accept failed on "+port); + } + PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + String inputLine, outputLine; + if ((inputLine = in.readLine()) != null) { + s_logger.info("Input : "+inputLine); + secretKey = inputLine; + } + out.close(); + in.close(); + clientSocket.close(); + serverSocket.close(); + } else { + throw new CloudRuntimeException("Invalid encryption type: "+encryptionType); + } + + stringConfig.setPassword(secretKey); + s_encryptor.setConfig(stringConfig); + s_useEncryption = true; + } catch (FileNotFoundException e) { + throw new CloudRuntimeException("File db.properties not found", e); + } catch (IOException e) { + throw new CloudRuntimeException("Error while reading db.properties", e); + } + } + + public static StandardPBEStringEncryptor getEncryptor() { + return s_encryptor; + } + + public static boolean useEncryption(){ + return s_useEncryption; + } +} diff --git a/utils/src/com/cloud/utils/crypt/EncryptionSecretKeySender.java b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeySender.java new file mode 100755 index 00000000000..4e2b336378e --- /dev/null +++ b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeySender.java @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.utils.crypt; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.InetAddress; +import java.net.Socket; + +import com.cloud.utils.NumbersUtil; + + +public class EncryptionSecretKeySender { + public static void main(String args[]){ + try { + + // Create a socket to the host + String hostname = "localhost"; + int port = 8097; + + if(args.length == 2){ + hostname = args[0]; + port = NumbersUtil.parseInt(args[1], port); + } + + + InetAddress addr = InetAddress.getByName(hostname); + Socket socket = new Socket(addr, port); + PrintWriter out = new PrintWriter(socket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader( + socket.getInputStream())); + java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); + String validationWord = "cloudnine"; + String validationInput = ""; + while(!validationWord.equals(validationInput)){ + System.out.print("Enter Validation Word:"); + validationInput = stdin.readLine(); + System.out.println(); + } + System.out.print("Enter Secret Key:"); + String input = stdin.readLine(); + if (input != null) { + out.println(input); + } + } catch (Exception e) { + System.out.print("Exception while sending secret key "+e); + } + } +} \ No newline at end of file diff --git a/utils/src/com/cloud/utils/db/Attribute.java b/utils/src/com/cloud/utils/db/Attribute.java index 38ad512b585..4391cd7fd6c 100755 --- a/utils/src/com/cloud/utils/db/Attribute.java +++ b/utils/src/com/cloud/utils/db/Attribute.java @@ -54,7 +54,8 @@ public class Attribute { DC(0x40000), CharDT(0x100000), StringDT(0x200000), - IntegerDT(0x400000); + IntegerDT(0x400000), + Encrypted(0x800000); int place; Flag(int place) { @@ -144,6 +145,9 @@ public class Attribute { if (column == null || column.nullable()) { flags = Flag.Nullable.setTrue(flags); } + if (column != null && column.encryptable()) { + flags = Flag.Encrypted.setTrue(flags); + } } ElementCollection ec = field.getAnnotation(ElementCollection.class); if (ec != null) { @@ -201,6 +205,10 @@ public class Attribute { flags = flag.setFalse(flags); } + public final boolean isEncrypted() { + return Flag.Encrypted.check(flags); + } + public Field getField() { return field; } diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 9240b4083ad..49a7e8142ba 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -68,6 +68,7 @@ import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; +import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.db.SearchCriteria.SelectType; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; @@ -498,7 +499,11 @@ public abstract class GenericDaoBase implements Gene byte[] bytes = rs.getBytes(index); if(bytes != null) { try { - field.set(entity, new String(bytes, "UTF-8")); + if(field.getAnnotation(Column.class).encryptable()){ + field.set(entity, DBEncryptionUtil.decrypt(new String(bytes, "UTF-8"))); + } else { + field.set(entity, new String(bytes, "UTF-8")); + } } catch (IllegalArgumentException e) { assert(false); throw new CloudRuntimeException("IllegalArgumentException when converting UTF-8 data"); @@ -1363,7 +1368,6 @@ public abstract class GenericDaoBase implements Gene return; } } - if (attr.field.getType() == String.class) { final String str = (String)value; if (str == null) { @@ -1376,7 +1380,11 @@ public abstract class GenericDaoBase implements Gene // to support generic localization, utilize MySql UTF-8 support if (length < str.length()) { try { - pstmt.setBytes(j, str.substring(0, column.length()).getBytes("UTF-8")); + if (attr.is(Attribute.Flag.Encrypted)){ + pstmt.setBytes(j, DBEncryptionUtil.encrypt(str.substring(0, column.length())).getBytes("UTF-8")); + } else { + pstmt.setBytes(j, str.substring(0, column.length()).getBytes("UTF-8")); + } } catch (UnsupportedEncodingException e) { // no-way it can't support UTF-8 encoding assert(false); @@ -1384,7 +1392,11 @@ public abstract class GenericDaoBase implements Gene } } else { try { - pstmt.setBytes(j, str.getBytes("UTF-8")); + if (attr.is(Attribute.Flag.Encrypted)){ + pstmt.setBytes(j, DBEncryptionUtil.encrypt(str).getBytes("UTF-8")); + } else { + pstmt.setBytes(j, str.getBytes("UTF-8")); + } } catch (UnsupportedEncodingException e) { // no-way it can't support UTF-8 encoding assert(false); diff --git a/utils/src/com/cloud/utils/db/Transaction.java b/utils/src/com/cloud/utils/db/Transaction.java index a7b4aa45b24..7cffe0db54a 100755 --- a/utils/src/com/cloud/utils/db/Transaction.java +++ b/utils/src/com/cloud/utils/db/Transaction.java @@ -41,9 +41,12 @@ import org.apache.commons.pool.KeyedObjectPoolFactory; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.commons.pool.impl.StackKeyedObjectPoolFactory; import org.apache.log4j.Logger; +import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.jasypt.properties.EncryptableProperties; import com.cloud.utils.Pair; import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.crypt.EncryptionSecretKeyChecker; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.mgmt.JmxUtil; @@ -954,9 +957,16 @@ public class Transaction { static { try { final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); - final Properties dbProps = new Properties(); + final Properties dbProps; + + if(EncryptionSecretKeyChecker.useEncryption()){ + StandardPBEStringEncryptor encryptor = EncryptionSecretKeyChecker.getEncryptor(); + dbProps = new EncryptableProperties(encryptor); + } else { + dbProps = new Properties(); + } dbProps.load(new FileInputStream(dbPropsFile)); - + // FIXME: If params are missing...default them???? final int cloudMaxActive = Integer.parseInt(dbProps.getProperty("db.cloud.maxActive")); final int cloudMaxIdle = Integer.parseInt(dbProps.getProperty("db.cloud.maxIdle")); diff --git a/utils/src/javax/persistence/Column.java b/utils/src/javax/persistence/Column.java index d3d8774b0a2..13606f2510a 100644 --- a/utils/src/javax/persistence/Column.java +++ b/utils/src/javax/persistence/Column.java @@ -137,4 +137,8 @@ public @interface Column { * (Applies only if a decimal column is used.) */ int scale() default 0; + /** + * (Optional) Whether encryption should be used for this column + */ + boolean encryptable() default false; }