Пожалуйста, помогите мне с моей проблемой:
Когда я получаю запись из хранилища ключей *.jks, возникает java.security.UnrecoverableKeyException: избыток закрытого ключа в keyStore.getEntry Мой сертификат не является самоподписанным. Мне предоставили .jks от официального органа. Когда я получил сертификат, я установил только один пароль.
FileInputStream is = new FileInputStream(keyFile);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
String decryptedPasswd = cryptoProvider.decryptBase64(privatePasswd);
keyStore.load(is, decryptedPasswd.toCharArray());
Enumeration e = keyStore.aliases();
String alias = (String) e.nextElement();
KeyStore.ProtectionParameter protPassword =
new KeyStore.PasswordProtection(decryptedPasswd.toCharArray());
KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)
keyStore.getEntry(alias, protPassword);
Когда я пытаюсь изменить тип хранилища ключей с помощью keytool, я получаю такое же исключение в Введите пароль ключа для <pb_sign_>
keytool -importkeystore -srckeystore pb_.jks -destkeystore new-store.p12 -deststoretype PKCS12
Importing keystore pb_.jks to new-store.p12...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Enter key password for <pb_sign_>
keytool error: java.security.UnrecoverableKeyException: excess private key
java --version
java 11.0.11 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)
Учитывая, что вы идентифицируете себя как украинца, я рискну и предположу, что этот ключ принадлежит ДСТУ, и в этом случае см. (s) не может справиться с этим, и вам нужно использовать BouncyCastle. (Что вам в любом случае понадобится, чтобы использовать полученный ключ для чего-либо, поскольку Oracle/OpenJDK не реализует алгоритмы DSTU или ГОСТ.)
@dave_thompson_085 Спасибо за ответ и рекомендации.