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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ch1raQQQ  
#1 Оставлено : 6 сентября 2021 г. 22:14:01(UTC)
ch1raQQQ

Статус: Новичок

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

Столкнулся со следующей проблемой:

Signer = CreateObject("CAdESCOM.CPSigner")
Signer.Certificate = Certificate


Выдаёт следующее исключение:

System.Runtime.InteropServices.COMException: "Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))"

Данная проблема поднималась в этом обсуждении (//www.cryptopro.ru/forum2/default.aspx?g=posts&t=12159), но решена она не была.

Может быть кто-то знает, как это исправить?

Отредактировано пользователем 6 сентября 2021 г. 22:15:22(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 6 сентября 2021 г. 22:15:42(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,577
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Здравствуйте.

c#?
Полностью код\проект, который воспроизодит проблему?
..
Техническую поддержку оказываем тут
Наша база знаний
Offline ch1raQQQ  
#3 Оставлено : 6 сентября 2021 г. 22:23:53(UTC)
ch1raQQQ

Статус: Новичок

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

Автор: Андрей * Перейти к цитате
Здравствуйте.

c#?
Полностью код\проект, который воспроизодит проблему?
..


Visual Basic

Вроде бы ничего необычного, переделывал проект под библиотеку CAdESCOM по примерам с этого сайта.

' Пример подписи и проверки подписи всего xml документа.
Imports System
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.Xml

Module Module1
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_MY_STORE = "My"
Const CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2
Const CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1
Const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED = 0
Const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING = 1
Const XmlDsigGost3410UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"
Const XmlDsigGost3411UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr3411"
Const XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"
Const XmlDsigGost3411Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"

<STAThread()>
Sub Main(ByVal args As String())
' Разбираем аргументы
If (args.Length < 1) Then
Console.WriteLine("ConsoleXMLDSigApp2.exe <CertificateSerialNumberWithoutBlanks>")
Return
End If

run(args(0))

Console.ReadKey()
End Sub

Function GetCertificateBySubjectName(certSerialNumber)
Dim Store = CreateObject("CAdESCOM.Store")
Store.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)

Dim Cert
Dim Certificates = Nothing

For Each Cert In Store.Certificates
If Cert.SerialNumber = certSerialNumber Then
Certificates = Cert
Exit For
End If
Next

If Store.Certificates.Count = 0 Then
Console.WriteLine("Certificate not found: " + certSerialNumber)
Exit Function
End If
Dim Certificate = Store.Certificates.Item(1)
Store.Close()
Return Certificate
End Function

Function SignCreate(Certificate, dataToSign)

' Создаем объект CAdESCOM.CPSigner
Dim Signer = CreateObject("CAdESCOM.CPSigner")

Signer.Certificate = Certificate

' Создаем объект CAdESCOM.SignedXML
Dim SignedXML = CreateObject("CAdESCOM.SignedXML")
SignedXML.Content = dataToSign

' Указываем тип подписи - в данном случае вложенная
SignedXML.SignatureType = CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED

' Указываем алгоритм подписи
SignedXML.SignatureMethod = XmlDsigGost3410Url

' Указываем алгоритм хэширования
SignedXML.DigestMethod = XmlDsigGost3411Url

Dim SignedMessage As String = ""
Try
SignedMessage = SignedXML.Sign(Signer)
Catch ex As Exception
Console.WriteLine("Failed to create signature. Error: " + ex.Message)
Exit Function
End Try

Return SignedMessage
End Function

Function Verify(SignedMessage)

' Создаем объект CAdESCOM.SignedXML
Dim SignedXML = CreateObject("CAdESCOM.SignedXML")

Try
SignedXML.Verify(SignedMessage)
Catch ex As Exception
Console.WriteLine("Failed to verify signature. Error: " + ex.Message)
Return False
End Try

Return True
End Function

Function run(CertName As String)
If ("" = CertName) Then
Console.WriteLine("Введите имя сертификата (CN).")
Exit Function
End If

' Ищем сертификат для подписи
Dim Certificate = GetCertificateBySubjectName(CertName)

Dim Content As String = SourceDocument

Dim signedMessage = SignCreate(Certificate, Content)

Console.WriteLine(signedMessage)

Dim verifyResult = Verify(signedMessage)
If (verifyResult) Then
Console.WriteLine("Signature verified")
End If
End Function

' Тестовый документ для подписи / проверки.
Dim SourceDocument As String = "" &
"<ЭДПФР xmlns = ""http://пф.рф/СЗВ-ТД/2020-09-26"" xmlns:АФ5=""http://пф.рф/АФ/2018-12-07"" xmlns:УТ2=""http://пф.рф/УТ/2017-08-21"">" &
" <СЗВ-ТД>" &
" <Работодатель>" &
" <УТ2:РегНомер>099-099-154154</УТ2:РегНомер>" &
" <НаименованиеОрганизации>_тест_Демо организация 1</НаименованиеОрганизации>" &
" <УТ2:ИНН>9676756170</УТ2:ИНН>" &
" <УТ2:КПП>999901001</УТ2:КПП>" &
" </Работодатель>" &
" <ЗЛ>" &
" <УТ2:ФИО>" &
" <УТ2:Фамилия>Иванов</УТ2:Фамилия>" &
" <УТ2:Имя>Иван</УТ2:Имя>" &
" <УТ2:Отчество>Иванович</УТ2:Отчество>" &
" </УТ2:ФИО>" &
" <ДатаРождения>1990-01-01</ДатаРождения>" &
" <УТ2:СНИЛС>175-577-998 44</УТ2:СНИЛС>" &
" <ТрудоваяДеятельность>" &
" <Мероприятие>" &
" <UUID>cdb7cac6-31e1-4d3d-bb84-6a70be6bccc6</UUID>" &
" <Дата>2021-08-13</Дата>" &
" <Вид>1</Вид>" &
" <Сведения>Прием на работу</Сведения>" &
" <Должность>Сотрудник</Должность>" &
" <ВидПР>Страховые агенты</ВидПР>" &
" <КодВФпоОКЗ>3321.8</КодВФпоОКЗ>" &
" <Основание>" &
" <Наименование>Приказ</Наименование>" &
" <Дата>2021-08-13</Дата>" &
" <Номер>102</Номер>" &
" <Серия>102</Серия>" &
" </Основание>" &
" </Мероприятие>" &
" </ТрудоваяДеятельность>" &
" </ЗЛ>" &
" <ДатаЗаполнения>2021-08-16</ДатаЗаполнения>" &
" <Руководитель>" &
" <УТ2:ФИО>" &
" <УТ2:Фамилия>Евсеев</УТ2:Фамилия>" &
" <УТ2:Имя>Юстин</УТ2:Имя>" &
" <УТ2:Отчество>Тестович</УТ2:Отчество>" &
" </УТ2:ФИО>" &
" <УТ2:Должность>бухгалтер</УТ2:Должность>" &
" </Руководитель>" &
" </СЗВ-ТД>" &
" <СлужебнаяИнформация>" &
" <АФ5:GUID>cea9cb8b-9080-4d14-8ab2-7540cbcc1a6d</АФ5:GUID>" &
" <АФ5:ДатаВремя>2021-08-16T15:52:01+03:00</АФ5:ДатаВремя>" &
" </СлужебнаяИнформация>" &
"</ЭДПФР>"

End Module
Offline Андрей *  
#4 Оставлено : 6 сентября 2021 г. 23:20:44(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,577
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Тип подписи какой требуется cms\xmldsig?

КриптоПРО.Net какая версия?
в SDK смотрели примеры по vb?
\Program Files (x86)\Crypto Pro\.NET SDK\Examples\simple.zip
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 6 сентября 2021 г. 23:23:02(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,577
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Пример выше - это xmldsig для 2001 ГОСТ...
Цитата:

Const XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"

Вы же используете 2012 ГОСТ сейчас?
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#6 Оставлено : 7 сентября 2021 г. 10:11:29(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,351
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 318 раз в 300 постах
Добавлю, что тестировать лучше на документе попроще чем ЭДПФР с кириллическими тегами, пространствами имени и префиксами. Если мне не изменяет память, обсуждали с год назад. Суть проблемы: плагин вызывает зарубежную библиотеку парсинга xml, которая кириллицу считает недопустимыми символами для чего-то из этого и подписание такого документа вываливается в ошибку.

В зарубежном стандарте, на который ссылается та библиотека прямо сказано, что стандарт не регламентирует другие символы - дескать, принимайте свой стандарт, если вам нужен национальный алфавит в таких местах. Соответственно нужен свой вариант библиотеки. Такой стандарт насколько знаю не принят. Потому если нужен именно ЭДПФР, то все это может вообще оказаться тупиковым решением. Надеюсь, сотрудники КриптоПро поправят меня если проблема уже решена в новых версиях плагина.
thanks 1 пользователь поблагодарил two_oceans за этот пост.
Андрей * оставлено 07.09.2021(UTC)
Offline ch1raQQQ  
#7 Оставлено : 7 сентября 2021 г. 12:46:00(UTC)
ch1raQQQ

Статус: Новичок

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

Автор: two_oceans Перейти к цитате
Добавлю, что тестировать лучше на документе попроще чем ЭДПФР с кириллическими тегами, пространствами имени и префиксами. Если мне не изменяет память, обсуждали с год назад. Суть проблемы: плагин вызывает зарубежную библиотеку парсинга xml, которая кириллицу считает недопустимыми символами для чего-то из этого и подписание такого документа вываливается в ошибку.

В зарубежном стандарте, на который ссылается та библиотека прямо сказано, что стандарт не регламентирует другие символы - дескать, принимайте свой стандарт, если вам нужен национальный алфавит в таких местах. Соответственно нужен свой вариант библиотеки. Такой стандарт насколько знаю не принят. Потому если нужен именно ЭДПФР, то все это может вообще оказаться тупиковым решением. Надеюсь, сотрудники КриптоПро поправят меня если проблема уже решена в новых версиях плагина.


Хорошо, учту замечания, спасибо.
Просто, на данном этапе, основной проблемой является то, что не получается присвоить сертификат, хотя я делал всё как в примерах на VB.

Автор: Андрей * Перейти к цитате
Тип подписи какой требуется cms\xmldsig?

КриптоПРО.Net какая версия?
в SDK смотрели примеры по vb?
\Program Files (x86)\Crypto Pro\.NET SDK\Examples\simple.zip


xmldsig 2012 ГОСТ нужен, ну я попозже это исправлю.
Использую КриптоПро CADESCOM (версия 2.0.14071)
Примеры брал тут: http://cpdn.cryptopro.ru...es/cadescom-samples.html
Папки SDK у меня в принципе нет(

Отредактировано пользователем 7 сентября 2021 г. 12:47:44(UTC)  | Причина: Не указана

Offline Андрей *  
#8 Оставлено : 7 сентября 2021 г. 12:51:31(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,577
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Автор: ch1raQQQ Перейти к цитате


xmldsig 2012 ГОСТ нужен, ну я попозже это исправлю.
Использую КриптоПро CADESCOM (версия 2.0.14071)
Примеры брал тут: http://cpdn.cryptopro.ru...es/cadescom-samples.html
Папки SDK у меня в принципе нет(


Потому что КриптоПро .NET SDK необходимо поставить...

https://www.cryptopro.ru/products/net

https://www.cryptopro.ru/products/net/downloads
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.