Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Есть следующая задача :на сервере хранятся xml-файлы и надо пользователям подписывать их. Вариант в лоб: скачать файл, подписать его и снова отправить на сервер, но размер файлов большой, а каналы у заказчика узкие и от этого варианта хотелось бы уйти. Можно ли как-то сделать следующим образом: клиент отправляет запрос на сервер и подписывает его своим сертификатом, на сервере есть возможность слазить в удостоверяющий центр и получить информация по сертификату. Хватит ли этой информации, чтобы сервер смог осуществить подписывание файла за клиента? И есть ли какое-либо альтернативное решение для данной задачи?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.07.2013(UTC) Сообщений: 21 Поблагодарили: 2 раз в 2 постах
|
Если я правильно разобрался в dsig, то на сервере можно собрать signedinfo, на клиенте подписать и отправить обрато
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Не совсем понимаю, как именно его собрать.
<SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/> <Reference> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::Object)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/> <DigestValue>hs5YvifvECIAhLokXHXScGnAxLaLekOSRoWV8HERtvY=</DigestValue> </Reference> </SignedInfo>
Как сгенерить DigestValue на основе содержимого файла, и что именно и как подписывать на клиенте ?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.07.2013(UTC) Сообщений: 21 Поблагодарили: 2 раз в 2 постах
|
Советую почитать http://www.di-mgt.com.au/xmldsig.html Очень хорошо расписано, что, как и, главное, от чего берутся хэши. На сервере можешь собрать так: Цитата: <?xml version="1.0" encoding="UTF-8"?> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> <Reference URI="#object"> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue></DigestValue> </Reference> </SignedInfo> <SignatureValue></SignatureValue> <KeyInfo> <KeyValue> <X509Data><X509Certificate></X509Certificate></X509Data> </KeyInfo> <Object Id="object"> <твой xml/> </Object> </Signature>
На севере подсчитываешь хэш от канонизированной xml Цитата:<Object Id="object" xmlns="http://www.w3.org/2000/09/xmldsig#"> <твой xml/> </Object> Вставляешь в diestvalue полученный хэш и отправляешь клиенту ноду SignedInfo на подпись. Подписываешь, отправляешь обратно на сервер SignatureValue и сертификат Как то так
|
1 пользователь поблагодарил Fomich за этот пост.
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
DigestValue - это хэш-значение. Его нужно вычислить по алгоритму, указанному в элементе DigestMethod. Предварительно (до вычисления хэш-значения) подписываемый документ нужно привести к каноническому виду. А вообще, лучше начать с чтения стандарта, там все достаточно подробно расписано. http://www.w3.org/TR/xmldsig-core/
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Получилось у вас получать валидное SignatureValue на клиенте от,так понимаю, канонизированного SignedInfo?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Автор: fomenko Получилось у вас получать валидное SignatureValue на клиенте от,так понимаю, канонизированного SignedInfo? Да
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Точнее даже не от канонизированного SignedInfo, а от хеша канонизированного SignedInfo
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Можете предоставить пример Javascript-кода? или хотя бы указать,какими методами пользовались для получения хэша канонизированного SignedInfo и для получения SignatureValue?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close