Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Добрый день!
У меня стоит задача подписывать PDF документы с помощью УЭЦП. Разработка ведется на .NET. Как подписать PDF документ простой подписью, я нашел в примерах КриптоПро .NET. Собственно там это делается даже не с помощью КриптоПро .NET, а с помощью iTextSharp. Но как подписать PDF с помощью УЭЦП? Как работать с TSP и OCSP? Есть ли где-то примеры, как это сделать на .NET? Буду благодарен за любую помощь.
С уважением, Александр
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Ладно, пока ответов нет, продолжу в одностороннем порядке. :) В iTextSharp есть примеры, как подписать PDF с помощью УЭЦП. http://itextpdf.sourceforge.net/howtosign.html#signtsocspcsНо, к сожалению, iTextSharp умеет работать только с RSA и DSA криптопровайдерами. Можно конечно попытаться написать свои аналогичные классы для работы с криптопровайдером Gost3410, но и тут есть свои препятствия. Например, в одном из мест iTextSharp хочет получить параметры криптопровайдера для закрытого ключа. Но метод Gost3410CryptoServiceProvider.ExportParameters(true) возвращает exception: System.Security.Cryptography.CryptographicException was unhandled by user code Message=Bulk user key export from CSP is not supported. Source=CryptoPro.Sharpei.BaseТак что данный путь, видимо, не приведет к успеху. Отредактировано пользователем 19 июня 2012 г. 14:10:21(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Второй вариант - это взять пример подписи PDF простой подписью из примеров КриптоПро .NET (\simple35\Pdf\Sign.cs). Но попробовать заменить блок кода Код:ContentInfo contentInfo = new ContentInfo(ss.ToArray());
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(certificate);
signedCms.ComputeSignature(cmsSigner, false);
byte[] pk = signedCms.Encode();
на вычисление УЭЦП с помощью COM библиотеки cadescom.dll. И там тоже, как я понимаю, будут свои подводные камни. Но более важный вопрос, будет ли это вообще работать? Является ли такой подход правильным? Будет ли создана при этом УЭЦП и будет ли PDF правильно ею подписан? Ведь PDF должен быть подписан по стандарту PAdES, который является некоей комбинацией CAdES и XAdES применительно к PDF. Отредактировано пользователем 19 июня 2012 г. 14:03:44(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
А вообще закономерный вопрос: почему в КриптоПро .NET нет никаких классов для работы с УЭЦП? Или почему то, что уже сделано вами в продукте КриптоПро PDF нельзя оформить как библиотеку для разработчиков? Отредактировано пользователем 19 июня 2012 г. 14:54:39(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 140  Откуда: Крипто-Про Поблагодарили: 15 раз в 14 постах
|
Добрый день, Специалист занимающийся PDF сейчас в отпуске, сможет ответить в среду-чертверг.
В КриптоПро .NET специальные классы для работы с УЭЦП были бы избыточны. Работа с УЭЦП реализована через COM объекты (библиотека cadescom.dll), с которыми .NET умеет общаться.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
khomenko написал:Специалист занимающийся PDF сейчас в отпуске, сможет ответить в среду-чертверг. Ну что ж, придется подождать. Для нас это важный вопрос. khomenko написал:В КриптоПро .NET специальные классы для работы с УЭЦП были бы избыточны. Работа с УЭЦП реализована через COM объекты (библиотека cadescom.dll), с которыми .NET умеет общаться. Ну как Вам сказать, это было бы просто намного удобнее, чем работать с COM объектами. Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM. Тем более, что подобных вопросов у вас на форуме десятки. И во всех говориться, что для .NET у вас ничего такого нет. А вопрос подписания PDF с помощью УЭЦП становится все более актуальным для многих компаний, которые внедряют электронный документооборот. Я имею в виду вопрос программного подписания, а не ручного с помощью КриптоПро PDF. Спасибо за ответы. Про cadescom.dll пойду спрашивать в другую ветку. Отредактировано пользователем 19 июня 2012 г. 17:40:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 140  Откуда: Крипто-Про Поблагодарили: 15 раз в 14 постах
|
Создать УЭЦП под PDF можно с помощью библиотеки cadescom. Достаточно заменить создание подписи через SignedCms, на создание открепленной подписи через объекты cadescom. В остальном пример (\simple35\Pdf\Sign.cs) остается без изменений. Подводных камней быть не должно :)
Для использования нативных вызовов есть PInvoke. Если в КриптоПро .NET делать обертки над нативным cades, придется затащить и весь advapi, crypt32 и т.д., встают вопросы размера дистрибутива, целесообразности, полноты и т.п А так разработчик сам выбирает минимальный, необходимый набор функций, структур и пр. и реализует в своём приложении.
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
avorobev написал:Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM. Уговорите MS расширить возможности подписей формата CMS в .NET до уровня того, что можно сделать через CryptoAPI, а там и мы подтянемся. :) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
Смирнов написал:avorobev написал:Да и функционал имеющихся у вас C/C++ библиотек намного обширней, чем COM. Уговорите MS расширить возможности подписей формата CMS в .NET до уровня того, что можно сделать через CryptoAPI, а там и мы подтянемся. :) :))
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
|
khomenko написал:Создать УЭЦП под PDF можно с помощью библиотеки cadescom. Достаточно заменить создание подписи через SignedCms, на создание открепленной подписи через объекты cadescom. В остальном пример (\simple35\Pdf\Sign.cs) остается без изменений. Подводных камней быть не должно :)
Спасибо за ответ. В этом направлении я и иду. Будет ли достаточно использовать код из примера 1? http://cpdn.cryptopro.ru...escomsamplesigndata.htmlИ еще вопрос в том, будет ли это полностью соответствовать стандарту PAdES? Будет ли это аналогом усовершенствованной подписи, сделанной вручную с помощью КриптоПро PDF? Отредактировано пользователем 20 июня 2012 г. 13:36:15(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close