Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline avorobev  
#1 Оставлено : 19 апреля 2012 г. 22:52:23(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

Добрый день!

В нашем проекте стоит задача создать сервис по подписыванию PDF документов в соответствии с Российским законодательством. Насколько я понимаю, это означает соответствие стандартам:
• ГОСТ Р 34.10-2001 – Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
• ГОСТ Р 34.11-94 – Информационная технология. Криптографическая защита информации. Функция хэширования.

Я протестировал код из примера Simple35\Pdf\Sign.cs
При этом возник ряд вопросов.

1) В примере нигде явно не используются классы Sharpei. Означает ли это, что библиотека в примере не используется? Означает ли это, что не используются алгоритмы 34.11-94 для создания хеша и 34.10-2001 для создания подписи? Нужно ли для использования этих алгоритмов явно использовать классы и методы Sharpei?

2) Во время работы примера, при выполнении строчки кода
Код:
signedCms.ComputeSignature(cmsSigner, false);

появилось окошко, предлагающее ввести пароль для доступа к приватному ключу. Но нам необходимо создать сервис, который будет подписывать документы автоматически, никто вручную вводить ничего не будет. Соответственно вопрос - можно ли задавать пароль в коде?

Отредактировано пользователем 19 апреля 2012 г. 23:13:15(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 19 апреля 2012 г. 23:02:23(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
В примере используется signedCms, который в свою очередь вызывает криптопровайдер, прописанный в используемом сертификате.
Пароль (пин) проще всего запомнить средствами КриптоПро CSP или не задавать вовсе.
Программно конечно можно тоже.
Знания в базе знаний, поддержка в техподдержке
Offline avorobev  
#3 Оставлено : 19 апреля 2012 г. 23:14:08(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

Спасибо.

Возник еще один вопрос.
В тесте для подписания PDF документа использовался тестовый сертификат, полученный на вашем УЦ.
Я открыл подписанный документ в Acrobat Reader на том же компьютере с установленными КриптоПро CSP и КриптоПро PDF. Acrobat Reader провалидировал подпись и сказал, что она действительна.
После этого я перенес подписанный документ на другую машину, где ничего не установлено кроме Acrobat Reader. Acrobat Reader сказал, что не может провалидировать подпись.
Почему так произошло? Из-за того, что сертификат тестовый? Смогут ли наши клиенты проверить подпись документов при подписании реальным сертификатом после того, как мы запустим наш сервис?
Offline Максим Коллегин  
#4 Оставлено : 19 апреля 2012 г. 23:35:54(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Без КриптоПро CSP и КриптоПро PDF подпись проверить не получится - Adobe "не знает" российских криптоалгоритмов.
Знания в базе знаний, поддержка в техподдержке
Offline avorobev  
#5 Оставлено : 20 апреля 2012 г. 13:55:10(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

maxdm написал:
В примере используется signedCms, который в свою очередь вызывает криптопровайдер, прописанный в используемом сертификате.

Но в этом случае получается, что библиотека КриптоПро .NET не нужна. Я удалил ее из проекта, но код все равно работает. Получается, что Microsoft CryptoAPI использует напрямую криптопровайдер КриптоПро CSP без библиотеки КриптоПро .NET?

Отредактировано пользователем 20 апреля 2012 г. 14:21:51(UTC)  | Причина: Не указана

Offline avorobev  
#6 Оставлено : 20 апреля 2012 г. 14:25:15(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

Возникла проблема при проверки подписи. После подписания файла в примере Simple35\Pdf\Sign.cs проверяю этот подписанный вайл в примере Simple35\Pdf\Verify.cs
На строчке кода
Код:
PdfPKCS7 pk = af.VerifySignature(name);

вылетает exception:

Цитата:
Org.BouncyCastle.Security.SecurityUtilityException: Signer 1.2.643.2.2.9WITH1.2.643.2.2.19 not recognised.
at Org.BouncyCastle.Security.SignerUtilities.GetSigner(String algorithm)
at iTextSharp.text.pdf.PdfPKCS7..ctor(Byte[] contentsKey, Boolean tsp)
at iTextSharp.text.pdf.PdfPKCS7..ctor(Byte[] contentsKey)
at iTextSharp.text.pdf.AcroFields.VerifySignature(String name)
at Simple35.Pdf.Verify.Main(String[] args) in C:\Projects\CryptoPro\simple35\Pdf\Verify.cs:line 68

Что не так не могу понять. Тестовый сертификат из вашего УЦ. Код примеров не менял. Однако что-то не работает. Не могли бы вы помочь разобраться?

Используются VS2010, КриптоПро CSP 3.6 R2, КриптоПро .NET (1.0.4461.3), iTextSharp (5.2.1)

Отредактировано пользователем 20 апреля 2012 г. 14:40:53(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#7 Оставлено : 20 апреля 2012 г. 14:54:24(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,926
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Вы используете iTextSharp, тот в свою очередь обращается к криптопровайдеру BouncyCastle (C#), который указанный алгоритм не поддерживает.
Посмотрите http://www.cryptopro.ru/....aspx?g=posts&t=2846 тут есть пример подписи и проверки.

Отредактировано пользователем 20 апреля 2012 г. 15:03:50(UTC)  | Причина: Не указана

Offline avorobev  
#8 Оставлено : 20 апреля 2012 г. 16:06:12(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

Эту ветку я уже читал. Если в качестве примера подписи и проверки Вы имеете в виду файл pdf_signing.cs, то его я тоже скачал. Он ничем существенным не от личается от примеров в проекте simple35. Более того, примеры в simple35 как раз написаны на основе этой дискуссии. И проверка подписи также осуществляется методом af.VerifySignature(name). Именно он и вызывает exception.
Offline Максим Коллегин  
#9 Оставлено : 20 апреля 2012 г. 16:47:16(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Нужно пропатчить itext. Мы засылали патч разработчикам, они сначала его применили, потом откатили.
Вот код патча.

Отредактировано пользователем 20 апреля 2012 г. 16:47:56(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline avorobev  
#10 Оставлено : 20 апреля 2012 г. 17:25:04(UTC)
avorobev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2012(UTC)
Сообщений: 109

maxdm написал:
Нужно пропатчить itext. Мы засылали патч разработчикам, они сначала его применили, потом откатили.
Вот код патча.

Спасибо. Наверное дело именно в этом.

Только я не очень понимаю, как этот патч поставить. Надо открыть исходники iTextSharp, добавить туда эти две строчки и перекомпилить?

Отредактировано пользователем 20 апреля 2012 г. 17:32:27(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.