Что такое криптосервисы и что такое джаватль?

Что такое криптосервисы и что такое джаватль? Партнер

Артикул: KP-JavaTLS

Код товара: 352894

Произведено: —

Гарантия на отсутствие дефектов на момент продажи

В сервисном центре производителяПри предъявлении документа о покупке

КРИПТО-ПРО КриптоПро JavaTLS версии 2.0 на одном сервере

Заказ данного товара в настоящий момент невозможен.

КриптоПро JavaTLS предназначен для поддержки защищенного обмена данными в Internet, на основе криптопровайдеров КриптоПро JCP или КриптоПро Java CSP.?Этот продукт реализует SSL и TLS протоколы и содержит функции шифрования, контроля целостности, аутентификации сервера и клиента на основе российских стандартов. Использование КриптоПро JTLS позволяет разработчику осуществить защищенную передачу данных по таким протоколам как HTTP, Telnet, FTP, TCP/IP.?JavaTLS реализован в стандартном интерфейсе JSSE.


Offline

1estart

 

Оставлено
:

26 ноября 2021 г. 17:51:35(UTC)

Есть файлик, в котором лежит закодированный GostCertificateRequest в виде массива байт
Пытаюсь достать его вот таким кодом.
GostCertificateRequest.getEncodedCertFromDER(JCSP.PROVIDER_NAME, new FileInputStream(path))
Получаю ошибку. ru.CryptoPro.JCPRequest.GostCertificateRequest.a(Unknown Source).
для хранилища использую вот такие переменные
val HdImageType = “HDIMAGE”
private val ProviderName = JCSP.PROVIDER_NAME

Может, ошибаюсь, но первая переменная в getEncodedCertFromDER – это адрес УЦ.
Подскажите, пожалуйста, какие-то зацепки?
Liar

КриптоПро JCP – средство криптографической защиты информации, разработанное в соответствии со спецификацией JCA (Java Cryptography Architecture) и реализующее российские криптографические стандарты

Интеграция КриптоПро JCP с архитектурой Java позволяет использовать стандартные процедуры, такие как создание и проверка ЭЦП (в том числе XMLdsig, CAdES, XAdE), шифрование, генерацию ключей, вычисление кодов аутентификации в JavaTM Cryptography Extension в соответствии со спецификациями Java Cryptography Extension (JCE) на различных операционных системах и аппаратных платформах

Купить КриптоПро JavaTLS в интернет-магазине:

Внимание! В интернет-магазине представлены наиболее популярные варианты поставки лицензий КриптоПро JavaTLS. Если вам нужна другая позиция/версия, полный прайс-лист, у вас большой заказ, в заявке есть другое ПО, вопросы по ценам/скидкам и т.п., вы можете написать нашему ОНЛАЙН-КОНСУЛЬТАНТУ, оформить ЗАПРОС или связаться любым удобным способом. Приятных покупок на SNABSOFT.ru!

<!–

Сортировать по
ID товара +/-
Производитель:
КриптоПро

–>

2bcad0a29d834893dea8d3fd2d58fa11

КриптоПро JavaTLS версии 2.0 на одном сервере

Артикул: cryptoPro_id_0090

НДС (20%):
Не облагается

Тип лицензии:
Серверная

Срок лицензии:
Бессрочная

Тип поставки:
Коробочная

Срок комплектации (раб. дней):
7-10

<!–

Описание товара

–>


Offline

tuxnsk

 

Оставлено
:

10 октября 2021 г. 17:31:17(UTC)

День добрый, вопрос наверно глупый, но не могу победить, и в поиске не вижу, опыта в Java мало.
Стоит jdk-17, в conf\security\java.security добавил строки как в инструкции:

security.provider.14=JCP
security.provider.15=Crypto
security.provider.16=RevCheck

Библиотеки валяются в папке с приложением, компилю его так:

javac -cp jcp-2.0.41940-A\JCP.jar App.java

Код:

Код:



import ru.CryptoPro.JCP.JCP;
import java.security.KeyStore;

class App {
    public static void main(String[] args) throws Exception  {        
	KeyStore keyStore = KeyStore.getInstance("J6CFStore", "JCP");
    }
}

Запускаю так:

java App

Пишет что не видит провайдера JCP:

Exception in thread “main” java.security.NoSuchProviderException: no such provider: JCP

С чем это связано?


Offline

tuxnsk

 

Оставлено
:

10 октября 2021 г. 18:24:11(UTC)

Сам победил 🙂

Надо было добавить провайдера самому в коде:

Security.addProvider(new JCP());

Почему-то в доках про это не сказано… ну и после этого ругается что не находит какие-то классы, поэтому компилил так:

javac -cp jcp-2.0.41940-A\* App.java

а запускал так:

java -cp jcp-2.0.41940-A\*;. App

КриптоПро JCP – средство криптографической защиты информации, разработанное в соответствии со спецификацией JCA (Java Cryptography Architecture) и реализующее российские криптографические стандарты

Интеграция КриптоПро JCP с архитектурой Java позволяет использовать стандартные процедуры, такие как создание и проверка ЭЦП (в том числе XMLdsig, CAdES, XAdE), шифрование, генерацию ключей, вычисление кодов аутентификации в JavaTM Cryptography Extension в соответствии со спецификациями Java Cryptography Extension (JCE) на различных операционных системах и аппаратных платформах

✅ Купите Крипто-Про КриптоПро JavaTLS (сертификат на расширенную круглосуточную техническую поддержку), на 1 год на официальном сайте

✅ Лицензия Крипто-Про КриптоПро JavaTLS (сертификат на расширенную круглосуточную техническую поддержку), на 1 год по выгодной цене

✅ Крипто-Про КриптоПро JavaTLS (сертификат на расширенную круглосуточную техническую поддержку), на 1 год, лицензионное программное обеспечение купите в Москве и других городах России

Предлагаем также:

  • Лицензии Крипто-Про JCP купить по цене от 500 руб.
  • Лицензии на продукты категории Защита информации купить по цене от 1200 руб.
  • Лицензии на продукты категории Антивирусы и безопасность купить по цене от 1 руб.

КриптоПро JCP – средство криптографической защиты информации, разработанное в соответствии со спецификацией JCA (Java Cryptography Architecture) и реализующее российские криптографические стандарты

