Перейти к контенту

Рекомендуемые сообщения

Добрый день!

Согласно документу http://egov.samregion.ru/external/elgov/files/c_11087/Spetsifikatsiya_trebovanij_k_mehanizmam_postanovki_i_proverki_EP.pdf можно использовать VipNet CSP для подписи XML-документов по стандарту OASIS Standard 200401. Подскажите, как это сделать (из командной строки или какую кнопку нажать).

Заранее спасибо за ответ.

Ссылка на комментарий
Поделиться на других сайтах

Сомневаюсь, что VipNet CSP это умеет в режиме командной строки, да и вовсе это не функция криптопровайдера. Эта функция прикладного уровня. То есть, в том же .NET, JAVA или на другой платформе разработки Вам нужно просто заставить использовать именно данный криптопровайдер (или данный алгоритм шифрования), чтобы прикладная библиотека сформировала подпись через VipNet CSP. Но никак не из консоли.

Ссылка на комментарий
Поделиться на других сайтах

  • 6 месяцев спустя...

Добрый день.

Изучаю ваш пример реализации логики на C#

https://github.com/Infotecs/CSharpViPNetCSP

интересует момент взаимодействия с электронным сертификатом

можно его получать с помощью контейнера ключей?

или предполагается использовать системное хранилище Windows и т.п.

Ссылка на комментарий
Поделиться на других сайтах

CryptAcquireContext

Добрый день.

Изучаю ваш пример реализации логики на C#

https://github.com/I...CSharpViPNetCSP

интересует момент взаимодействия с электронным сертификатом

можно его получать с помощью контейнера ключей?

или предполагается использовать системное хранилище Windows и т.п.

CryptAcquireContext

CryptGetUserKey

CryptGetKeyParam( .. KP_CERTIFICATE .., cb )

выделить память cb для pbCertificate

CryptGetKeyParam( .. KP_CERTIFICATE, pbCertificate, cb )

pCertContext = CertCreateCertificateContext( X509_ASN_ENCODING, pbCertificate, cb )

Ссылка на комментарий
Поделиться на других сайтах

pisarev.aa

очень помогло, спасибо.

ещё вопрос по теме подписи:

возникает ошибка `Ключ не существует` при создании сигнатуры подписи

if (!CryptoApi.CryptSignHash(handler, (int)keyNumber, null, flags, null, ref signatureSize))

смущает то, что с контейнером ключей из примера всё прекрасно работает,

а контейнер созданный утилитой `Создание запроса на сертификат` радует этой ошибкой.

завтра проверю на других версиях Vipnet Csp

Ссылка на комментарий
Поделиться на других сайтах

если в окне `Создание запроса на сертификат` в группе `параметры сертификата`

для пункта `Назначение` установить только подпись ошибка не возникает.

почему так?

Ссылка на комментарий
Поделиться на других сайтах

В контейнере может быть два ключа. Значение keyNumber в вызове должно соответствовать номеру того ключа, который есть в контейнере (1 или 2). В примере используется ключ только подписи с номером 2. Если вы начинаете использовать контейнер, в котором ключа с номером 2 нет, происходит такая ошибка. См. AT_SIGNATURE в MSDN.

Ссылка на комментарий
Поделиться на других сайтах

В контейнере может быть два ключа. Значение keyNumber в вызове должно соответствовать номеру того ключа, который есть в контейнере (1 или 2). В примере используется ключ только подписи с номером 2. Если вы начинаете использовать контейнер, в котором ключа с номером 2 нет, происходит такая ошибка. См. AT_SIGNATURE в MSDN.

с видами ключей понятно. спасибо.

мучает ещё один момент:

когда получаю из контейнера публичный ключ

методом CryptoApi.CryptExportKey(.. PublicKeyBlob..

он на совпадает с открытым ключём из сертификата этого же контейнера

в запросе на сертификат код совпадает с сертификатом.

Ссылка на комментарий
Поделиться на других сайтах

Разобрался. в сертификате хранится сжатая версия открытого ключа.

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

работающий пример реализации: https://github.com/Ranmoro/CSharpViPNetCSP

огромное спасибо всем тем, кто помогал.

на этом всё.

Ссылка на комментарий
Поделиться на других сайтах

  • 9 месяцев спустя...

Добрый день.

Помогите, пожалуйста, разобраться в следующей проблеме:

В системе установлена ViPNet CSP 3.2 (11.16035).

Подписываю XML при помощи контейнера (№1) ключей, в котором указано, что алгоритм закрытого ключа - ГОСТ Р 34.10-2001. Всё успешно.

Далее пробую подписывать XML при помощи контейнера (№2), в котором алгоритм - ГОСТ Р 34.10-2001 DH. Но получаю ошибку "Ключ не существует" при вызове метода CryptSignHash.

В обоих случаях указываю имя провайдера - Infotecs Cryptographic Service Provider, а тип провайдера - 2.

Использую пример из https://github.com/Infotecs/CSharpViPNetCSP.

При этом программа ViPNet CryptoFile успешно подписывает файл используя контейнер №2.

Что я делаю неправильно?

Ссылка на комментарий
Поделиться на других сайтах

  • 7 месяцев спустя...

У меня такая ситуация: проект на java + jna + MS Crypto API работает отлично с криптопро.

Випнет тоже реализует MS Crypto API, но при этом падает при подписании хеша. И магическим образом может инициализироваться с типом 2 и 75(на тестовой машине криптопро не стояло ни разу)

Ошибка - Error "0x80090022 Provider could not perform the action since the context was acquired as silent. Как будто випнет хочет открыть какое-то окно...что делать? Если контекст делать не тихим, то валится с ошибкой

не может найти ключ. В чём проблема? Проект на шарпе недоступен

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...

Важная информация

Продолжая пользоваться сайтом вы принимаете Условия использования.