Использую этот код для авторизации с помощью прикрепленной подписью
String data = "Test data";//получение кода для авторизации
boolean detached = false;
String alias = "te-";
String passString = "5X";
// false - прикреплённая(для получения токена авторизации) подпись
// true - откреплённая(для подписания документов) подпись
//Формирование подписи
Security.addProvider(new JCP());
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);//инициализация хранилища ключей
keyStore.load(null, null);
List<X509CertificateHolder> chain = new ArrayList<>();
List<Certificate> certs = Arrays.asList(keyStore.getCertificateChain(alias));
certs.forEach(cert -> {
try {
chain.add(new X509CertificateHolder(cert.getEncoded()));
} catch (IOException | CertificateEncodingException e) {
System.out.println("Error while building certificate chain" + e);
}
});
PrivateKey privateKey = (PrivateKey) (keyStore.getKey(alias, passString.toCharArray()));
ByteArrayOutputStream out = new ByteArrayOutputStream();
CAdESSignature signature = new CAdESSignature(detached);
signature.setCertificateStore(new CollectionStore(chain));
final Hashtable table = new Hashtable();
Attribute attr = new Attribute(CMSAttributes.signingTime,
new DERSet(new Time(new Date()))); // устанавливаем время подписи
table.put(attr.getAttrType(), attr);
AttributeTable attrTable = new AttributeTable(table);
//Добавление подписанта. Алгоритмы могут отличаться в зависимости от требований
signature.addSigner(
JCP.PROVIDER_NAME,
JCP.GOST_DIGEST_OID,
JCP.GOST_EL_DH_OID,
privateKey,
certs,
CAdESType.CAdES_BES,
null,
false,
attrTable,
null);
signature.open(out);
signature.update(data.getBytes(StandardCharsets.UTF_8));
signature.close();
byte[] signedCode = out.toByteArray();
System.out.println(signedCode);
Получаю ошибку
Exception in thread "main" java.lang.NoClassDefFoundError: ru/CryptoPro/Install/SecurityProperties
at ru.CryptoPro.JCP.Util.PaneDefaultProvider.readProviderIndex(Unknown Source)
at ru.CryptoPro.JCP.Util.PaneDefaultProvider.access$000(Unknown Source)
at ru.CryptoPro.JCP.Util.PaneDefaultProvider$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at ru.CryptoPro.JCP.Util.PaneDefaultProvider.getDefaultProviderIndexLoad(Unknown Source)
at ru.CryptoPro.JCP.Util.PaneDefaultProvider.getDefaultProviderIndexCached(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.<init>(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.<clinit>(Unknown Source)
at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1445)
at SignTest.main(SignTest.java:35)
Caused by: java.lang.ClassNotFoundException: ru.CryptoPro.Install.SecurityProperties
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
Код взять с официальной документации TRUE API
В чем может быть проблема? Гугл ничем помочь не может(
Отредактировано пользователем 3 октября 2022 г. 17:38:14(UTC)
| Причина: Не указана