Интеграция КриптоПро JCP с архитектурой Java позволяет использовать стандартные процедуры, такие как создание и проверка ЭЦП (в том числе XMLdsig, CAdES, XAdE), шифрование, генерацию ключей, вычисление кодов аутентификации в JavaTM Cryptography Extension в соответствии со спецификациями Java Cryptography Extension (JCE) на различных операционных системах и аппаратных платформах

Лицензии поставляются только в бумажном виде! Установочный комплект включает диск и бумажный формуляр.

✅ Купите Крипто-Про JCP (лицензия), лицензия JavaTLS версии 2.0 на одном сервере на официальном сайте

✅ Лицензия Крипто-Про JCP (лицензия), лицензия JavaTLS версии 2.0 на одном сервере по выгодной цене

✅ Крипто-Про JCP (лицензия), лицензия JavaTLS версии 2.0 на одном сервере, лицензионное программное обеспечение купите в Москве и других городах России

Предлагаем также:

  • Лицензии Крипто-Про JCP купить по цене от 500 руб.
  • Лицензии на продукты категории Защита информации купить по цене от 1200 руб.
  • Лицензии на продукты категории Антивирусы и безопасность купить по цене от 1 руб.


Offline

biff

 

Оставлено
:

20 января 2022 г. 17:02:21(UTC)

Java 11
JCSP java-csp-5.0.42119-A
JCP jcp-2.0.41940-A

При попытке получить сертификат или ключ с носителя Rutoken из java вылетает exception (пробовал и JCP и JCSP)

Цитата:

java.lang.IncompatibleClassChangeError: Class ru.CryptoPro.JCP.KeyStore.Rutoken.RutokenContainerReader does not implement the requested interface ru.CryptoPro.JCP.KeyStore.ContainerReaderInterface
at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.cl_12.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at ru.CryptoPro.JCP.KeyStore.cl_10.c(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.cl_10.<init>(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.b(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetCertificate(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetCertificate(Unknown Source)
at java.base/java.security.KeyStore.getCertificate(KeyStore.java:1115)

Каким образом можно достать ключ и сертификат? Сама ControlPanel из JCP каким-то образом их читает.


Offline

biff

 

Оставлено
:

21 января 2022 г. 20:26:42(UTC)

Вопрос снят. Т.к. это мавен проект в зависимости добавлялись не все jar из JCP, а только Rutoken JCP JCryptoP asn1rt и asn1p, поэтому при запуске из мавен проекта вылетал этот эксепшен. Если добавить все jar из JCP, то всё работает нормально. Но всё равно не понятно почему RutokenStoreReader не совместим с JCP провайдером.

Отредактировано пользователем 21 января 2022 г. 20:27:48(UTC)
 | Причина: Не указана


Offline

Nickokow

 

Оставлено
:

16 сентября 2021 г. 14:54:43(UTC)

Добрый день.
У нас есть программа, которая средствами JCP проверяет подписи.


1.1)На сервере с ПО был установлен JCP 2.0.40035 (успешно)
1.2)Был добавлен корневой сертификат из тестового УЦ https://testgost2012.cry….ru/certsrv/certcarc.asp


2)Для клиентской машины, которая подписывает, были сгенерированы и добавлены сертификаты.
Локально на этой машине сгенерированы \ подписаны документы \ проверены подписи (успешно)


3)Подписан документ внутри нашей программы (успешно)


4)проверяю подпись на сервере, получаю ошибку

Код:

DEBUG [com.haulmont.thesis.core.app.signature.CryptoProServerSignatureSupport] [app-core] [admin] For online validation by CRLDP parameter 'com.sun.security.enableCRLDP' (Oracl
e) or 'com.ibm.security.enableCRLDP' (IBM) must be set 'true' to enable or 'ocsp.enable' must be set 'true' (OCSP), or CRL passed for offline validation; error codes: [44] 'Certificate status is unkno
wn or revoked'

5)Не могу понять, как добавить CRL в хранилище JCP, или как JCP обращаться к локальному списку отозванных сертификатов, или как запретить эту проверку.
Сервер с ПО, которое проверяет подпись – Linux RHEL8, GUI не предусмотрен.
Все сертификаты на этом уровне тестовые.

вывернул все мозги, перечитал все-возможные форумы. ЧЯДНТ.Brick wall


Offline

Евгений Афанасьев

 

Оставлено
:

16 сентября 2021 г. 16:33:04(UTC)

Добрый день.

Цитата:

4)проверяю подпись на сервере, получаю ошибку
Код:
DEBUG [com.haulmont.thesis.core.app.signature.CryptoProServerSignatureSupport] [app-core] [admin] For online validation by CRLDP parameter ‘com.sun.security.enableCRLDP’ (Oracl
e) or ‘com.ibm.security.enableCRLDP’ (IBM) must be set ‘true’ to enable or ‘ocsp.enable’ must be set ‘true’ (OCSP), or CRL passed for offline validation; error codes: [44] ‘Certificate status is unkno
wn or revoked’

5)Не могу понять, как добавить CRL в хранилище JCP, или как JCP обращаться к локальному списку отозванных сертификатов, или как запретить эту проверку.
Сервер с ПО, которое проверяет подпись – Linux RHEL8, GUI не предусмотрен.
Все сертификаты на этом уровне тестовые.

В JCP никак не добавить. Если, как сказано в ошибке, укажете в коде System.setProperty(“com.sun.security.enableCRLDP”, “true”), то если в проверяемом сертификате цепочки есть CRLDP (ссылки распространения) для скачивания CRL, они (CRL) будут скачаны из сети и использованы. Если не указано это свойство enableCRLDP или нет доступа к сети (такое бывает), то CRL надо качать отдельно самим и подавать в метод verify(certs, crls) (crls – это список заранее подготовленных X509CRL). Так как используется сертификат из тестового УЦ, CRLDP в нем должен быть, проверьте доступ к crl для скачивания (ссылку на crl можно найти в расширения сертификата и скопировать её в браузер) и включён ли enableCRLDP.

Отредактировано пользователем 16 сентября 2021 г. 18:05:49(UTC)
 | Причина: Не указана


Offline

Nickokow

 

Оставлено
:

17 сентября 2021 г. 6:46:01(UTC)

Цитата:

