Я пишу приложение для цифровой подписи с помощью PKCS#11. Токен Certum работает на JRE 1.8.0_333 (32-битный) и JRE 1.8.0_441 (32-битный). Токен Cencertum работает на JRE 1.8.0_333 (32-битный), но на JRE 1.8.0_441 (32-битный) он возвращает ошибку: < /p>
java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
at java.security.Signature$Delegate.chooseProvider(Unknown Source)
at java.security.Signature$Delegate.engineInitSign(Unknown Source)
at java.security.Signature.initSign(Unknown Source)
at com.example.pkcs11test.PKCS11Test.main(PKCS11Test.java:45)
< /code>
line: < /p>
signature.initSign(privateKey);
Что следует добавить в код для инициализации или что следует проверить, чтобы найти причину проблемы?
код:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Base64;
public class PKCS11Test {
public static void main(String[] args) {
try {
// 1. Ścieżka do pliku konfiguracyjnego PKCS#11
String configPath = "/pkcs11.cfg";
String configPath32 = "/pkcs1132.cfg";
String configPathCertum = "/pkcs11_Certum.cfg";
String configPathCertum32 = "/pkcs11_Certum32.cfg";
String PIN = "771216";
// 2. Inicjalizacja dostawcy PKCS#11
Provider provider = loaddllJ8(configPath32);
//loaddllJ21
Security.addProvider(provider);
// 3. Ładowanie keystore z tokena PKCS#11
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);
keyStore.load(null, PIN.toCharArray()); // PIN do tokena
// 4. Wybór klucza i certyfikatu
String alias = keyStore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, null);
X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);
System.out.println("Załadowano klucz i certyfikat:");
System.out.println("Alias: " + alias);
System.out.println("Certyfikat: " + cert);
// 5. Wiadomość do podpisania
String message = "To jest wiadomość testowa.";
byte[] messageBytes = message.getBytes();
// 6. Podpisywanie wiadomości
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(messageBytes);
byte[] signedMessage = signature.sign();
System.out.println("\nPodpis cyfrowy (Base64):");
System.out.println(Base64.getEncoder().encodeToString(signedMessage));
} catch (Exception e) {
e.printStackTrace();
}
}
private static Provider loaddllJ8(String configPath) throws FileNotFoundException, IOException {
InputStream is = PKCS11Test.class.getResourceAsStream(configPath);
Provider p = new sun.security.pkcs11.SunPKCS11(is);
is.close();
return p;
}
}
< /code>
pkcs1132.cfg:
name = MyPKCS11Device
library = "C:/Program Files (x86)/Encard/enigmap11.dll"
Подробнее здесь: https://stackoverflow.com/questions/793 ... -1-8-0-441
PKCS#11 Digital Signature Application: ошибка с токеном на JRE 1.8.0_441 ⇐ JAVA
Программисты JAVA общаются здесь
1738141740
Anonymous
Я пишу приложение для цифровой подписи с помощью PKCS#11. Токен Certum работает на JRE 1.8.0_333 (32-битный) и JRE 1.8.0_441 (32-битный). Токен Cencertum работает на JRE 1.8.0_333 (32-битный), но на JRE 1.8.0_441 (32-битный) он возвращает ошибку: < /p>
java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
at java.security.Signature$Delegate.chooseProvider(Unknown Source)
at java.security.Signature$Delegate.engineInitSign(Unknown Source)
at java.security.Signature.initSign(Unknown Source)
at com.example.pkcs11test.PKCS11Test.main(PKCS11Test.java:45)
< /code>
line: < /p>
signature.initSign(privateKey);
Что следует добавить в код для инициализации или что следует проверить, чтобы найти причину проблемы?
код:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Base64;
public class PKCS11Test {
public static void main(String[] args) {
try {
// 1. Ścieżka do pliku konfiguracyjnego PKCS#11
String configPath = "/pkcs11.cfg";
String configPath32 = "/pkcs1132.cfg";
String configPathCertum = "/pkcs11_Certum.cfg";
String configPathCertum32 = "/pkcs11_Certum32.cfg";
String PIN = "771216";
// 2. Inicjalizacja dostawcy PKCS#11
Provider provider = loaddllJ8(configPath32);
//loaddllJ21
Security.addProvider(provider);
// 3. Ładowanie keystore z tokena PKCS#11
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);
keyStore.load(null, PIN.toCharArray()); // PIN do tokena
// 4. Wybór klucza i certyfikatu
String alias = keyStore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, null);
X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);
System.out.println("Załadowano klucz i certyfikat:");
System.out.println("Alias: " + alias);
System.out.println("Certyfikat: " + cert);
// 5. Wiadomość do podpisania
String message = "To jest wiadomość testowa.";
byte[] messageBytes = message.getBytes();
// 6. Podpisywanie wiadomości
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(messageBytes);
byte[] signedMessage = signature.sign();
System.out.println("\nPodpis cyfrowy (Base64):");
System.out.println(Base64.getEncoder().encodeToString(signedMessage));
} catch (Exception e) {
e.printStackTrace();
}
}
private static Provider loaddllJ8(String configPath) throws FileNotFoundException, IOException {
InputStream is = PKCS11Test.class.getResourceAsStream(configPath);
Provider p = new sun.security.pkcs11.SunPKCS11(is);
is.close();
return p;
}
}
< /code>
pkcs1132.cfg:
name = MyPKCS11Device
library = "C:/Program Files (x86)/Encard/enigmap11.dll"
Подробнее здесь: [url]https://stackoverflow.com/questions/79396132/pkcs11-digital-signature-application-error-with-token-on-jre-1-8-0-441[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия