Подпись данных
Добрый день. Подскажите, можно ли подписать данные (например XML) сертификатом ГОСТ на ключе ЕГАИС используя библиотеку PKCS#11 без использования КриптоПро?
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Рутокен → Техническая поддержка разработчиков → Подпись данных
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Добрый день. Подскажите, можно ли подписать данные (например XML) сертификатом ГОСТ на ключе ЕГАИС используя библиотеку PKCS#11 без использования КриптоПро?
Добрый день, Алексей39.
Да, можно например нашем центром сертификации.
Добрый день, Алексей39.
Да, можно например нашем центром сертификации.
Супер, отличная ссылка, не знал о таком функционале. Но меня больше интересовало могу ли я это делать самостоятельно из кода на C#. Я скачал примеры RutokenPkcs11Interop.Samples и не могу понять каким из примеров я должен воспользоваться, все которые я пробовал заканчиваются на ошибке: List<ObjectHandle> privateKeys = session.FindAllObjects(RsaPrivateKeyAttributes);
Errors.Check("No private keys found", privateKeys.Count > 0);
Алексей39, добрый день.
Вам необходимо использовать примеры, в названии которых есть GOST34.10-2012-256
Если на токене только ГОСТ ключи, то вот эта строчка FindAllObjects(RsaPrivateKeyAttributes) вернет ошибку. Так как ищет RSA ключ.
Так же в шаблоне поиска ключа необходимо проверить, что там нет жестко указанных ID ключей. Иначе ваши ключи так же не будут найдены.
Нашел, разобрался, подписал. Спасибо! Подскажите еще саму малость, метод session.FindAllObjects(...) возвращает массив сертификатов (ГОСТ и RSA), каким атрибутом я могу ограничить что бы возвращал только ГОСТ? И подскажите как можно обратиться для чтения к полям сертификата, например прочитать поле "CN" или только можно получить всю информацию в текстовом виде session.GetCertificateInfoText(cert)?
Алексей39, добрый день.
1. Для поиска ключей ГОСТ попробуйте в шаблон поиска ключей и сертификатов добавить вот такой атрибут:
// Тип ключа - ГОСТ Р 34.10-2012(256)
new ObjectAttribute(CKA.CKA_KEY_TYPE, (uint) Extended_CKK.CKK_GOSTR3410),
2. у нас подобного функционала не реализовано. Либо использовать существующую функцию получения информации о сертификате. Либо попробовать написать что-то свое.
Добрый день.
Атрибут CKK_GOSTR3410 почему-то не помогает, перепробовал все варианты, вообще перестает находить сертификаты. В самом сертификате ГОСТ Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit), в целом не страшно исходя из второго ответа придется по тексту пробежаться, от туда достану.
Можно еще поинтересоваться в продолжении топика https://forum.rutoken.ru/topic/3665/, вроде как токен может подписывать в формате CAdES BES, не могу найти примера.
Можете показать шаблон поиска ключа? Такой атрибут, как написал, используется в примере на удаление ключа и там он работает.
Для C# есть только пример на CMS(pkcs7) подпись: https://github.com/AktivCo/RutokenPkcs1 … 0-2012-256
new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE),
new ObjectAttribute(CKA.CKA_TOKEN, true),
new ObjectAttribute(CKA.CKA_PRIVATE, false),
new ObjectAttribute(CKA.CKA_CERTIFICATE_TYPE, CKC.CKC_X_509),
new ObjectAttribute(CKA.CKA_KEY_TYPE, (uint) Extended_CKK.CKK_GOSTR3410)
Использую из примера: PKIExtensions.GetCertificateInfo-GOST34.10-2012-256
Нет, найти сертификат с таким атрибутом не получится.
Если необходимо найти именно ГОСТ сертификат, то необходимо найти ГОСТ ключ по шаблону с таким атрибутом.
Взять из этого ключа CKA_ID и потом уже искать сертификат с нужным CKA_ID.
Ну помогите еще немного. В документации разработчика сказано что "Чтобы сформировать CAdES-BES подпись, опциям addEssCert и addSignTime требуется присвоить значение true." Метод Sing на Java из примера https://aktivco.github.io/rutoken-plugin-demo/ действительно получает последним параметром опции: plugin.pluginObject.sign(ui.device(), ui.certificate(), ui.getContent(this.container), dataFormat, options). Проблема в том что на C# методы Sign и PKCS7Sign таких опций не получают.
C помощью "обертки" pkcs11 для C# так не получится сделать.
Можете взять "сырую" подпись методом Sign, а CAdES-BES конверт собрать с помощью https://www.bouncycastle.org/csharp/
Понял. Спасибо за консультации.
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Рутокен → Техническая поддержка разработчиков → Подпись данных