укажете в коде System.setProperty(“com.sun.security.enableCRLDP”, “true”)

А где именно следует это указывать? Это возможно сделать не java программисту?

Цитата:

подавать в метод verify(certs, crls)

тот-же вопрос, как подать в метод.

Цитата:

подавать в метод verify(certs, crls)

В корневом сертификате из тестового центра нет этих ссылок Что такое криптосервисы и что такое джаватль? certnew(2).zip (1kb) загружен 0 раз(а).

Цитата:

включён ли enableCRLDP.

где проверить?

p.s работаю с JCP Крипто-про первый раз. И к сожалению не java программист.


Offline

vicmosin

 

Оставлено
:

17 февраля 2022 г. 8:50:55(UTC)

Доброго времени суток,
интересует следующее – есть ли возможность проверить подпись, генерируемую с помощью браузер-плагина (https://docs.cryptopro.ru/cades/plugin/plugin-samples/plugin-samples-sign-detached) на стороне сервера без установки JCP?
То есть либо чистый Java либо BouncyCatstle.

Заранее спасибо.


Offline

TolikTipaTut1

 

Оставлено
:

17 февраля 2022 г. 11:47:18(UTC)

Добрый. Да, проверить можно.


Offline

vicmosin

 

Оставлено
:

17 февраля 2022 г. 12:18:49(UTC)

Автор: TolikTipaTut1 Перейти к цитате

Добрый. Да, проверить можно.

Есть какие-то примеры где можно почерпнуть? ))


Offline

TolikTipaTut1

 

Оставлено
:

17 февраля 2022 г. 12:27:18(UTC)

https://github.com/anato…0using%20BouncyCastle.cs

Тут на C#, но на Java переписать, думаю, несложно будет.

Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет

Отредактировано пользователем 17 февраля 2022 г. 12:32:37(UTC)
 | Причина: Не указана

thanks 1 пользователь поблагодарил TolikTipaTut1 за этот пост.


Offline

vicmosin

 

Оставлено
:

17 февраля 2022 г. 12:37:39(UTC)

Автор: TolikTipaTut1 Перейти к цитате

https://github.com/anatolkavassermann/BounyCastle-and-OpenSSL-crypto/blob/main/Different%20samples%20using%20BouncyCastle.cs

Тут на C#, но на Java переписать, думаю, несложно будет.

Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет

Спасибо!

> Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет

Это я так понимаю уже часть JCP?


Offline

TolikTipaTut1

 

Оставлено
:

17 февраля 2022 г. 12:45:36(UTC)

Автор: vicmosin Перейти к цитате

Автор: TolikTipaTut1 Перейти к цитате

https://github.com/anatolkavassermann/BounyCastle-and-OpenSSL-crypto/blob/main/Different%20samples%20using%20BouncyCastle.cs

Тут на C#, но на Java переписать, думаю, несложно будет.

Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет

Спасибо!

> Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет

Это я так понимаю уже часть JCP?

Нет, придётся писать самостоятельно с использованием BouncyCastle


Online

Санчир Момолдаев

 

Оставлено
:

17 февраля 2022 г. 12:54:33(UTC)

Добрый день!
для проверки подписей лицензия JCP не требуется.
вы не хотите его (jcp) использовать только из-за лицензий?


Offline

TolikTipaTut1

 

Оставлено
:

17 февраля 2022 г. 13:32:39(UTC)

Автор: Санчир Момолдаев Перейти к цитате

Добрый день!
для проверки подписей лицензия JCP не требуется.
вы не хотите его (jcp) использовать только из-за лицензий?

+
Есть готовое решение уже, и поддержка есть. BC использовать- не лучший вариант. Придётся многое переписывать для адекватной работы с ГОСТ-ом


Offline

vicmosin

 

Оставлено
:

17 февраля 2022 г. 13:52:46(UTC)

Автор: Санчир Момолдаев Перейти к цитате

Добрый день!
для проверки подписей лицензия JCP не требуется.
вы не хотите его (jcp) использовать только из-за лицензий?

Именно.
То есть для проверки подписей я могу использовать JCP бесплатно?

Отредактировано пользователем 17 февраля 2022 г. 13:53:19(UTC)
 | Причина: Не указана


Online

Санчир Момолдаев

 

Оставлено
:

17 февраля 2022 г. 15:42:26(UTC)

Автор: vicmosin Перейти к цитате

Автор: Санчир Момолдаев Перейти к цитате

Добрый день!
для проверки подписей лицензия JCP не требуется.
вы не хотите его (jcp) использовать только из-за лицензий?

Именно.
То есть для проверки подписей я могу использовать JCP бесплатно?

да

thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.

Если вы решили разрабатывать приложение на Java + maven, которое должно работать с отечественной криптографией, то эта статья для вас.

В статье рассказывается как создать приложение и подключить к нему JavaCSP для работы с ГОСТ-овой криптографией. В качестве примера мы создадим программу, показывающую все сертификаты в регистре.

Целевая аудитория junior/middle разработчики, которым требуется реализовать подписание/шифрование на базе отечественной криптографии. И которые до этого не имели опыта работы с Крипто Про.

Java CSP – это по сути API, чтобы обратиться к уже установленному в системе Crypto Pro CSP. Сам модуль ничего не подписывает и не шифрует, а лишь обращается к уже установленному в системе Крипто Про.

Если вы уже разрабатывали maven приложения на java, то при необходимости добавить новый модуль в проект добавляли еще одну dependency в pom файл. У крипто про нет публичных maven репозиториев и поэтому потребуются дополнительные действия.

Вначале необходимо скачать Java CSP с официального сайта.

Распаковываете архив в удобном месте и стандартными командами устанавливаете библиотеки в локальный maven репозиторий

mvn install:install-file -Dfile=./libs/JCSP.jar \
-DgroupId=ru.cryptopro.jcp \
-DartifactId=jcp-jscp \
-Dversion=5.0.40363-A \
-Dpackaging=jar \

Необходимый минимум библиотек для установки есть в cprypto-install.sh в репозитории в конце статьи.

После установки в локальный maven репозиторий можно добавлять библиотеки JavaCSP как зависимости в pom файл

<dependency>
   <groupId>ru.cryptopro.jcp</groupId>
   <artifactId>jcp-jscp</artifactId>
   <version>5.0.40363-A</version>
</dependency>

К счастью начиная с java 10 более нет необходимости устанавливать Java CSP непосредственно в jre. Достаточно инициализировать его непосредственно в программе.

System.setProperty("file.encoding", "UTF-8");
Security.addProvider(new JCSP()); // провайдер JCSP
Security.addProvider(new RevCheck());// провайдер проверки сертификатов JCPRevCheck
//(revocation-провайдер)
Security.addProvider(new CryptoProvider());// провайдер шифрования JCryptoP

Теперь нам нужно получить хранилище ключей, из него имена сертификатов и сами сертификаты

KeyStore ks = KeyStore.getInstance("REGISTRY", "JCSP");
ks.load(null, null);
Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements()) {
   Certificate cert = ks.getCertificate(aliases.nextElement());
   if (cert == null) {
       continue;
   }
   if (!(cert instanceof X509Certificate)) {
      continue;
   }
   X509Certificate curCert = (X509Certificate) cert;
   System.out.println(CertUtil.subjectCN(curCert));
}

Остался последний шаг – собрать наше приложение. Обратите внимание – при работе  Java CSP проверяет свои библиотеки на версию и md5 (RevCheck). При сборке “толстого” jar файла RevCheck проверяет версию и md5 всего “толстого” jar файла. Идет сравнение с заложенными в RevCheck значениями. Ну и конечно такая проверка не проходит. Поэтому необходимо собирать “тонкий” jar с внешними библиотеками.

Для этого мы используем maven-dependency-plugin для сборки зависимостей, maven-jar-plugin для сборки самого приложения и maven-assembly-plugin для сборки всего приложения с библиотеками в zip архив.

<build>
   <finalName>${project.name}</finalName>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
           <executions>
               <execution>
                   <id>copy-dependencies</id>
                   <phase>prepare-package</phase>
                   <goals>
                       <goal>copy-dependencies</goal>
                   </goals>
                   <configuration>
                       <outputDirectory>
                           ${project.build.directory}/libs
                       </outputDirectory>
                   </configuration>
               </execution>
           </executions>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <configuration>
               <archive>
                   <manifest>
                       <addClasspath>true</addClasspath>
                       <classpathPrefix>libs/</classpathPrefix>
                       <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                       <mainClass>
                           site.barsukov.java_csp.Application
                       </mainClass>
                   </manifest>
               </archive>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
           <executions>
               <execution>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
                   <configuration>
                       <appendAssemblyId>false</appendAssemblyId>
                       <descriptors>
                           <descriptor>src/main/resources/assembly.xml</descriptor>
                       </descriptors>
                       <finalName>${project.artifactId}-${project.version}</finalName>
                       <outputDirectory>${project.build.directory}/distr</outputDirectory>
                   </configuration>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>

После запуска приложения выводится список установленных в реестре сертификатов.

Что такое криптосервисы и что такое джаватль?

Как реализовать подписание, шифрование и пр. вы сможете найти в документации в скачанном ранее с сайта крипто про архиве.

Репозиторий программы


Offline

Руслан Хасанов

 

Оставлено
:

19 сентября 2021 г. 10:35:01(UTC)

Доброго времени суток.
Пытаюсь создать подпись следующим образом:

List<X509Certificate> certChain = new ArrayList<X509Certificate>();
Certificate cert = CryptoUtils.getCertFromStringBase64(jcpConfig.getCertB64());
certChain.add((X509Certificate) cert);

if (jcpConfig.getIssuerCertB64() != null && !jcpConfig.getIssuerCertB64().equalsIgnoreCase(“”)) {
Certificate issuerCert = CryptoUtils.getCertFromStringBase64(jcpConfig.getIssuerCertB64());
certChain.add((X509Certificate) issuerCert);
}

PrivateKey key = null;
KeyStore keyStore = null;
try {
keyStore = KeyStore.getInstance(“FloppyStore”);
keyStore.load(null, null);

key = (PrivateKey) keyStore.getKey(“jcp3cont”, “123”.toCharArray());
} catch (Exception e) {
e.printStackTrace();
}

byte[] cms;
try {
CAdESSignature cadesSign = new CAdESSignature(true);
cadesSign.addSigner(JCP.PROVIDER_NAME, JCP.GOST_DIGEST_2012_256_OID, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
key, certChain, CAdESType.CAdES_BES, null, false);

ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
cadesSign.open(signatureStream);
cadesSign.update(data);
cadesSign.close();
signatureStream.close();
cms = signatureStream.toByteArray();

При выполнении cadesSign.addSigner() получаю ошибку:

at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NoClassDefFoundError: ru/CryptoPro/reprov/AndroidExtKeyUsageCertPathChecker
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.it.lecm.jcpsigning.beans.JCPSigningServiceImpl.signByte2(JCPSigningServiceImpl.java:154)
at ru.it.lecm.jcpsigning.beans.JCPSigningServiceImpl.doSmth(JCPSigningServiceImpl.java:178)
at ru.blogic.lecm.lkuzedo.scripts.ExtractContentMetadata.execute(ExtractContentMetadata.java:84)
at org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:527)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:450)
… 37 more
Caused by: java.lang.ClassNotFoundException: ru.CryptoPro.reprov.AndroidExtKeyUsageCertPathChecker
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
… 48 more

С чем может быть связана данная ошибка? И что это за класс AndroidExtKeyUsageCertPathChecker? Про него никакой информации не нашел
Видел похожие ошибки, где фигурировало at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source), там решением была установка корневого сертификата в cacerts, этот шаг уже проделал


Offline

Руслан Хасанов

 

Оставлено
:

19 сентября 2021 г. 20:57:15(UTC)

Автор: Евгений Афанасьев Перейти к цитате

Здравствуйте.
Библиотека JCPRevCheck подключена к проекту?

Боюсь, что нет. Подскажите, пожалуйста, как ее подключить? И откуда скачать

Отредактировано пользователем 19 сентября 2021 г. 21:03:23(UTC)
 | Причина: Не указана


Offline

Руслан Хасанов

 

Оставлено
:

19 сентября 2021 г. 21:56:12(UTC)

Автор: Евгений Афанасьев Перейти к цитате

JCPRevCheck.jar есть в составе дистрибутива.

Данная ошибка ушла, спасибо.
Однако появилась новая:

Caused by: Error building certification path for the target, sn: 120058c316c3051a78ae234fce00010058c316, subject: CN=jcp4, issuer: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, [email protected] : java.security.NoSuchProviderException: no such provider: RevCheck; error codes: [33] ‘PKIX failure: invalid parameters of certificate’,
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
… 46 more

Вызов
Security.addProvider(new RevCheck());
приводит к следующей ошибке:

Caused by: java.lang.NoSuchFieldError: PRODUCT_VERSION
at ru.CryptoPro.reprov.RevCheck.<init>(Unknown Source)

Отредактировано пользователем 19 сентября 2021 г. 21:59:58(UTC)
 | Причина: Не указана


Offline

Руслан Хасанов

 

Оставлено
:

20 сентября 2021 г. 5:37:59(UTC)

Используется jcp-2.0.40035 для java11

C вышеуказанной ошибкой удалось справиться, добавил в проект версию JCP.jar из дистрибутива
теперь получаю ошибку при попытке достать приватный ключ из хранилища:

java.security.ProviderException: Ошибка при проверке лицензии
at ru.CryptoPro.JCP.KeyStore.cl_4.m(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.cl_4.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.base/java.security.KeyStore.getKey(KeyStore.java:1057)

о какой лицензии идет речь?
до этого использовался JCP.jar версии 5.0.39267, там ключ доставался без этой ошибки

Отредактировано пользователем 20 сентября 2021 г. 7:42:35(UTC)
 | Причина: Не указана


Offline

Руслан Хасанов

 

Оставлено
:

20 сентября 2021 г. 18:07:12(UTC)

Автор: Евгений Афанасьев Перейти к цитате

Спасибо за консультацию. Подпись удалось сформировать

Отредактировано пользователем 20 сентября 2021 г. 18:25:13(UTC)
 | Причина: Не указана


Offline

wastsy

 

Оставлено
:

20 декабря 2021 г. 10:52:24(UTC)

При попытке вызвать

Цитата:

Signature.getInstance(getSignatureAlgorithm().name(), JCP.PROVIDER_NAME);

возникает исключение:

Цитата:

Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST3411_2012_256withGOST3410_2012_256, provider: JCP, class: ru.CryptoPro.JCP.Sign.GostElSign2012_256)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1901)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
at java.base/java.security.Signature.getInstance(Signature.java:404)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: SelfTester Error: some test crashed twice in a row, usage of JCP is no longer available
at ru.CryptoPro.JCP.tools.SelfTester.check(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
at ru.CryptoPro.JCP.Sign.cl_0.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign2012_256.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:154)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1894)
… 129 common frames omitted

При этом локально на машине Windows работает корректно, ошибка происходит только на сервере (Linux).
Используются Java 11, jcp-2.0.41940-A для JVM 10+
Подскажите, пожалуйста, с чем может быть связано?


Online

Санчир Момолдаев

 

Оставлено
:

20 декабря 2021 г. 19:42:50(UTC)

Добрый день!
на винде работает в IDE?
если собираете fat jar то все наши jar-ники должны быть импортированы полностью. т.к. они подписаны

thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.

wastsy

оставлено 25.12.2021(UTC)


Offline

wastsy

 

Оставлено
:

21 декабря 2021 г. 9:40:07(UTC)

Добрый день!
Всё верно, работаю в IDE.
Собирается fat jar. Получается, нужно вынести все ваши jar-ники во внешние зависимости для проекта или можно просто импортировать в проект все jar-ники и собирать fat jar?


Offline

wastsy

 

Оставлено
:

21 декабря 2021 г. 9:50:31(UTC)

Вот скрин: UserPostedImage

Подскажите, пожалуйста, это весь список необходимых jar-ников?


Offline

wastsy

 

Оставлено
:

21 декабря 2021 г. 13:04:28(UTC)

Автор: Санчир Момолдаев Перейти к цитате

Добрый день!
на винде работает в IDE?
если собираете fat jar то все наши jar-ники должны быть импортированы полностью. т.к. они подписаны

Чуть выше задал вам вопросы уточняющие.

Ещё попробовал собрать fat jar со всеми jar-никами и запустить его локально, но, к сожалению, появилась вот такая проблема (такая же проблема возникает и при запуске fat jar без всех дополнительных jar-ников):

Цитата:

Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST3411_2012_256withGOST3410_2012_256, provider: JCP, class: ru.CryptoPro.JCP.Sign.GostElSign2012_256)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1895)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
at java.base/java.security.Signature.getInstance(Signature.java:404)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: URI is not hierarchical
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
at ru.CryptoPro.JCP.Sign.cl_0.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign2012_256.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:154)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1888)
… 129 common frames omitted
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: URI is not hierarchical
at ru.CryptoPro.JCP.tools.TestVerifyClassJar.run(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.b(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
… 140 common frames omitted
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
at java.base/java.io.File.<init>(File.java:420)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
at ru.CryptoPro.JCP.tools.cl_36.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
… 143 common frames omitted

Попробовал этот же fat jar со всеми jar-никами запустить на сервере: ошибка та же, что и указывалась ранее:

Цитата:

Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST3411_2012_256withGOST3410_2012_256, provider: JCP, class: ru.CryptoPro.JCP.Sign.GostElSign2012_256)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1901)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
at java.base/java.security.Signature.getInstance(Signature.java:404)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: SelfTester Error: some test crashed twice in a row, usage of JCP is no longer available
at ru.CryptoPro.JCP.tools.SelfTester.check(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
at ru.CryptoPro.JCP.Sign.cl_0.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign2012_256.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:154)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1894)
… 129 common frames omitted

Отредактировано пользователем 21 декабря 2021 г. 17:00:43(UTC)
 | Причина: Не указана


Offline

Евгений Афанасьев

 

Оставлено
:

21 декабря 2021 г. 18:11:06(UTC)

Здравствуйте.
У вас точно

Автор: wastsy Перейти к цитате

jcp-2.0.41940-A для JVM 10

?
В changelog JCP есть исправление ошибки вида URI is not hierarchical в JCP 2.0.40363-A и выше. Либо у вас как-то по-особенному собран jar.

Отредактировано пользователем 21 декабря 2021 г. 18:11:45(UTC)
 | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.

wastsy

оставлено 25.12.2021(UTC)


Offline

wastsy

 

Оставлено
:

22 декабря 2021 г. 12:17:05(UTC)

Автор: Евгений Афанасьев Перейти к цитате

Здравствуйте.
У вас точно

Автор: wastsy Перейти к цитате

jcp-2.0.41940-A для JVM 10

?
В changelog JCP есть исправление ошибки вида URI is not hierarchical в JCP 2.0.40363-A и выше. Либо у вас как-то по-особенному собран jar.

Перепроверил версию. Действительно, стояла версия jcp-2.0.40132-A. Сейчас попробую новую 5.0.42119-A

Отредактировано пользователем 23 декабря 2021 г. 11:48:50(UTC)
 | Причина: Не указана


Offline

wastsy

 

Оставлено
:

22 декабря 2021 г. 14:46:29(UTC)

Импортировал все jar-ники из java-csp-5.0.42119-A (КриптоПро CSP 5.0 R2) в проект:
ASN1P.jar,
asn1rt.jar,
JCPRevTools.jar,
JCP.jar,
XMLDSigRI.jar,
JCSP.jar,
AdES-core.jar,
CAdES.jar,
cmsutil.jar,
cpSSL.jar,
forms_rt.jar,
J6CF.jar,
J6Oscar.jar,
JCPControlPane.jar,
JCPRequest.jar,
JCPRevCheck.jar,
JCPxml.jar,
JCryptoP.jar,
Rutoken.jar,
samples.jar,
samples-sources.jar,
tls_proxy.jar,
XAdES.jar.

Собрал fat jar, все проблемы ушли при запуске этого jar-ника локально.
Но на сервера возникла новая проблема (прошлая ушла, возможно, или просто возникла дополнительная к предыдущей):

Цитата:

Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: GOST3411_2012_256withGOST3410_2012_256, provider: JCP, class: ru.CryptoPro.JCP.Sign.GostElSign2012_256)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1901)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
at java.base/java.security.Signature.getInstance(Signature.java:404)
… 121 common frames omitted
Caused by: java.lang.NoClassDefFoundError: Could not initialize class ru.CryptoPro.JCP.tools.cl_33
at ru.CryptoPro.JCP.tools.Starter.getInstance(Unknown Source)
at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
at ru.CryptoPro.JCP.Sign.cl_0.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign.<init>(Unknown Source)
at ru.CryptoPro.JCP.Sign.GostElSign2012_256.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:154)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1894)
… 129 common frames omitted

jar-ник JCP.jar подключен, что подтверждается тем, что локально отрабатывает нормально тот джарник, который вызывает исключение на сервере.
Подскажите, пожалуйста, с чем может быть связана? Вызывается исключение всё в той же строчке кода, которую описал выше в первом сообщении.

Отредактировано пользователем 23 декабря 2021 г. 13:50:29(UTC)
 | Причина: Не указана

Веб-сервисы с поддержкой ЭЦП на базе криптографии ГОСТ

Начиная с версии 2008.2, в Caché и в Ensemble встроена поддержка WS-Security, включающая механизмы проверки и формирования электронной подписи SOAP-сообщений. На текущий момент имеется «out of the box» поддержка ЭЦП на базе крипто алгоритмов семейства RSA.

К системам, создаваемым для российских заказчиков, зачастую предъявляется требование применения сертифицированных СКЗИ, использующих крипто алгоритмы ГОСТ. Далее описан один из подходов к разработке веб-сервисов Caché, защищенных ЭЦП на базе ГОСТ’овской криптографии.

В качестве сертифицированного СКЗИ, будем использовать продукт КриптоПро JCP, представляющий собой набор Java библиотек, в которых реализован алгоритм подписи — ГОСТ Р 34.10-2001, а также алгоритм хэширования ГОСТ Р 34.11-94.

Дополнительные библиотеки Java

Нам понадобится библиотека iscjcp.jar (исходники здесь), в которой содержится ряд вспомогательных классов для работы с JCP из Caché. Кроме этого, потребуются три open source библиотеки — Commons Logging, Santuario (aka XML Security) и WSS4J. Их использование регулируется лицензией Apache Software License 2.0.

Загрузите архив jars.zip с четырьмя перечисленными библиотеками и распакуйте его в папку jre\lib\ext.

В случае использования Windows 7, необходимо выдать полномочия группе «Все» на чтение и выполнение всех библиотек в папке jre\lib\ext.

Характеристики

КриптоПро JavaTLS предназначен для поддержки защищенного обмена данными в Internet, на основе криптопровайдеров КриптоПро JCP или КриптоПро Java CSP. Этот продукт реализует SSL и TLS протоколы и содержит функции шифрования, контроля целостности, аутентификации сервера и клиента на основе российских стандартов. Использование КриптоПро JTLS позволяет разработчику осуществить защищенную передачу данных по таким протоколам как HTTP, Telnet, FTP, TCP/IP. JavaTLS реализован в стандартном интерфейсе JSSE.

Основные характеристики

Назначение

Система безопасности

Версия

КриптоПро JavaTLS версии 2.0

Платформа

Десктоп, Сервер

Объект лицензирования

Сервер

Количество лицензируемых объектов

1

Входит в единый реестр российских программ для ЭВМ и БД

Да

(13)

КРИПТО-ПРО КриптоПро JavaTLS версии 2.0 на одном сервере сертифицирован для продажи в России.

Изображения товара, включая цвет, могут отличаться от реального внешнего вида.
Комплектация также может быть изменена производителем без предварительного уведомления.
Данное описание не является публичной офертой.

Право на использование КРИПТО-ПРО КриптоПро JavaTLS версии 2.0 на одном сервере – фото, технические характеристики, условия доставки по Санкт-Петербургу. Для того, чтобы купить право на использование КРИПТО-ПРО КриптоПро JavaTLS версии 2.0 на одном сервере в интернет-магазине XcomSpb.ru, достаточно заполнить форму онлайн заказа или позвонить по телефонам: +7 (812) 740-11-10.

Настройка и запуск Java Gateway, создание проекций классов

Чтобы стало возможным вызывать Java-классы из Caché/Ensemble, необходимо настроить и запустить Java Gateway, а также создать проекции используемых Java-классов.

