diff --git a/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java b/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java index 2559bb2b494..5a819d26661 100644 --- a/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java +++ b/src/java.base/share/classes/com/sun/crypto/provider/JceKeyStore.java @@ -291,7 +291,7 @@ public void engineSetKeyEntry(String alias, Key key, char[] password, } } catch (Exception e) { - throw new KeyStoreException(e.getMessage()); + throw new KeyStoreException(e.getMessage(), e); } } } diff --git a/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java b/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java index 9e99b3b4501..20b7b640d9e 100644 --- a/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java +++ b/src/java.base/share/classes/sun/security/provider/JavaKeyStore.java @@ -263,6 +263,9 @@ public void engineSetKeyEntry(String alias, Key key, char[] password, if (!(key instanceof java.security.PrivateKey)) { throw new KeyStoreException("Cannot store non-PrivateKeys"); } + if (password == null) { + throw new KeyStoreException("password can't be null"); + } try { synchronized(entries) { KeyEntry entry = new KeyEntry(); diff --git a/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java b/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java index b96c26499c3..08e1c42af1b 100644 --- a/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java +++ b/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2021, 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 @@ -40,7 +40,7 @@ /* * @test - * @bug 8048621 8133090 8167371 + * @bug 8048621 8133090 8167371 8236671 * @summary Test basic operations with keystores (jks, jceks, pkcs12) * @author Yu-Ching Valerie PENG */ @@ -181,6 +181,17 @@ public void runTest(String provider) throws Exception { // create an empty key store ks.load(null, null); + // unit test - test with null password + try { + ks.setKeyEntry(ALIAS_HEAD, privateKey, null, + new Certificate[] { cert }); + } catch (KeyStoreException e) { + if (!e.getMessage().contains("password can\'t be null")) { + throw new RuntimeException("Unexpected message:" + e.getMessage()); + } + // expected + } + // store the secret keys for (int j = 0; j < numEntries; j++) { ks.setKeyEntry(ALIAS_HEAD + j, privateKey, PASSWDK,