Ошибка PKCS11 в KeyStore.getEntry(alias, null) в инструкции Java 22JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка PKCS11 в KeyStore.getEntry(alias, null) в инструкции Java 22

Сообщение Anonymous »

Я разрабатываю код подписи мыльного конверта в среде Java.
Мой код работает правильно, когда я использую алгоритм подписи RSA_SHA256 с подходящей смарт-картой на основе pkcs11. У меня есть еще одна подготовленная смарт-карта с алгоритмом подписи SHA384withECDSA (эллиптическая кривая).
Мой Java-код получает ошибку в операторе «KeyStore.Entry enter = ks.getEntry(alias, null);».
Я использую jdk 22. Думаю, есть ли в jdk22 ошибка, связанная с криптографией эллиптических кривых.
У вас есть опыт работы с этим? Как исправить ошибку?
Часть кода, связанная с ошибкой
...
...
...
...
public class App
{
public static String pin;

static CallbackHandler handler = callbacks -> {
for (Callback cb : callbacks) {
if (cb instanceof PasswordCallback) {
((PasswordCallback) cb).setPassword(pin.toCharArray());
} else {
System.out.println("CallbackHandler hatası");
throw new UnsupportedCallbackException(cb);
}
}
};

public static void main(String[] args) throws Exception {

try{
String pkcs11DriverPath = "C:/Windows/System32/akisp11.dll";
String alias = "1234567891ABCD";
String certSerial = "112233445678934567";
String Slot = getSlot(certSerial);
pin = "123456";

Provider pkcs11Provider = createPkcs11Provider(pkcs11DriverPath, Slot);

Security.addProvider(pkcs11Provider);

KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS11", pkcs11Provider, new KeyStore.CallbackHandlerProtection(handler));

KeyStore ks = builder.getKeyStore();

ks.load(null, pin.toCharArray());

KeyStore.Entry entry = ks.getEntry(alias, null);

.....
.....
} catch (Exception e) {
e.printStackTrace();
}
}

private static Provider createPkcs11Provider(String pkcs11Path, String slot) throws Exception {

Provider configured_p = null;
try {

String config = "name = pkcs11SmartCard\n" + "library = " + libraryPath + "\n" + "slot = " + slot + "\n";

java.nio.file.Path tmpCfg = java.nio.file.Files.createTempFile("pkcs11-", ".cfg");

java.nio.file.Files.write(tmpCfg, config.getBytes(java.nio.charset.StandardCharsets.UTF_8));

Provider p = Security.getProvider("SunPKCS11");

if (p == null) {
throw new RuntimeException("SunPKCS11 provider not available in this JDK.");
}

configured_p = p.configure(tmpCfg.toAbsolutePath().toString());

} catch (Exception e) {
e.printStackTrace();
}
return configured_p;
}

public static String getSlot(String cert_sn) {
String slot = "";
try {
......
......
return slot;

} catch (Exception e) {
e.printStackTrace();
return null;
}
}
...
...
}

Ошибка
java.security.KeyStoreException: Unsupported parameters
at jdk.crypto.cryptoki/sun.security.pkcs11.P11KeyStore.loadPkey(P11KeyStore.java:1385)
at jdk.crypto.cryptoki/sun.security.pkcs11.P11KeyStore.engineGetEntry(P11KeyStore.java:971)
at java.base/java.security.KeyStore.getEntry(KeyStore.java:1575)
at pkt.mvn.App.main(App.java:269)
Caused by: java.io.IOException: Only named ECParameters supported
at java.base/sun.security.util.ECParameters.engineInit(ECParameters.java:149)
at java.base/java.security.AlgorithmParameters.init(AlgorithmParameters.java:311)
at java.base/sun.security.util.ECUtil.getECParameterSpec(ECUtil.java:190)
at jdk.crypto.cryptoki/sun.security.pkcs11.P11KeyStore.loadPkey(P11KeyStore.java:1381)


Подробнее здесь: https://stackoverflow.com/questions/798 ... -statement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»