提交 a5ed7dbb 编写于 作者: V vinnie

8006994: Cleanup PKCS12 tests to ensure streams get closed

Reviewed-by: mullan
上级 ea1bd613
...@@ -58,45 +58,46 @@ public class PBETest { ...@@ -58,45 +58,46 @@ public class PBETest {
new File(NEW_KEYSTORE).delete(); new File(NEW_KEYSTORE).delete();
try { KeyStore keystore = load(KEYSTORE_TYPE, KEYSTORE, PASSWORD);
KeyStore keystore = load(KEYSTORE_TYPE, KEYSTORE, PASSWORD); KeyStore.Entry entry =
KeyStore.Entry entry = keystore.getEntry(ALIAS,
keystore.getEntry(ALIAS, new KeyStore.PasswordProtection(PASSWORD));
new KeyStore.PasswordProtection(PASSWORD)); System.out.println("Retrieved entry named '" + ALIAS + "'");
System.out.println("Retrieved entry named '" + ALIAS + "'");
// Set entry // Set entry
KeyStore keystore2 = load(NEW_KEYSTORE_TYPE, null, null); KeyStore keystore2 = load(NEW_KEYSTORE_TYPE, null, null);
keystore2.setEntry(ALIAS, entry, keystore2.setEntry(ALIAS, entry,
new KeyStore.PasswordProtection(PASSWORD, PBE_ALGO, new KeyStore.PasswordProtection(PASSWORD, PBE_ALGO,
new PBEParameterSpec(SALT, ITERATION_COUNT, new PBEParameterSpec(SALT, ITERATION_COUNT,
new IvParameterSpec(IV)))); new IvParameterSpec(IV))));
System.out.println("Encrypted entry using: " + PBE_ALGO); System.out.println("Encrypted entry using: " + PBE_ALGO);
try (FileOutputStream outStream = new FileOutputStream(NEW_KEYSTORE)) {
System.out.println("Storing keystore to: " + NEW_KEYSTORE); System.out.println("Storing keystore to: " + NEW_KEYSTORE);
keystore2.store(new FileOutputStream(NEW_KEYSTORE), PASSWORD); keystore2.store(outStream, PASSWORD);
keystore2 = load(NEW_KEYSTORE_TYPE, NEW_KEYSTORE, PASSWORD);
entry = keystore2.getEntry(ALIAS,
new KeyStore.PasswordProtection(PASSWORD));
System.out.println("Retrieved entry named '" + ALIAS + "'");
} finally {
new File(NEW_KEYSTORE).delete();
System.out.println("Deleted keystore: " + NEW_KEYSTORE);
} }
keystore2 = load(NEW_KEYSTORE_TYPE, NEW_KEYSTORE, PASSWORD);
entry = keystore2.getEntry(ALIAS,
new KeyStore.PasswordProtection(PASSWORD));
System.out.println("Retrieved entry named '" + ALIAS + "'");
} }
private static KeyStore load(String type, String path, char[] password) private static KeyStore load(String type, String path, char[] password)
throws Exception { throws Exception {
KeyStore keystore = KeyStore.getInstance(type);
FileInputStream stream = null;
if (path != null) { if (path != null) {
stream = new FileInputStream(path);
try (FileInputStream inStream = new FileInputStream(path)) {
System.out.println("Loading keystore from: " + path);
keystore.load(inStream, password);
System.out.println("Loaded keystore with " + keystore.size() +
" entries");
}
} else {
keystore.load(null, null);
} }
KeyStore keystore = KeyStore.getInstance(type);
System.out.println("Loading keystore from: " + path);
keystore.load(stream, password);
return keystore; return keystore;
} }
......
...@@ -47,40 +47,40 @@ public class StorePasswordTest { ...@@ -47,40 +47,40 @@ public class StorePasswordTest {
new File(KEYSTORE).delete(); new File(KEYSTORE).delete();
try { KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(null, null);
KeyStore keystore = KeyStore.getInstance("PKCS12"); // Set entry
keystore.load(null, null); keystore.setEntry(ALIAS,
new KeyStore.SecretKeyEntry(convertPassword(USER_PASSWORD)),
// Set entry new KeyStore.PasswordProtection(PASSWORD));
keystore.setEntry(ALIAS,
new KeyStore.SecretKeyEntry(convertPassword(USER_PASSWORD)),
new KeyStore.PasswordProtection(PASSWORD));
try (FileOutputStream outStream = new FileOutputStream(KEYSTORE)) {
System.out.println("Storing keystore to: " + KEYSTORE); System.out.println("Storing keystore to: " + KEYSTORE);
keystore.store(new FileOutputStream(KEYSTORE), PASSWORD); keystore.store(outStream, PASSWORD);
}
try (FileInputStream inStream = new FileInputStream(KEYSTORE)) {
System.out.println("Loading keystore from: " + KEYSTORE); System.out.println("Loading keystore from: " + KEYSTORE);
keystore.load(new FileInputStream(KEYSTORE), PASSWORD); keystore.load(inStream, PASSWORD);
System.out.println("Loaded keystore with " + keystore.size() + System.out.println("Loaded keystore with " + keystore.size() +
" entries"); " entries");
KeyStore.Entry entry = keystore.getEntry(ALIAS, }
new KeyStore.PasswordProtection(PASSWORD));
System.out.println("Retrieved entry: " + entry); KeyStore.Entry entry = keystore.getEntry(ALIAS,
new KeyStore.PasswordProtection(PASSWORD));
System.out.println("Retrieved entry: " + entry);
SecretKey key = (SecretKey) keystore.getKey(ALIAS, PASSWORD); SecretKey key = (SecretKey) keystore.getKey(ALIAS, PASSWORD);
SecretKeyFactory factory = SecretKeyFactory factory =
SecretKeyFactory.getInstance(key.getAlgorithm()); SecretKeyFactory.getInstance(key.getAlgorithm());
PBEKeySpec keySpec = PBEKeySpec keySpec =
(PBEKeySpec) factory.getKeySpec(key, PBEKeySpec.class); (PBEKeySpec) factory.getKeySpec(key, PBEKeySpec.class);
char[] pwd = keySpec.getPassword(); char[] pwd = keySpec.getPassword();
System.out.println("Recovered credential: " + new String(pwd)); System.out.println("Recovered credential: " + new String(pwd));
if (!Arrays.equals(USER_PASSWORD.toCharArray(), pwd)) { if (!Arrays.equals(USER_PASSWORD.toCharArray(), pwd)) {
throw new Exception("Failed to recover the stored password"); throw new Exception("Failed to recover the stored password");
}
} finally {
new File(KEYSTORE).delete();
} }
} }
......
...@@ -53,35 +53,34 @@ public class StoreSecretKeyTest { ...@@ -53,35 +53,34 @@ public class StoreSecretKeyTest {
new File(KEYSTORE).delete(); new File(KEYSTORE).delete();
try { KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(null, null);
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(null, null);
// Set entry // Set entry
keystore.setEntry(ALIAS, keystore.setEntry(ALIAS,
new KeyStore.SecretKeyEntry(generateSecretKey("AES", 128)), new KeyStore.SecretKeyEntry(generateSecretKey("AES", 128)),
new KeyStore.PasswordProtection(PASSWORD)); new KeyStore.PasswordProtection(PASSWORD));
try (FileOutputStream outStream = new FileOutputStream(KEYSTORE)) {
System.out.println("Storing keystore to: " + KEYSTORE); System.out.println("Storing keystore to: " + KEYSTORE);
keystore.store(new FileOutputStream(KEYSTORE), PASSWORD); keystore.store(outStream, PASSWORD);
}
try (FileInputStream inStream = new FileInputStream(KEYSTORE)) {
System.out.println("Loading keystore from: " + KEYSTORE); System.out.println("Loading keystore from: " + KEYSTORE);
keystore.load(new FileInputStream(KEYSTORE), PASSWORD); keystore.load(inStream, PASSWORD);
System.out.println("Loaded keystore with " + keystore.size() + System.out.println("Loaded keystore with " + keystore.size() +
" entries"); " entries");
KeyStore.Entry entry = keystore.getEntry(ALIAS, }
new KeyStore.PasswordProtection(PASSWORD));
System.out.println("Retrieved entry: " + entry); KeyStore.Entry entry = keystore.getEntry(ALIAS,
new KeyStore.PasswordProtection(PASSWORD));
if (entry instanceof KeyStore.SecretKeyEntry) { System.out.println("Retrieved entry: " + entry);
System.out.println("Retrieved secret key entry: " +
entry); if (entry instanceof KeyStore.SecretKeyEntry) {
} else { System.out.println("Retrieved secret key entry: " + entry);
throw new Exception("Not a secret key entry"); } else {
} throw new Exception("Not a secret key entry");
} finally {
new File(KEYSTORE).delete();
} }
} }
......
...@@ -49,59 +49,57 @@ public class StoreTrustedCertTest { ...@@ -49,59 +49,57 @@ public class StoreTrustedCertTest {
new File(KEYSTORE).delete(); new File(KEYSTORE).delete();
try { KeyStore keystore = KeyStore.getInstance("PKCS12");
KeyStore keystore = KeyStore.getInstance("PKCS12"); keystore.load(null, null);
keystore.load(null, null);
Certificate cert = loadCertificate(CERT); Certificate cert = loadCertificate(CERT);
Set<KeyStore.Entry.Attribute> attributes = new HashSet<>(); Set<KeyStore.Entry.Attribute> attributes = new HashSet<>();
attributes.add(new PKCS12Attribute("1.3.5.7.9", "that's odd")); attributes.add(new PKCS12Attribute("1.3.5.7.9", "that's odd"));
attributes.add(new PKCS12Attribute("2.4.6.8.10", "that's even")); attributes.add(new PKCS12Attribute("2.4.6.8.10", "that's even"));
// Set trusted certificate entry // Set trusted certificate entry
keystore.setEntry(ALIAS, keystore.setEntry(ALIAS,
new KeyStore.TrustedCertificateEntry(cert), null); new KeyStore.TrustedCertificateEntry(cert), null);
// Set trusted certificate entry with attributes // Set trusted certificate entry with attributes
keystore.setEntry(ALIAS2, keystore.setEntry(ALIAS2,
new KeyStore.TrustedCertificateEntry(cert, attributes), null); new KeyStore.TrustedCertificateEntry(cert, attributes), null);
try (FileOutputStream outStream = new FileOutputStream(KEYSTORE)) {
System.out.println("Storing keystore to: " + KEYSTORE); System.out.println("Storing keystore to: " + KEYSTORE);
keystore.store(new FileOutputStream(KEYSTORE), PASSWORD); keystore.store(outStream, PASSWORD);
}
try (FileInputStream inStream = new FileInputStream(KEYSTORE)) {
System.out.println("Loading keystore from: " + KEYSTORE); System.out.println("Loading keystore from: " + KEYSTORE);
keystore.load(new FileInputStream(KEYSTORE), PASSWORD); keystore.load(inStream, PASSWORD);
System.out.println("Loaded keystore with " + keystore.size() + System.out.println("Loaded keystore with " + keystore.size() +
" entries"); " entries");
}
KeyStore.Entry entry = keystore.getEntry(ALIAS, null); KeyStore.Entry entry = keystore.getEntry(ALIAS, null);
if (entry instanceof KeyStore.TrustedCertificateEntry) { if (entry instanceof KeyStore.TrustedCertificateEntry) {
System.out.println("Retrieved trusted certificate entry: " + System.out.println("Retrieved trusted certificate entry: " + entry);
entry); } else {
} else { throw new Exception("Not a trusted certificate entry");
throw new Exception("Not a trusted certificate entry"); }
} System.out.println();
System.out.println();
entry = keystore.getEntry(ALIAS2, null);
entry = keystore.getEntry(ALIAS2, null); if (entry instanceof KeyStore.TrustedCertificateEntry) {
if (entry instanceof KeyStore.TrustedCertificateEntry) { KeyStore.TrustedCertificateEntry trustedEntry =
KeyStore.TrustedCertificateEntry trustedEntry = (KeyStore.TrustedCertificateEntry) entry;
(KeyStore.TrustedCertificateEntry) entry; Set<KeyStore.Entry.Attribute> entryAttributes =
Set<KeyStore.Entry.Attribute> entryAttributes = trustedEntry.getAttributes();
trustedEntry.getAttributes();
if (entryAttributes.containsAll(attributes)) {
if (entryAttributes.containsAll(attributes)) { System.out.println("Retrieved trusted certificate entry " +
System.out.println("Retrieved trusted certificate entry " + "with attributes: " + entry);
"with attributes: " + entry);
} else {
throw new Exception("Failed to retrieve entry attributes");
}
} else { } else {
throw new Exception("Not a trusted certificate entry"); throw new Exception("Failed to retrieve entry attributes");
} }
} else {
} finally { throw new Exception("Not a trusted certificate entry");
new File(KEYSTORE).delete();
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册