Я разрабатываю код подписи конвертов SOAP в среде Java. Мой код работает правильно, когда я использую алгоритм подписи RSA_SHA256 с правильной смарт-картой на основе pkcs11. У меня есть еще одно подготовленное использование смарт-карты с алгоритмом подписи SHA384withECDSA (эллиптическая кривая).
Мой Java-код получает ошибку в операторе KeyStore.Entry enter = ks.getEntry(alias, null);.
Я использую Java 22. Я думаю, что в Java 22 есть ошибка с криптографией эллиптических кривых. Есть ли у вас опыт в этом? Как исправить ошибку?
Часть кода, связанная с ошибкой:
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
Ошибка PKCS11 в KeyStore.getEntry(alias, null) в инструкции Java 22 ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1762080836
Anonymous
Я разрабатываю код подписи конвертов SOAP в среде Java. Мой код работает правильно, когда я использую алгоритм подписи RSA_SHA256 с правильной смарт-картой на основе pkcs11. У меня есть еще одно подготовленное использование смарт-карты с алгоритмом подписи SHA384withECDSA (эллиптическая кривая).
Мой Java-код получает ошибку в операторе KeyStore.Entry enter = ks.getEntry(alias, null);.
Я использую Java 22. Я думаю, что в Java 22 есть ошибка с криптографией эллиптических кривых. Есть ли у вас опыт в этом? Как исправить ошибку?
Часть кода, связанная с ошибкой:
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;
}
}
...
...
}
[b]Ошибка[/b]
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/79806469/pkcs11-error-at-keystore-getentryalias-null-at-java-22-statement[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия