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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline KonstantinG  
#1 Оставлено : 8 сентября 2023 г. 11:35:34(UTC)
KonstantinG

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

Группы: Участники
Зарегистрирован: 08.09.2023(UTC)
Сообщений: 1

В сервис требуется доработка, необходимо, чтобы можно было подписать текст стандартом CAdES-X Long Type 1. Сейчас подписывается стандартом CAdES-BES (так написано в ТЗ). Однако он реализован не так как в руководстве программиста, а через некий CMS.CMSSign(byte[] data, PrivateKey key, Certificate cert, boolean detached) внутри которого вызывается CMSSignEx(byte[] data, PrivateKey key, Certificate cert, boolean detached, String digestOid, String signOid, String signAlg, String providerName) где и происходит подписание.

CAdES-X Long Type 1 реализовал по примеру в руководстве программиста:

Certificate[] certificates = keyStore.getCertificateChain(kid);
List<Certificate> chain = Arrays.asList(certificates);
CAdESSignature cadesSignature = new CAdESSignature(false);
cadesSignature.addSigner(JCP.PROVIDER_NAME, JCP.GOST_DIGEST_2012_256_OID, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID, privateKey, chain, CAdESType.CAdES_X_Long_Type_1, Configuration.TSA_DEFAULT_ADDRESS, false);
ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
cadesSignature.open(signatureStream);
cadesSignature.update(signedInputText.getText().getBytes());
cadesSignature.close();
signatureStream.close();
bytes = signatureStream.toByteArray();


В итоге возникает ошибка:
Root certificate ... is untrusted
[ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source), ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source), ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source), ru.megafon.mfactory.gostsign.service.SignService.sign(SignService.java:91), ru.megafon.mfactory.gostsign.controller.Controller.sign(Controller.java:28), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method), sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.lang.reflect.Method.invoke(Method.java:498)

Здесь же на форме нашел инфу, что это можно починить, добавив корневой сертификат в cacerts. Но сервис развертывается на отдельном тестовом сервере, в котором у меня нет доступа к файлу cacerts и добавить туда сертификат я не могу. Можно ли как-то по-другом подписать текст этим стандартом?

Также попытался изменить CMS.CMSSign(byte[] data, PrivateKey key, Certificate cert, boolean detached), подставив следующее: CMSSignEx(data, key, cert, detached, JCP.GOST_DIGEST_2012_256_OID, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID, JCP.GOST_SIGN_DH_2012_256_NAME, JCP.PROVIDER_NAME) текст подписался успешно, но если использовать проверку подписи CAdES-X Long Type 1 описанную в руководстве программиста, то выдает ошибку verify is invalid.
Offline Евгений Афанасьев  
#2 Оставлено : 13 сентября 2023 г. 20:38:39(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Корневой сертификат должен обязательно быть в доверенном хранилище, в данном случае - в cacerts.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.