Repository: accumulo Updated Branches: refs/heads/1.6.1-SNAPSHOT 10500f6da -> 011349e2d refs/heads/master 63b3bdd8c -> ef0b27c1e
ACCUMULO-3059 Allow configuration of truststore password and root keystore password Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/384aa396 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/384aa396 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/384aa396 Branch: refs/heads/1.6.1-SNAPSHOT Commit: 384aa396736b7ddeadf38d71d3f42afda7c4d0da Parents: 10500f6 Author: Josh Elser <els...@apache.org> Authored: Mon Aug 11 23:30:39 2014 -0400 Committer: Josh Elser <els...@apache.org> Committed: Mon Aug 11 23:30:39 2014 -0400 ---------------------------------------------------------------------- .../MiniAccumuloClusterStartStopTest.java | 1 - .../accumulo/test/functional/AbstractMacIT.java | 2 +- .../apache/accumulo/test/util/CertUtils.java | 36 +++++++++++++------- .../accumulo/test/util/CertUtilsTest.java | 6 ++-- 4 files changed, 28 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/384aa396/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterStartStopTest.java ---------------------------------------------------------------------- diff --git a/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterStartStopTest.java b/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterStartStopTest.java index 9e38d09..b44868f 100644 --- a/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterStartStopTest.java +++ b/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterStartStopTest.java @@ -22,7 +22,6 @@ import org.apache.accumulo.core.client.Connector; import org.apache.accumulo.core.client.ZooKeeperInstance; import org.apache.accumulo.core.client.security.tokens.PasswordToken; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.rules.TemporaryFolder; http://git-wip-us.apache.org/repos/asf/accumulo/blob/384aa396/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java ---------------------------------------------------------------------- diff --git a/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java b/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java index 0c29dfd..4734558 100644 --- a/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java +++ b/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java @@ -101,7 +101,7 @@ public abstract class AbstractMacIT { File publicTruststoreFile = new File(sslDir, "public-" + cfg.getInstanceName() + ".jks"); try { new CertUtils(Property.RPC_SSL_KEYSTORE_TYPE.getDefaultValue(), "o=Apache Accumulo,cn=MiniAccumuloCluster", "RSA", 2048, "sha1WithRSAEncryption") - .createAll(rootKeystoreFile, localKeystoreFile, publicTruststoreFile, cfg.getInstanceName(), cfg.getRootPassword()); + .createAll(rootKeystoreFile, localKeystoreFile, publicTruststoreFile, cfg.getInstanceName(), "root_keystore_password", cfg.getRootPassword(), ""); } catch (Exception e) { throw new RuntimeException("error creating MAC keystore", e); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/384aa396/test/src/test/java/org/apache/accumulo/test/util/CertUtils.java ---------------------------------------------------------------------- diff --git a/test/src/test/java/org/apache/accumulo/test/util/CertUtils.java b/test/src/test/java/org/apache/accumulo/test/util/CertUtils.java index b7614b8..552a332 100644 --- a/test/src/test/java/org/apache/accumulo/test/util/CertUtils.java +++ b/test/src/test/java/org/apache/accumulo/test/util/CertUtils.java @@ -92,11 +92,17 @@ public class CertUtils { @Parameter(names = {"--keystore-type"}, description = "Type of keystore file to use") String keystoreType = "JKS"; + @Parameter(names = {"--root-keystore-password"}, description = "Password for root keystore, falls back to --keystore-password if not provided") + String rootKeystorePassword = null; + @Parameter( names = {"--keystore-password"}, description = "Password used to encrypt keystores. If omitted, the instance-wide secret will be used. If specified, the password must also be explicitly configured in Accumulo.") String keystorePassword = null; + @Parameter(names = {"--truststore-password"}, description = "Password used to encrypt the truststore. If omitted, empty password is used") + String truststorePassword = ""; + @Parameter(names = {"--key-name-prefix"}, description = "Prefix for names of generated keys") String keyNamePrefix = CertUtils.class.getSimpleName(); @@ -162,14 +168,20 @@ public class CertUtils { String keyPassword = opts.keystorePassword; if (keyPassword == null) keyPassword = getDefaultKeyPassword(); + + String rootKeyPassword = opts.rootKeystorePassword; + if (rootKeyPassword == null) { + rootKeyPassword = keyPassword; + } + CertUtils certUtils = new CertUtils(opts.keystoreType, opts.issuerDirString, opts.encryptionAlg, opts.keysize, opts.signingAlg); if ("generate-all".equals(operation)) { - certUtils.createAll(new File(opts.rootKeystore), new File(opts.localKeystore), new File(opts.truststore), opts.keyNamePrefix, keyPassword); + certUtils.createAll(new File(opts.rootKeystore), new File(opts.localKeystore), new File(opts.truststore), opts.keyNamePrefix, rootKeyPassword, keyPassword, opts.truststorePassword); } else if ("generate-local".equals(operation)) { - certUtils.createSignedCert(new File(opts.localKeystore), opts.keyNamePrefix + "-local", "", opts.rootKeystore, ""); + certUtils.createSignedCert(new File(opts.localKeystore), opts.keyNamePrefix + "-local", keyPassword, opts.rootKeystore, rootKeyPassword); } else if ("generate-self-trusted".equals(operation)) { - certUtils.createSelfSignedCert(new File(opts.truststore), opts.keyNamePrefix + "-selfTrusted", ""); + certUtils.createSelfSignedCert(new File(opts.truststore), opts.keyNamePrefix + "-selfTrusted", keyPassword); } else { JCommander jcommander = new JCommander(opts); jcommander.setProgramName(CertUtils.class.getName()); @@ -198,16 +210,16 @@ public class CertUtils { this.signingAlgorithm = signingAlgorithm; } - public void createAll(File rootKeystoreFile, File localKeystoreFile, File trustStoreFile, String keyNamePrefix, String systemPassword) - throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, OperatorCreationException, AccumuloSecurityException, - NoSuchProviderException, UnrecoverableKeyException, FileNotFoundException { - createSelfSignedCert(rootKeystoreFile, keyNamePrefix + "-root", systemPassword); - createSignedCert(localKeystoreFile, keyNamePrefix + "-local", systemPassword, rootKeystoreFile.getAbsolutePath(), systemPassword); - createPublicCert(trustStoreFile, keyNamePrefix + "-public", rootKeystoreFile.getAbsolutePath(), systemPassword); + public void createAll(File rootKeystoreFile, File localKeystoreFile, File trustStoreFile, String keyNamePrefix, String rootKeystorePassword, + String keystorePassword, String truststorePassword) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, + OperatorCreationException, AccumuloSecurityException, NoSuchProviderException, UnrecoverableKeyException, FileNotFoundException { + createSelfSignedCert(rootKeystoreFile, keyNamePrefix + "-root", rootKeystorePassword); + createSignedCert(localKeystoreFile, keyNamePrefix + "-local", keystorePassword, rootKeystoreFile.getAbsolutePath(), rootKeystorePassword); + createPublicCert(trustStoreFile, keyNamePrefix + "-public", rootKeystoreFile.getAbsolutePath(), rootKeystorePassword, truststorePassword); } - public void createPublicCert(File targetKeystoreFile, String keyName, String rootKeystorePath, String rootKeystorePassword) throws NoSuchAlgorithmException, - CertificateException, FileNotFoundException, IOException, KeyStoreException, UnrecoverableKeyException { + public void createPublicCert(File targetKeystoreFile, String keyName, String rootKeystorePath, String rootKeystorePassword, String truststorePassword) + throws NoSuchAlgorithmException, CertificateException, FileNotFoundException, IOException, KeyStoreException, UnrecoverableKeyException { KeyStore signerKeystore = KeyStore.getInstance(keystoreType); char[] signerPasswordArray = rootKeystorePassword.toCharArray(); signerKeystore.load(new FileInputStream(rootKeystorePath), signerPasswordArray); @@ -216,7 +228,7 @@ public class CertUtils { KeyStore keystore = KeyStore.getInstance(keystoreType); keystore.load(null, null); keystore.setCertificateEntry(keyName + "Cert", rootCert); - keystore.store(new FileOutputStream(targetKeystoreFile), new char[0]); + keystore.store(new FileOutputStream(targetKeystoreFile), truststorePassword.toCharArray()); } public void createSignedCert(File targetKeystoreFile, String keyName, String keystorePassword, String signerKeystorePath, String signerKeystorePassword) http://git-wip-us.apache.org/repos/asf/accumulo/blob/384aa396/test/src/test/java/org/apache/accumulo/test/util/CertUtilsTest.java ---------------------------------------------------------------------- diff --git a/test/src/test/java/org/apache/accumulo/test/util/CertUtilsTest.java b/test/src/test/java/org/apache/accumulo/test/util/CertUtilsTest.java index eea9ac2..1e4e68a 100644 --- a/test/src/test/java/org/apache/accumulo/test/util/CertUtilsTest.java +++ b/test/src/test/java/org/apache/accumulo/test/util/CertUtilsTest.java @@ -62,7 +62,7 @@ public class CertUtilsTest { File rootKeyStoreFile = new File(folder.getRoot(), "root.jks"); certUtils.createSelfSignedCert(rootKeyStoreFile, "test", PASSWORD); File publicKeyStoreFile = new File(folder.getRoot(), "public.jks"); - certUtils.createPublicCert(publicKeyStoreFile, "test", rootKeyStoreFile.getAbsolutePath(), PASSWORD); + certUtils.createPublicCert(publicKeyStoreFile, "test", rootKeyStoreFile.getAbsolutePath(), PASSWORD, ""); KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE); keyStore.load(new FileInputStream(publicKeyStoreFile), new char[0]); @@ -110,11 +110,11 @@ public class CertUtilsTest { File rootKeyStoreFile = new File(folder.getRoot(), "root.jks"); certUtils.createSelfSignedCert(rootKeyStoreFile, "test", PASSWORD); File publicRootKeyStoreFile = new File(folder.getRoot(), "publicroot.jks"); - certUtils.createPublicCert(publicRootKeyStoreFile, "test", rootKeyStoreFile.getAbsolutePath(), PASSWORD); + certUtils.createPublicCert(publicRootKeyStoreFile, "test", rootKeyStoreFile.getAbsolutePath(), PASSWORD, ""); File signedKeyStoreFile = new File(folder.getRoot(), "signed.jks"); certUtils.createSignedCert(signedKeyStoreFile, "test", PASSWORD, rootKeyStoreFile.getAbsolutePath(), PASSWORD); File publicSignedKeyStoreFile = new File(folder.getRoot(), "publicsigned.jks"); - certUtils.createPublicCert(publicSignedKeyStoreFile, "test", signedKeyStoreFile.getAbsolutePath(), PASSWORD); + certUtils.createPublicCert(publicSignedKeyStoreFile, "test", signedKeyStoreFile.getAbsolutePath(), PASSWORD, ""); KeyStore rootKeyStore = KeyStore.getInstance(KEYSTORE_TYPE); rootKeyStore.load(new FileInputStream(publicRootKeyStoreFile), new char[0]);