Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
До keyStore.load я уже сам додумался :) Теперь следующий шаг
дек 20, 2012 5:06:44 PM ru.CryptoPro.JCP.tools.Starter check INFO: Loading JCP 1.0.53 дек 20, 2012 5:06:44 PM ru.CryptoPro.JCP.tools.Starter check INFO: JCP loaded. Exception in thread "main" java.lang.ClassCastException: content[0] is not a valid X509Data type at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMX509Data.<init>(DOMX509Data.java:68) at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMKeyInfoFactory.newX509Data(DOMKeyInfoFactory.java:88) at test.smev.main.main(main.java:307)
на коде KeyInfoFactory kif = fac.getKeyInfoFactory(); X509Data x509d = kif.newX509Data(Collections.singletonList((X509Certificate) cert));
Посмотрел код, вроде всё прозрачно, передается параметр с содержимым (X509Certificate) cert), но instance of X509Certificate в DOMX509Data.class в public DOMX509Data(List<?> content) line 68 почему то не прокатывает?!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 673 постах
|
Сертификат точно есть в хранилище? По умолчанию, если генерили контейнер в панели jcp, то там будет лежать запрос на серитфикат, а сам сертификат после получения надо добавлять туда отдельно. Либо сертификат читайте из файла, а не делая getCertificate(). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
я генерил сертификат на сайте по ссылке, что Вы мне написали :) Устанавливал КриптоПро JCP по инструкции, там написано, что в пуске программы должен ярлык какой то появиться, но у меня не появился, хотя права админские. Наверно эта самая панель и запускается через этот ярлык? Еще у меня в панели управления есть КриптоПро CSP. Именно там я и создавал носитель и именно туда поместился сгенерированный на сайте сертификат. На текущий момент есть контейнер и в нем сгенерированный сертификат Maxim, у которого есть корневой сертификат Test Center CRYPTO-PRO в пути сертификации. Пользователь bankir1980 прикрепил следующие файлы: cert.jpg (112kb) загружен 40 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 673 постах
|
Вы скачали папку с дистрибутивом jcp. В папке lib есть скрипт ControlPane.bat. Выполните в папке cmd ControlPane path_to_jre откроется панель jcp, в ней есть вкладка со списком контейнеров (Контейнеры и хранилища сертификатов), тут можно открыть контейнер, произвести установку сертификата и др. Ради эксперимента попробуйте сохранить сертификат в файл (из csp), и получать его в примере из файла, а не путем getCertificate. Отредактировано пользователем 20 декабря 2012 г. 16:56:20(UTC)
| Причина: Не указана Пользователь Евгений Афанасьев прикрепил следующие файлы: pic.jpg (77kb) загружен 1,576 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
afev, вроде что-то получилось (портал выдает ошибку, что сертификат недоверенный). Спасибо огромное.
Осталось только выяснить, что нужно сделать, чтобы сертификат работал со СМЭВ :) Полагаю нужно обратиться к кому-то из списка авторизованных удостоверяющих центров для работы с гос. порталами, в контейнере JCP создать контейнер, сохранить запрос на сертификат, отправить в УЦ, они пришлют сертификат, который нужно будет подгрузить в этот же контейнер?
К кому можно обратиться в крипто-про по поводу лицензии на JCP и по поводу услуги генерации сертификата (Крипто Про есть в реестре доверенных УЦ для работы с гос. порталами)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 673 постах
|
|
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Возвращаюсь к нашим баранам. Что нового. Ключи на флэшке, сертификат получен и загружен в контейнер. При отправке запроса, подписанного кодом из приведенного примера в блоге, возвращается ошибка
SMEV-200003: При обработке ответа произошла ошибка: Неверная ЭП сообщения
Прислали пример валидного подписанного XML запроса. Скопировал его в исходный файл без информации wsse:Security, подписал. Сравнил подписанный файл и тот, что прислали. Совпадает всё, кроме значений DigestValue и SignatureValue.
Так же саппорт госуслуг написал.
"Ошибка ""Неверная ЭП сообщения"" означает, что: 1. Содержимое подписываемого тега изменено после подписания. 2. Используемые ОИВом библиотеки инвертируют подпись. В этом случае необходимо побитово инвертировать подпись перед внесением в XML.
По поводу пункта 1. После подписи изменения делаются только в части Security, в Body никаких изменений не делается. Еще файл сохраняется с перекодировкой в UTF-8 таким образом doc - это объект Document над которым были манипуляции по наложению ЭЦП.
DOMSource domSource = new DOMSource(doc); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer; try { transformer = tf.newTransformer(); transformer.transform(domSource, result); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } ByteArrayInputStream inStream; try { inStream = new ByteArrayInputStream(writer.toString().getBytes("UTF-8")); signedMessage = getSOAPMessageFromInputStream(inStream); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; }
Учитывая, что исходный xml файл так же в UTF-8, не думаю, что перекодировка что-то повредила. Или я не прав?
По второму пункту вообще не могу понять, как и что конкретно нужно инвертировать...
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 673 постах
|
Инвертировать подпись, значит прочитать ее с конца. Например, XMLDSigRI.jar использует алгоритм GOST3411withGOST3410EL для проверки ЭЦП в исходном виде, а CryptoProSignature - "разворачивает". Проверяется ли подпись локально, с помощью JCP? Пробовали проверять doc после присоединения ЭЦП без сохранения в файл (я предполагаю, что документ читается из файла и проверяется)? Присланный подписанный пример проверяется в JCP?
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
>Проверяется ли подпись локально, с помощью JCP? глупый вопрос. А как это сделать? :)
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
>Пробовали проверять doc после присоединения ЭЦП без сохранения в файл (я предполагаю, что документ читается из файла и проверяется)?
док без подписи читается из файла и подписывается. Проверок никаких не делаю. Потому и спросил, как это сделать :)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close