Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline АнастасияVP  
#1 Оставлено : 6 мая 2026 г. 16:25:59(UTC)
АнастасияVP

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 6 мая 2026 г. 17:21:41(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)  | Причина: Не указана

Offline Евгений Афанасьев  
#3 Оставлено : 6 мая 2026 г. 17:23:36(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());

Offline АнастасияVP  
#4 Оставлено : 6 мая 2026 г. 17:35:35(UTC)
АнастасияVP

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.05.2026(UTC)
Сообщений: 2
Российская Федерация

Помогло использование OpenJDK и актуальной сборки R4.
Огромное спасибо за помощь!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.