Добавим новую запись в таблицу настроек Java Gateway в области %SYS:

insert into %Net_Remote.ObjectGateway(Name, Type, Server, Port, JavaHome) values (‘JCPGate’, ‘1’, ‘127.0.0.1’, ‘55555’, ‘C:\Program Files\Java\jdk1.6.0_20\jre’)

Здесь в поле Name указано значение “JCPGate” – это имя нового Java Gateway. В поле JavaHome необходимо указать путь к JRE, для которой была произведена установка JCP. В поле Port указывается TCP-порт, используемый для общения с этим Java Gateway из Caché.

Теперь можно запустить новый Java Gateway, выполнив в терминале Caché следующую команду:

write ##class(%Net.Remote.Service).StartGateway(“JCPGate”)

Чтобы остановить его, вызовите метод StopGateway:

write ##class(%Net.Remote.Service).StopGateway(“JCPGate”)

Запускать/останавливать Java Gateway можно из любой области.

Перейдем в область, где ведется разработка веб-сервисов, и создадим проекцию для Java-класса isc.jcp.JcpFacade, выполнив в терминале Caché следующую команду:

do ##class(%Net.Remote.Java.JavaGateway).%ExpressImport(“isc.jcp.JcpFacade”, “55555”)

Здесь 55555 – это номер TCP-порта, который используется для общения с Java Gateway. Этот порт был указан нами ранее при добавлении записи в таблицу %Net_Remote.ObjectGateway.

Установка КриптоПро JCP на Windows

Прежде всего, на сервер системы установите Java Runtime Environment (JRE) версии не ниже 1.6.

Загрузите дистрибутив КриптоПро JCP с сайта производителя, распакуйте его в папку на сервере и запустите скрипт установки install.bat. Скрипт находится в папке lib дистрибутива. При его запуске необходимо указать путь к JRE:

install.bat “C:\Program Files\Java\jdk1.6.0_20\jre”

В случае если имеется лицензия, при запуске скрипта также указывается серийный номер и название компании:

install.bat “C:\Program Files\Java\jdk1.6.0_20\jre” XXXXX-XXXXX-XXXXX-XXXXX-XXXXX “Your Company”

Под Windows 7 скрипт установки необходимо запускать с правами администратора. После завершения работы скрипта, убедитесь в том, что в папке jre\lib\ext появились следующие библиотеки:

asn1rt.jarJCP.jarJCPRevCheck.jarJCP_ASN.jar
AsnLite.jarJCPinst.jarJCPRevTools.jarJCryptoP.jar
forms_rt.jarJCPRequest.jarJCPxml.jar

Формирование ЭЦП для исходящих SOAP-сообщений веб-сервиса

Далее рассмотрим случай, когда все ответы веб-сервиса должны быть подписаны ЭЦП организации. В такой ситуации на сервере системы размещается хранилище, содержащее секретный ключ, который используется при формировании подписи. Кроме того, должен быть доступен сертификат, соответствующий этому ключу. В библиотеке iscjcp.jar реализована работа с хранилищем типа «FloppyStore». Поэтому, для формирования ЭЦП нам потребуется виртуальная дискета с хранилищем ключей.

Размещение секретного ключа и сертификата на виртуальной дискете на сервере системы

Чтобы создать такую дискету, выполните следующие действия:

  1. Установите драйвер, имитирующий FDD привод, например, ImDisk.
  2. Из панели управления Windows запустите программу настройки «ImDisk Virtual Disk Driver» и настройте диск с параметрами:
    • Drive letter: A,
    • Size of virtual disk: 1 Megabyte,
    • Device type: Floppy.
  3. Отформатируйте виртуальную дискету, задав файловую систему FAT.
  4. Распакуйте содержимое архива FDD.zip на диск A:\.

В результате описанных манипуляций на диске A:\ сервера имеем хранилище ключей, содержащее тестовый секретный ключ. Файл A:\SelfSigned.cer представляет собой тестовый сертификат, соответствующий секретному ключу.

Вы можете самостоятельно генерировать ключи и сертификаты с помощью КриптоПро JCP. Эти процедуры описаны в документации продукта.

Формирование ЭЦП

Загруженный ранее архив iscjcp-cos-sources2012.zip с исходным кодом Caché Object Script содержал класс smev.JcpSignature. Импортируйте этот класс в Caché с помощью Studio.

Откройте класс smev.JcpUtils в Studio и отредактируйте значение параметра CERTFILENAME, указав полный путь к файлу сертификата – “A:\SelfSigned.cer”. Этот сертификат соответствует секретному ключу, который будет использоваться при формировании ЭЦП. Скомпилируйте класс.

Теперь, чтобы добавить в метод веб-сервиса функционал по формированию ЭЦП для возвращаемых сообщений, необходимо вставить следующую строку в код этого метода:

