Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
detached - это тоже PKCS#7. |
|
|
|
|
|
|
Статус: Администратор
Группы: Администраторы, Участники Зарегистрирован: 13.12.2007(UTC) Сообщений: 111 Откуда: Крипто-Про
Поблагодарили: 33 раз в 10 постах
|
1. В моем ответе про atached не было слов 2. Проверка подписи в формате PKCS#7 (CMS) attached/detaced производится по общему алгоритму 3. Присланным "Стандартным" кодом вы не проверите PKCS#7 4. Хотите подробнее, смотрите http://www.ietf.org/rfc/rfc3852.txt
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.04.2011(UTC) Сообщений: 29 Откуда: Москва
|
1. Что тогда проверяется "Стандартным" кодом? Может быть попросить наших клиентов по-другому подписывать данные, чтобы можно было проверять стандартным кодом? 2. Как вы определяете формат подписи (PKCS#7)? 3. Я попытался проверить подпись кодом из samples_src.jar/CMS_samples/CMSVerify.java, но получил на коде Цитата: final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer); //буффер - подпись byte[] final ContentInfo all = new ContentInfo(); all.decode(asnBuf);
следующее Цитата: com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0: Tag match failed: expected [UNIVERSAL 16], parsed [APPLICATION 13] at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:49) at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:65) at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:55) at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15) at ru.rjd.ws.dsi.util.CriptoProUtils.CMSVerify(CriptoProUtils.java:165) at ru.rjd.ws.dsi.util.CriptoProUtils.verifySignature(CriptoProUtils.java:64) at ru.rjd.ws.dsi.endpoints.DsiEndpoint.processAttachment(DsiEndpoint.java:357) at ru.rjd.ws.dsi.endpoints.DsiEndpoint.importDoc(DsiEndpoint.java:254) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:132) at org.springframework.ws.server.endpoint.adapter.MarshallingMethodEndpointAdapter.invokeInternal(MarshallingMethodEndpointAdapter.java:140) at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53) at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:230) at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:172) at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88) at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:57) at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:222) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
сильно не вникал, но signature.sig - в base64, есть в коде обратное декодирование? Цитата: byte[] data = Array.readFile(document); sig.update(data);
return sig.verify(Array.readFile(signature)); //возвращает false
Отредактировано пользователем 25 ноября 2011 г. 15:46:37(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.04.2011(UTC) Сообщений: 29 Откуда: Москва
|
Последнюю проблему я решил, декодировав подпись из BASE64. Подпись с грехом пополам мне верифицировать удалось с помощью примеров из CMS. Но напрашивается вопрос, может это как-то описать в руководстве программиста? Да и комментарии не помешали бы в примерах... Остались у меня всё-таки два вопроса: 1. Что тогда проверяется "Стандартным" кодом? Может быть попросить наших клиентов по-другому подписывать данные, чтобы можно было проверять стандартным кодом? 2. Как вы определяете формат подписи (PKCS#7)? Как в рантайме определить формат подписи и от этого отталкиваться при верификации? Или необходимо выставить клиентам жесткие требования по формату подписи и никаких рантаймов? Андрей * написал:сильно не вникал, но signature.sig - в base64, есть в коде обратное декодирование? Спасибо, как раз сам это сделал Отредактировано пользователем 25 ноября 2011 г. 15:46:28(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Valky написал:Последнюю проблему я решил, декодировав подпись из BASE64. Подпись с грехом пополам мне верифицировать удалось с помощью примеров из CMS. Но напрашивается вопрос, может это как-то описать в руководстве программиста? Да и комментарии не помешали бы в примерах... Остались у меня всё-таки два вопроса: 1. Что тогда проверяется "Стандартным" кодом? Может быть попросить наших клиентов по-другому подписывать данные, чтобы можно было проверять стандартным кодом? 2. Как вы определяете формат подписи (PKCS#7)? Как в рантайме определить формат подписи и от этого отталкиваться при верификации? Или необходимо выставить клиентам жесткие требования по формату подписи и никаких рантаймов? Андрей * написал:сильно не вникал, но signature.sig - в base64, есть в коде обратное декодирование? Спасибо, как раз сам это сделал имхо: Цитата: необходимо выставить клиентам жесткие требования по формату подписи и никаких рантаймов? или реализовать проверку на тип подписи + определять "наличие base64-кодирования" :) |
|
|
|
|
|
|
Статус: Администратор
Группы: Администраторы, Участники Зарегистрирован: 13.12.2007(UTC) Сообщений: 111 Откуда: Крипто-Про
Поблагодарили: 33 раз в 10 постах
|
>>> 1. Что тогда проверяется "Стандартным" кодом? Может быть попросить наших клиентов по-другому подписывать данные, чтобы можно было проверять стандартным кодом?
Проверятется значение ЭЦП, представленоое в виде 64 байт с использование открытого ключа, выдранного из сертификата в соответствии с ГОСТ Р34.10-2001 Можно попросить, но CMS (PKCS#7) это тоже стандарт на формат ЭЦП и именно он используется для подписи, т.к. из "обычной" подписи у вас нет никаой другой информации, кроме как "целостность данных не изменена", а в другом варианте вы получаете, целостность, кто подписал, когда подписал, действителен ли сертификат, не отозван ли он, кем выдан (доверенным УЦ или нет).
2. Как вы определяете формат подписи (PKCS#7)? Как в рантайме определить формат подписи и от этого отталкиваться при верификации? Или необходимо выставить клиентам жесткие требования по формату подписи и никаких рантаймов?
Необходимо выставлять требования, вам в любом случае на вход могут подать что угодно.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.04.2011(UTC) Сообщений: 29 Откуда: Москва
|
Ок, тогда последний вопрос наверное. Достаточно ли выдвинуть следующее требование: "предоставить цифровую подпись в формате PKCS#7 detached, кодированную в BASE64"? Или следует еще что-то указать?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Valky написал:Ок, тогда последний вопрос наверное. Достаточно ли выдвинуть следующее требование: "предоставить цифровую подпись в формате PKCS#7 detached, кодированную в BASE64"? Или следует еще что-то указать? достаточно ;) p.s. + цепочка сертификации (сертификат автора, ЦС\УЦ) Отредактировано пользователем 26 ноября 2011 г. 6:48:06(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.04.2011(UTC) Сообщений: 29 Откуда: Москва
|
Всем спасибо за помощь, вроде всё работает=)
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close