Статус: Новичок
Группы: Участники
Зарегистрирован: 06.05.2026(UTC) Сообщений: 2 
|
Коллеги, добрый день! Есть задача интегрироваться со сторонним сервисом через с поддержкой JTLS. Стек: Java 21, КриптоПро JavaCSP 5.0.2 (сборка java-csp-5.0.42119-A), Spring Boot 3.3.1 Есть проблема с работой собранного jar-файла. При запуске приложение через java -jar ..., в момент вполнения запроса, JCE выбрасывает следующее исключение: Код:
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider JCSP
at java.base/javax.crypto.JceSecurity.getInstance(JceSecurity.java:137)
at java.base/javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:286)
... 91 common frames omitted
Caused by: java.util.jar.JarException: jar:nested:.../cryptopro-proxy.jar/!BOOT-INF/lib/JCSP-5.0.4.jar!/ has unsigned entries - META-INF/services/java.security.Provider
at java.base/javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:466)
at java.base/javax.crypto.JarVerifier.verifyJars(JarVerifier.java:319)
at java.base/javax.crypto.JarVerifier.verify(JarVerifier.java:263)
at java.base/javax.crypto.ProviderVerifier.verify(ProviderVerifier.java:130)
at java.base/javax.crypto.JceSecurity.verifyProvider(JceSecurity.java:196)
at java.base/javax.crypto.JceSecurity$2.apply(JceSecurity.java:222)
at java.base/javax.crypto.JceSecurity$2.apply(JceSecurity.java:211)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
at java.base/javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:211)
at java.base/javax.crypto.JceSecurity.getInstance(JceSecurity.java:134)
... 92 common frames omitted
При этом перед этим JCSP используется для формирования подписи (Signature) для данных и ошибки не возникает. Настройка провайдеров: Код: System.setProperty("disable_default_context", "true");
Security.addProvider(new JCP());
Security.addProvider(new JCSP());
Security.addProvider(new CryptoProvider());
Security.addProvider(new RevCheck());
Security.addProvider(new Provider());
cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME);
Создание подключения: Код:KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("GostX509");
keyManagerFactory.init(clientKeyStore, new char[]{});
SSLContext sslContext = SSLContext.getInstance("GostTLSv1.2");
//временное решение для тестирования
sslContext.init(keyManagerFactory.getKeyManagers(), new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}}, null);
HttpsURLConnection conn = null;
URL url1 = new URL(url);
conn = (HttpsURLConnection) url1.openConnection();
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setSSLSocketFactory(sslContext.getSocketFactory());
conn.getOutputStream().write(data);
conn.connect();
Сборка jar-файла происходит через Maven: Код:<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
При запуске приложение через IDE (OpenIDE) ошибки нет Подскажите, в чем может быть причина проблемы? Заранее благодарю за ответ! Отредактировано пользователем 6 мая 2026 г. 16:27:21(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,089  Откуда: Крипто-Про Сказал(а) «Спасибо»: 22 раз Поблагодарили: 748 раз в 705 постах
|
Здравствуйте. При обращении к определенному API (Mac, KeyAgreement, Cipher и т.п.) в Java от Oracle, IBM выполняется проверка подписи jar файла провайдера. У нас они подписаны, но, возможно, в этих версиях дистрибутива или Java что-то пошло не так (если в ходе сборки или еще как-то не были удалены разделы META-INF с подписями в jar-файлах). Варианты решения: 1. использовать Java другого вендора (OpenJDK, Axiom, Adoptium и т.п.); 2. попробовать более свежую сборку с сайта - R4 https://cryptopro.ru/sit...5.0.49800-A-85807cb8.zipОтредактировано пользователем 6 мая 2026 г. 17:24:16(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,089  Откуда: Крипто-Про Сказал(а) «Спасибо»: 22 раз Поблагодарили: 748 раз в 705 постах
|
Тут Цитата: Security.addProvider(new JCP()); Security.addProvider(new JCSP());
если у вас используется JCSP в коде, лучше поменять местами, чтобы поднять приоритет JCSP: Цитата:Цитата: Security.addProvider(new JCSP()); Security.addProvider(new JCP());
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.05.2026(UTC) Сообщений: 2 
|
Помогло использование OpenJDK и актуальной сборки R4. Огромное спасибо за помощь!
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close