do ..SecurityOut.AddElement(##class(smev.JcpSignature).%New())

Это работает на версиях Caché/Ensemble, начиная с 2009.1, по 2012.1 включительно. Ниже приведен пример веб-сервиса, где в метод echo() добавлено подписывание ответа.

Class test.TestService Extends %SOAP.WebService
{
  Parameter SERVICENAME = "TestService";

  Parameter NAMESPACE = "http://test/wsdl";

  Method echo(request As %String) As %String [ ProcedureBlock = 1, SoapAction = "urn:echo",
       SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
  {
     do ..SecurityOut.AddElement(##class(smev.JcpSignature).%New())
     quit request
  }

  Method OnPreSOAP(mode As %String, action As %String, request)
  {
    do ##super(mode, action, request)

    #dim stream As %Stream.Object = request

    if '$isObject(stream)
    {
      // на случай MIME attachments
      #dim index As %Integer = %request.NextMimeData("")
      set stream = $select(index="":"", 1:%request.GetMimeData(index))
    }

    if $isObject(stream)
    {
      #dim fault As %SOAP.Fault = ##class(smev.JcpUtils).verifySignatureOnPreSoap(stream)
      if $isObject(fault) set ..SoapFault = fault
    }
  }
}

Тестирование веб-сервиса

Чтобы протестировать проверку/формирование ЭЦП веб-сервисом test.TestService, исходный код которого приведен выше, выполним следующие действия.

  1. При помощи Studio создадим класс test.TestService в той же области, куда были импортированы классы smev.*. Исходный код нового класса скопируем из вышеприведенного листинга.
  2. Запустим в терминале Caché метод signFile() класса smev.JcpUtils:
    write ##class(smev.JcpUtils).signFile(“id1”, “C:\Temp\input.xml”, “C:\Temp\output.xml”)

    Убедимся в том, что в результате работы метода был создан файл C:\Temp\output.xml, содержащий подписанное SOAP-сообщение (Envelope): в заголовке (Header) находится ЭЦП в формате WS-Security, а тело (Body) представляет собой XML-документ, взятый из файла input.xml.

    Готовый файл output.xml имеется в архиве xmls.zip.

  3. Направим полученное SOAP-сообщение с ЭЦП на вход сервиса test.TestService. Для этого выполним в терминале Caché следующие команды (при необходимости, замените порт веб-сервера – “57772” на правильный, а также область “user” в предпоследней команде):

    set httprequest = ##class(%Net.HttpRequest).%New()
    set httprequest.Server = "localhost"
    set httprequest.Port = "57772"
    set httprequest.WriteRawMode = 1
    set httprequest.ContentType = "text/xml"
    do httprequest.SetHeader("SOAPAction","urn:echo")
    set fileStream = ##class(%Library.FileBinaryStream).%New()
    set fileStream.Filename = "C:\Temp\output.xml"
    do httprequest.EntityBody.CopyFrom(fileStream)
    do httprequest.Post("/csp/user/test.TestService.cls")
    do httprequest.HttpResponse.OutputToDevice()
    

    Если успешно прошла проверка ЭЦП входящего сообщения, а затем и формирование ЭЦП исходящего, то в окне терминала появится ответ веб-сервиса примерно такого вида:

Все действия, описанные в статье, можно посмотреть в следующем видеоролике:

Купить КриптоПро JavaTLS в СНАБСОФТ

Покупая лицензию КриптоПро JavaTLS, за невысокую цену вы получаете программу, предназначеную для поддержки защищенного обмена данными в Internet, на основе криптопровайдеров КриптоПро JCP или КриптоПро Java CSP.

Программа КриптоПро JavaTLS реализует SSL и TLS протоколы и содержит функции шифрования, контроля целостности, аутентификации сервера и клиента на основе российских стандартов.

Использование программы КриптоПро JTLS позволяет разработчику осуществить защищенную передачу данных по таким протоколам как HTTP, Telnet, FTP, TCP/IP. JavaTLS реализован в стандартном интерфейсе JSSE.

Если Вы не нашли необходимую лицензию на программу КриптоПро JavaTLS, планируете купить другую версию программы или Вас не устраивает стоимость лицензии КриптоПро JavaTLS, уточняйте возможность поставки, наличие и цены по телефонам:

[email protected]

Наши специалисты подберут для Вас оптимальное решение!

Проверка ЭЦП во входящих SOAP-сообщениях

Загрузите и распакуйте архив iscjcp-cos-sources2012.zip с исходным кодом классов smev.JcpUtils и smev.JcpSignature. Импортируйте класс smev.JcpUtils в Caché с помощью Studio, предварительно перейдя в область, где ведется разработка веб-сервисов. Откройте импортированный класс в Studio и отредактируйте значения параметров JAVAGATEWAYPORT и JAVAGATEWAYSERVER, указав соответственно TCP-порт и IP-адрес используемого Java Gateway. Скомпилируйте класс.

Теперь, чтобы добавить в существующий веб-сервис проверку ЭЦП, достаточно внести в класс веб-сервиса следующий метод:

Method OnPreSOAP(mode As %String, action As %String, request)
{
  do ##super(mode, action, request)

  #dim stream As %Stream.Object = request

  if '$isObject(stream)
  {
    // на случай MIME attachments
    #dim index As %Integer = %request.NextMimeData("")
    set stream = $select(index="":"", 1:%request.GetMimeData(index))
  }

  if $isObject(stream)
  {
  #dim fault As %SOAP.Fault = ##class(smev.JcpUtils).verifySignatureOnPreSoap(stream)
    if $isObject(fault) set ..SoapFault = fault
  }
}

Это работает на версиях Caché/Ensemble, начиная с 2009.1. Ниже приведен пример веб-сервиса, который осуществляет проверку подписи всех входящих SOAP-сообщений.

Class test.TestService Extends %SOAP.WebService
{
  Parameter SERVICENAME = "TestService";

  Parameter NAMESPACE = "http://test/wsdl";

  Method echo(request As %String) As %String [ ProcedureBlock = 1, SoapAction = "urn:echo",
       SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
  {
     quit request
  }

  Method OnPreSOAP(mode As %String, action As %String, request)
  {
    do ##super(mode, action, request)

    #dim stream As %Stream.Object = request

    if '$isObject(stream)
    {
      // на случай MIME attachments
      #dim index As %Integer = %request.NextMimeData("")
      set stream = $select(index="":"", 1:%request.GetMimeData(index))
    }

    if $isObject(stream)
    {
      #dim fault As %SOAP.Fault = ##class(smev.JcpUtils).verifySignatureOnPreSoap(stream)
      if $isObject(fault) set ..SoapFault = fault
    }
  }
}

Похожие товары

Kaspersky Security для виртуальных и облачных сред - Enterprise Ed., Server. 50-99 VirtualServer 2 y

Право на использование (электронно)

Код товара: 629437

Артикул: KL4253RAQDS

Kaspersky Security для виртуальных и облачных сред, Server. 20-24 VirtualServer 1 year Base

Право на использование (электронно)

Код товара: 629483

Артикул: KL4255RANFS

Sigur Автопарк

Модуль

Код товара: 573258

Артикул: Доп. модуль “Автопарк” ПО “Sigur”

Отзывы ↓

Краткое описание

Все характеристики

Характеристики

Основные характеристики
Категория Организация
Назначение Система безопасности
ВерсияКриптоПро JavaTLS версии 2.0
Платформа Десктоп, Сервер
Форма поставкиКонверт
Количество лицензируемых объектов1
Входит в единый реестр российских программ для ЭВМ и БДДа
Вес брутто10 г
Читайте также:  Электронные документы как доказательства в судебном процессе
Оцените статью
ЭЦП Эксперт
Добавить комментарий