Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Создание отсоединенной Cades подписи по примеру в руководстве программиста
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Здравствуйте! jcp-2.0.40035 Создаю отсоединенную подпись в формате Cades_bes, используя пример в руководстве программиста (ЖТЯИ.00102-01 96 02. Руководство программиста. JavaCSP). Файл с подписью создается, даже успешно проверяется указанным в том же примере способом. 1.PNG (8kb) загружен 29 раз(а).Но при попытке проверить данную подпись на сервере, возникает ошибка: "Произошла ошибка при проверке документа. В сообщении не найден сертификат подписи". Использовал всевозможные варианты задания формата подписи и параметров 2.PNG (19kb) загружен 18 раз(а).При создании прикрепленной подписи ситуация аналогичная Прошу указать мне, что я делаю не так. Прикрепляю свой код, логи создания и проверки подписи, файл подписи(pdf.txt, файл .bin не дает загрузить) и исходный документ. Заранее спасибо! Код Код:private static void Cades(PrivateKey privateKey, X509Certificate[] chain, String tsaUrl) throws CAdESException, IOException {
//Создание
CAdESSignature cAdESSignature = new CAdESSignature(true);
cAdESSignature.addSigner("JCP",
JCP.GOST_DIGEST_2012_256_OID,
JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
privateKey,
Arrays.asList(chain),
CAdESType.CAdES_BES,
/*tsaUrl,*/ null,
false);
byte[] data;
File file = new File("C:\\Work\\HDImageStore\\PDF\\a\\pdf.pdf");
data = Files.readAllBytes(Paths.get(file.getAbsolutePath()));
ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
cAdESSignature.open(signatureStream);
cAdESSignature.update(data);
cAdESSignature.close();
System.out.println(cAdESSignature);
byte[] cadesCMS = signatureStream.toByteArray();
OutputStream os = new FileOutputStream("pdf.bin");
signatureStream.close();
os.write(cadesCMS);
os.close();
//ПРОВЕРКА
FileInputStream cades = new FileInputStream("pdf.bin");
CAdESSignature signature = new CAdESSignature(cades, new FileInputStream(file), CAdESType.CAdES_BES);
signature.verify(Arrays.asList(chain));
}
log.txt (128kb) загружен 4 раз(а). pdf.pdf (424kb) загружен 4 раз(а). pdf.txt (1kb) загружен 3 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
Добрый день! попробуйте так: Код: ...
Certificate[] chain = keyStore.getCertificateChain(ALIAS);
X509Certificate[] xChain = new X509Certificate[chain.length];
System.arraycopy(chain, 0, xChain, 0, chain.length);
Collection<X509CertificateHolder> certHolders = new ArrayList<X509CertificateHolder>(chain.length);
for (Certificate cert : chain) {
certHolders.add(new X509CertificateHolder(cert.getEncoded()));
}
CollectionStore store = new CollectionStore(certHolders);
ByteArrayOutputStream signature = new ByteArrayOutputStream();
CAdESSignature cAdESSignature = new CAdESSignature(true);
cAdESSignature.addSigner(
...
);
cAdESSignature.open(signature);
cAdESSignature.update(data);
cAdESSignature.setCertificateStore(store);
...
Отредактировано пользователем 27 сентября 2019 г. 3:30:39(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил Санчир Момолдаев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Большое спасибо! Теперь всё проверяется. photo_2019-09-27_10-36-34.jpg (54kb) загружен 19 раз(а).Однако теперь возникает проблема при попытки подписать тот же документ подписью CAdES_X_Long_Type_1. Ошибок сразу несколько:
- java.security.GeneralSecurityException: java.security.InvalidKeyException: Алгоритм ключа не соответствует алгоритму подписи.
- ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
- Error building certification path for <данные сертификата>: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate'
- org.bouncycastle.cms.CMSAttributeTableGenerationException: The signer certificate: <Данные сертификата> must have OCSP evidence but it doesn't contain any OCSP reference(s) or service(s) is(are) unavailable. OCSP evidence is not found
Изначально думал, что проблема с доступом к ocsp службе или в её работе, т.к. cades_bes строился без указанных выше ошибок. Проверил ответ от ocsp службы с помощью утилиты ocsputil. Результат: 4.PNG (14kb) загружен 14 раз(а).В чем теперь может быть проблема - неизвестно. Прошу помощи. Заранее спасибо! log (2).txt (188kb) загружен 6 раз(а).Отредактировано пользователем 27 сентября 2019 г. 11:32:26(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,926 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Здравствуйте. 1. Провайдер Java CSP задан провайдером по умолчанию в панели управления JCP? 2. В сертификате подписанта есть ссылка на OCSP сервис? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Автор: Евгений Афанасьев Провайдер Java CSP задан провайдером по умолчанию в панели управления JCP? Стоял JCP, поменял на Java CSP, попробовал снова - ничего не изменилось. Автор: Евгений Афанасьев В сертификате подписанта есть ссылка на OCSP сервис? Тут я не совсем уверен. Snimok.PNG (233kb) загружен 15 раз(а).Слева на скриншоте - сертификат, открытый контейнере в панели управления, справа - свойства .cer этого же сертификата. Думаю, что есть. Здесь ведь находится ссылка: Цитата:FINER: Searching for extension by id 1.3.6.1.5.5.7.48.1 in certificate: <Данные сертификата> сен 27, 2019 2:33:04 PM ru.CryptoPro.AdES.tools.AdESUtility getAccessor FINER: Found: 1 OCSP url(s).
Проблема может быть в несоответствии параметров подписи в коде и в панели управления? Этих: Код:cAdESSignature.addSigner("JCP",
JCP.GOST_DIGEST_2012_256_OID,
JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
privateKey,
Arrays.asList(chain),
CAdESType.CAdES_X_Long_Type_1,
tsaUrl,
false);
И этих: 6.PNG (25kb) загружен 17 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
у вас цепочка ocsp строится по 2001 госту сам сертификат по 2012 госту tsp по 2012 госту.
попробуйте только с 2012, причем чтобы сертификат оператора ocsp был выпущен тем же ключом ЦС что и сертификат пользователя. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Автор: Санчир Момолдаев у вас цепочка ocsp строится по 2001 госту сам сертификат по 2012 госту tsp по 2012 госту.
попробуйте только с 2012, причем чтобы сертификат оператора ocsp был выпущен тем же ключом ЦС что и сертификат пользователя. Подскажите, пожалуйста, где можно задать параметры для цепочки ocsp, вроде везде стоит 2012 гост, и в коде, и в панели управления (Где Вы вообще это увидели?). Отредактировано пользователем 27 сентября 2019 г. 16:02:43(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
base64 представление в логе. там и сертификаты и ocsp и tsp ответы. адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту. если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту |
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
base64 представление в логе. там и сертификаты и ocsp и tsp ответы. адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту. если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Автор: Санчир Момолдаев base64 представление в логе. там и сертификаты и ocsp и tsp ответы. адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту. если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту Но я ведь проверял (скриншот выше) этот же сертификат с помощью ocsputil по этому же адресу службы, там ответ успешный. Думаю, что если бы дело было в службе или в сертификате - вернулась бы ошибка. Ошибаюсь?
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Создание отсоединенной Cades подписи по примеру в руководстве программиста
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close