Следующая проблема возникает при работе на Tomcat 8.5 с Java 10. Сложно обобщить, потому что поведение, которое я наблюдаю, не имеет смысла.
У меня есть хранилище ключей:
InputStream in = new FileInputStream(KEYSTORE_PATH);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
К которому я обращаюсь, используя:
ks.load(in, PASSWORD);
, где ПАРОЛЬ - это символ []
Я хранюпароль в БД, используя зашифрованную форму.
Так как у меня проблемы, показанные в Прил. 1 и отл. 2, я заменил зашифрованный пароль на незашифрованную форму временно, так как KeyStore.load требует незашифрованный пароль.
ks.load () работает правильно, когда я получаю незашифрованный пароль из БД с помощью подкласса свойств.
Но следующее не работает, предположим, пароль - P @ ssw0rd:
Пример. 1
String = "P@ssw0rd"
ks.load(in, pwd.toCharArray());
Отл. 2
char[] pwd = new char[] {'P','@', 's', 's', 'w', '0', 'r', 'd'};
ks.load(in, pwd);
Если я запускаю Ex. 1 и отл. 2 теста в основном методе, то я не получаю никаких ошибок.
Таким образом, использование значения БД как есть, работает нормально, если значение не зашифровано. В конечном итоге это значение будет зашифровано, поэтому мне нужно получить расшифрованную строку. Но, как показано в Ex. 1 и отл. 2, передача чего-либо другого исходного значения БД в KeyStore.load вызывает ошибку, это будет расшифрованный пароль.
Может быть, кто-то может увидеть, какую ошибку я совершаю, или указать на что-то еще, что я могу попробовать.
Исключение:
java.io.IOException: keystore password was incorrect
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2097)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:243)
at java.base/java.security.KeyStore.load(KeyStore.java:1479)
at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117)
... 124 more
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.