cmex
01.06.20 — 11:16
Добрый день!
Для использования всех методов необходимо иметь УКЭП. Кто нибудь из 1С уже работал по API? Как получить тестовую УКЭП, как использовать уже имеющуюся УКЭП директора организации на Сервере, чтобы автоматом можно было подписывать? Кто сталкивался? Просветите, как процесс устроен? Слышал, про тестовый УЦ, где выдают УКЭП, но не понял как с этим работать. В общем, буду признателен за любую информацию
cmex
1 — 01.06.20 — 14:21
up
ChMikle
2 — 01.06.20 — 14:25
cmex
3 — 01.06.20 — 17:08
(2) Спасибо
timurhv
4 — 01.06.20 — 17:13
Тестовая УКЭП должна быть на имя директора (если стоит KIS, то его лучше закрыть, т.к. из-за сертификата тестового сервера не пускает дальше регистрировать):
https://ismp.wiki/index.php?title=Софт
Если выходит ошибка регистрации на тестовой площадке — писать в тех.поддержку ЧЗ.
lodger
5 — 01.06.20 — 18:46
(0)
1) есть боевой и есть тестовый контур API
2) ключ можно использовать один и тот же.
3) нет нужды использовать ключ на сервере. достаточно сотворить токен авторизации на клиенте и отдать его на сервер.
4) у токена есть время жизни, 10 часов.
cmex
6 — 02.06.20 — 13:29
(5) удалось получить сертификат в Тестовом подчиненном УЦ КриптоПро. Установил сертификат под своей учеткой в ОС
Далее пишу код
ИнтеграционныйСтенд = «int01.gismt.crpt.tech/api/v3/true-api»;
Соединение = Новый HTTPСоединение(ИнтеграционныйСтенд,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос(«/auth/key»);
HTTPОтвет = Соединение.ВызватьHTTPМетод(«GET», HTTPЗапрос);
СтрокаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Структура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
МенеджерКриптографии = Новый МенеджерКриптографии(«Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider», «», 75);
Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов();
СертификатыХранилища = Хранилище.ПолучитьВсе();
Сертификат = СертификатыХранилища[0];
ДД = ПолучитьДвоичныеДанныеИзСтроки(Структура.data);
Результат = МенеджерКриптографии.Подписать(ДД, Сертификат);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Структура);
СтрокаJSON = ЗаписьJSON.Закрыть();
Заголовки = Новый Соответствие;
Заголовки.Вставить(«Content-Type», «application/json; charset=utf-8»);
Заголовки.Вставить(«cache-control», «no-cache»);
HTTPЗапрос = Новый HTTPЗапрос(«/auth/simpleSignIn», Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Попытка
HTTPОтвет = Соединение.ВызватьHTTPМетод(«POST», HTTPЗапрос);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Вываливается ошибка «Ошибка при получении свойства сертификата (0x00000000)»
Это я не так пользуюсь менеджером или этот ключ не может в принципе подписать? Читал про какой то закрытый ключ, но его в сертификате не увидел
Вот некая инфа по сертификату
Версия «V3» Строка
ДатаНачала 01.06.2020 8:26:46 Дата
ДатаОкончания 01.09.2020 8:36:46 Дата
CN «Тестовый подчиненный УЦ ООО «КРИПТО-ПРО» ГОСТ 2012 (УЦ 2.0)» Строка
Крипто ПРО csp 4.0
cmex
7 — 02.06.20 — 13:32
(5) у меня регламент будет работать с API, то есть сервер, поэтому на клиент доступа нет. может есть какой вариант другой? я слабо представляю как устроена вся схема работы эцп
Garykom
8 — 02.06.20 — 13:37
(7) У вас два варианта или самим разбираться или кого то нанимать кто уже разобрался
cmex
9 — 02.06.20 — 13:49
(8) почему 2? я бы помог, если бы знал, форму для этого и нужен, имхо
cmex
10 — 02.06.20 — 13:58
(9) *форум
Garykom
11 — 02.06.20 — 14:23
(9) Потому что там нет ничего сложного, обычная работа, которую бесплатно хрен кто будет делать.
Мануалы есть и они достаточно вменяемы, есть форум ЧЗ если что и прочие форумы.
В т.ч. как запросы по http делать или с криптопро/сертификатами работать
Garykom
12 — 02.06.20 — 14:24
Ты конкретные вопросы задавай что не получается а не «помогите мне кто нибудь — сделайте за меня или дайте разжеванное/готовое»
cmex
13 — 02.06.20 — 14:37
(12) ок, по мануалу разобрался. подписать вроде удалось, но в ответ на post запрос прилетает {«error_message»:»Ошибка при проверке подписи»}
подписываю, кодирую и отправляю так
ДД = ПолучитьДвоичныеДанныеИзСтроки(data, КодировкаТекста.UTF8);
РезультатДД = МенеджерКриптографии.Подписать(ДД, Сертификат);
РезультатСтрока = Base64Строка(РезультатДД);
может я в двоичные данные строку исходную не так перевожу? как правильно подписать?
Garykom
14 — 02.06.20 — 14:43
Вариант синтаксиса: Данные подписи сохраняются в файл
Синтаксис:
Подписать(<ИсходныеДанные>, <ВыходныеДанные>, <Сертификат>)
Параметры:
<ИсходныеДанные> (обязательный)
Тип: Строка, ДвоичныеДанные, Поток, ПотокВПамяти, ФайловыйПоток.
Исходные данные для подписывания.
Данные могут размещаться в файле (в этом случае указывается имя файла) или представлены как ДвоичныеДанные.
<ВыходныеДанные> (обязательный)
Тип: Строка: Поток, ПотокВПамяти, ФайловыйПоток.
Имя файла или поток, в который будут выгружены подписанные данные.
<Сертификат> (необязательный)
Тип: СертификатКриптографии.
Используемый сертификат криптографии.
Если параметр не указан, то в хранилище персональных сертификатов должен быть ровно один сертификат. В противном случае генерируется исключительная ситуация.
Описание варианта метода:
Подписанные данные записываются в файл. Возвращает Неопределено.
cmex
15 — 02.06.20 — 14:46
(14) намекаете, что надо пописать строку, предварительно не переводя в ДД?
cmex
16 — 02.06.20 — 14:46
(15) *подДписать)
Garykom
17 — 02.06.20 — 14:47
(14)+ Только уверен что апи требует прикрепленную подпись?
Если нужна открепленная то стандартный менеджер не пойдет и надо нечто вроде http://catalog.mista.ru/public/1058940/
cmex
18 — 02.06.20 — 14:47
(17) из Мануала — data String + Подписанные УКЭП зарегистрированного УОТ случайные данные в base64 (ЭП
присоединенная)
Garykom
19 — 02.06.20 — 14:47
(16) А фуй знает что надо, надо разбираться
Лично я не имею представления по какому мануалу и что твоя делать
cmex
20 — 02.06.20 — 14:48
(19) v5 — Документация для партнёров по True API
Garykom
21 — 02.06.20 — 14:49
(18) Тогда попробуй имя файла входного и выходного указывать в Подписать
А затем сравнить с тем что выходит другими способами подписи того же файла.
Есть у криптопро cryptcp и csptest
Garykom
22 — 02.06.20 — 14:51
Garykom
23 — 02.06.20 — 14:55
cmex
24 — 02.06.20 — 15:30
все попробовал — не взлетает пока. чую, что близко, но пока никак
timurhv
25 — 02.06.20 — 16:27
Процедура ОбновитьТокен(ВидAPI, СледующееОповещение)
АдресМетода = «/api/v3/auth/cert/key»;
…
HTTPСервисЗапрос = Новый HTTPСоединение(СтруктураПодключения[АдресAPI],,,,,60, Новый ЗащищенноеСоединениеopenSSL());
Запрос = Новый HTTPЗапрос(АдресМетода);
Ответ = HTTPСервисЗапрос.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
…
МассивСертификатов = Новый Массив();
Если ЗначениеЗаполнено(СертификатыКлючейЭлектроннойПодписиИШифрования) Тогда
МассивСертификатов.Добавить(СертификатыКлючейЭлектроннойПодписиИШифрования);
КонецЕсли;
СтруктураОсновныхДанных = Новый Структура();
СтруктураОсновныхДанных.Вставить(«СтрокаJSON», ОтветСтруктура.data);
СтруктураОсновныхДанных.Вставить(«МассивСертификатов», МассивСертификатов);
СтруктураОсновныхДанных.Вставить(«Открепленная», Ложь);
СтруктураОсновныхДанных.Вставить(«СсылкаДокумента», «»);
СтруктураДополнительныхДанных = Новый Структура();
СтруктураДополнительныхДанных.Вставить(«СертификатПользователя», СертификатыКлючейЭлектроннойПодписиИШифрования);
СтруктураДополнительныхДанных.Вставить(«ОтветСтруктура», ОтветСтруктура);
СтруктураДополнительныхДанных.Вставить(«СледующееОповещение», СледующееОповещение);
СтруктураДополнительныхДанных.Вставить(«HTTPСервисЗапрос», HTTPСервисЗапрос);
ИнтеграцияИСМПСлужебныйКлиент.Подписать(СтруктураОсновныхДанных, Новый ОписаниеОповещения(«ОбработатьСообщения_ПриЗавершенииОперацииПодписи», ЭтотОбъект, СтруктураДополнительныхДанных));
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьСообщения_ПриЗавершенииОперацииПодписи(ПодписанныеСообщения, Контекст) Экспорт
Если ПодписанныеСообщения = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого ЭлементСообщения Из ПодписанныеСообщения Цикл
ПодписанныйФайл = ИнтеграцияИСКлиентСервер.ДвоичныеДанныеBase64(ЭлементСообщения.СвойстваПодписи.Подпись);
HTTPСервисЗапрос = Контекст.HTTPСервисЗапрос;
Тело = «{
|»»uuid»»: «»» + Контекст.ОтветСтруктура.uuid + «»»,
|»»data»»: «»» + ПодписанныйФайл + «»»
|}»;
АдресМетода = «api/v3/auth/cert/»;
HTTPЗапрос = Новый HTTPЗапрос(АдресМетода);
HTTPЗапрос.Заголовки.Вставить(«Content-Type»,»application/json;charset=UTF-8″);
HTTPЗапрос.УстановитьТелоИзСтроки(Тело);
Ответ = HTTPСервисЗапрос.ОтправитьДляОбработки(HTTPЗапрос);
КонецЦикла;
КонецПроцедуры
timurhv
26 — 02.06.20 — 16:41
(13) Base64 = Base64Строка(ДвоичныеДанные);
Base64 = СтрЗаменить(Base64, Символы.ПС, «»);
Base64 = СтрЗаменить(Base64, Символы.ВК, «»);
Символы переноса скорее забыли убрать
cmex
27 — 03.06.20 — 11:16
(26) это из какой конфы? ИнтеграцияИСКлиентСервер.ДвоичныеДанныеBase64(ЭлементСообщения.СвойстваПодписи.Подпись);
cmex
28 — 03.06.20 — 11:33
кажись разобрался, вернусь с результатом
cmex
29 — 03.06.20 — 17:18
причина была в том, что 1совский метод Подписать НЕ включает данные в подпись, как того требует ЧЗ. Для этого необходимо использовать внешнюю компоненту.
вот код рабочий. саму компоненту дернул из 11.4
МенеджерКриптографии = Новый МенеджерКриптографии(«Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider», «», 80);
Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов();
СертификатыХранилища = Хранилище.ПолучитьВсе();
Сертификат = СертификатыХранилища[0];
Макет = ПолучитьМакетНаСервере();
Адрес = ПоместитьВоВременноеХранилище(Макет);
Если ПодключитьВнешнююКомпоненту(Адрес, «XMLDSignAddInSymbolicName», ТипВнешнейКомпоненты.Native) Тогда
Попытка
ОбъектКомпоненты = Новый(«AddIn.XMLDSignAddInSymbolicName.XMLDSignAddIn»);
Если ОбъектКомпоненты = Неопределено Тогда
ВызватьИсключение НСтр(«ru = ‘Оператор Новый вернул Неопределено’»);
КонецЕсли;
Исключение
ВызватьИсключение НСтр(«ru = ‘Не удалось чуток’»);
КонецПопытки;
КонецЕсли;
ОбъектКомпоненты.ПутьККриптопровайдеру = «»;
СертификатКриптографииBase64 = СертификатКриптографииBase64(Сертификат.Выгрузить());
Попытка
SignatureValue = ОбъектКомпоненты.CMSSign(
Структура.data, //данные тип строка
СертификатКриптографииBase64, //выгруженный в ДД сертификат в base64
«», //пароль
0, //тип подписи «CAdES-BES»
Ложь, //открепленная
17, //РежимВключенияСертификатовКриптографии.ВключатьПолнуюЦепочку
0) //тип входных данных Строка;
Исключение
ВызватьИсключение НСтр(«ru = ‘Ошибка вызова метода CMSSign компоненты XMLDSig.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Подпись = Base64Значение(SignatureValue);
Структура.data = ДвоичныеДанныеBase64(Подпись);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Структура);
СтрокаJSON = ЗаписьJSON.Закрыть();
Заголовки = Новый Соответствие;
Заголовки.Вставить(«Content-Type», «application/json; charset=utf-8»);
Заголовки.Вставить(«cache-control», «no-cache»);
HTTPЗапрос = Новый HTTPЗапрос(«/auth/simpleSignIn», Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Попытка
HTTPОтвет = Соединение.ВызватьHTTPМетод(«POST», HTTPЗапрос);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если Не HTTPОтвет.КодСостояния = 200 Тогда
Сообщить(«Код состояния не равен 200»);
Возврат;
КонецЕсли;
СтрокаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Структура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Токен = Структура.token;
timurhv
30 — 04.06.20 — 10:10
(29) БСП нет разве в конфе?
cmex
31 — 04.06.20 — 13:14
(30) нет, 11.1
VitShvets
32 — 19.06.20 — 16:51
(29) Спасибо тебе, добрый человек.
#Область ПрограммныйИнтерфейс // Начинает подписание XML сообщения. // // Параметры: // ОповещенияПриЗавершении — ОписаниеОповещения — процедура, которая будет вызвана после подписания сообщения // КонвертSOAP — Строка — Шаблон подписываемого сообщения // СертификатКриптографии — СертификатКриптографии // МенеджерКриптографии — МенеджерКриптографии // Процедура НачатьПодписание(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) Экспорт Контекст = Новый Структура; Контекст.Вставить(«Режим», «РежимПодписание»); Контекст.Вставить(«ОповещенияПриЗавершении», ОповещенияПриЗавершении); Контекст.Вставить(«УстанавливатьКомпоненту», Истина); Контекст.Вставить(«КонвертSOAP», КонвертSOAP); Контекст.Вставить(«ДанныеАлгоритмаПодписания», ДанныеАлгоритмаПодписания); Контекст.Вставить(«СертификатКриптографии», СертификатКриптографии); Контекст.Вставить(«СертификатКриптографииBase64», Неопределено); Контекст.Вставить(«МенеджерКриптографии», МенеджерКриптографии); Контекст.Вставить(«ТипКриптопровайдера», Неопределено); Контекст.Вставить(«ИмяКриптопровайдера», Неопределено); СертификатКриптографии.НачатьВыгрузку( Новый ОписаниеОповещения(«НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии», ЭтотОбъект, Контекст)); КонецПроцедуры // Начинает подписание XML сообщения. // // Параметры: // ОповещенияПриЗавершении — ОписаниеОповещения — процедура, которая будет вызвана после подписания сообщения // КонвертSOAP — Строка — Шаблон подписываемого сообщения // ДанныеАлгоритмаПодписания — Структура со свойствами: // МенеджерКриптографии — МенеджерКриптографии // Процедура НачатьПроверкуПодписи(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) Экспорт СертификатКриптографииBase64 = ИнтеграцияГИСМКлиентСервер.НайтиВXML(КонвертSOAP, «wsse:BinarySecurityToken»); ДвоичныеДанные = Base64Значение(СертификатКриптографииBase64); Контекст = Новый Структура; Контекст.Вставить(«Режим», «РежимПроверка»); Контекст.Вставить(«ОповещенияПриЗавершении», ОповещенияПриЗавершении); Контекст.Вставить(«УстанавливатьКомпоненту», Истина); Контекст.Вставить(«КонвертSOAP», КонвертSOAP); Контекст.Вставить(«ДанныеАлгоритмаПодписания», ДанныеАлгоритмаПодписания); Контекст.Вставить(«СертификатКриптографии», Новый СертификатКриптографии(ДвоичныеДанные)); Контекст.Вставить(«СертификатКриптографииBase64», СертификатКриптографииBase64); Контекст.Вставить(«МенеджерКриптографии», МенеджерКриптографии); Контекст.Вставить(«ТипКриптопровайдера», Неопределено); Контекст.Вставить(«ИмяКриптопровайдера», Неопределено); НачатьПодключениеВнешнейКомпоненты( Новый ОписаниеОповещения(«ПослеПодключенияКомпоненты», ЭтотОбъект, Контекст), «ОбщийМакет.КомпонентаXMLDSIG», «ОбъектXMLDSIG», ТипВнешнейКомпоненты.Native); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции #Область УстановкаИПодключение // Начинает установку компоненты XMLDSIG. // // Параметры: // ОповещениеПриЗавершении — ОписаниеОповещения — процедура, которая будет вызвана после установки компоненты. // Процедура НачатьУстановкуКомпоненты(ОповещениеПриЗавершении = Неопределено) Экспорт ДополнительныеПараметры = Новый Структура(«ОповещениеПриЗавершении», ОповещениеПриЗавершении); НачатьУстановкуВнешнейКомпоненты( Новый ОписаниеОповещения(«УстановкаКомпоненты_Завершение», ЭтотОбъект, ДополнительныеПараметры), «ОбщийМакет.КомпонентаXMLDSIG»); КонецПроцедуры Процедура УстановкаКомпоненты_Завершение(ДополнительныеПараметры) Экспорт ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПриЗавершении, Неопределено); КонецПроцедуры Процедура ПослеУстановкиКомпоненты(Результат, Контекст) Экспорт Контекст.Вставить(«УстанавливатьКомпоненту», Ложь); НачатьПодключениеВнешнейКомпоненты( Новый ОписаниеОповещения(«ПослеПодключенияКомпоненты», ЭтотОбъект, Контекст), «ОбщийМакет.КомпонентаXMLDSIG», «ОбъектXMLDSIG», ТипВнешнейКомпоненты.Native); КонецПроцедуры Процедура ПослеПодключенияКомпоненты(Подключено, Контекст) Экспорт Если Подключено Тогда Выполнено = Ложь; Попытка ОбъектКомпоненты = Новый(«Addin.ОбъектXMLDSIG.XMLDSignAddIn»); Выполнено = Истина; Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка инициализации компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Выполнено = Ложь; КонецПопытки; Если Выполнено Тогда Контекст.Вставить(«ОбъектКомпоненты», ОбъектКомпоненты); Если Контекст.Режим = «РежимПроверка» Тогда ОповещениеПриЗавершении = Новый ОписаниеОповещения(«НачатьПроверкуПодписиСообщенияSOAP», ЭтотОбъект, Контекст); Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении); ИначеЕсли Контекст.Режим = «РежимПодписание» Тогда ОповещениеПриЗавершении = Новый ОписаниеОповещения(«НачатьПодписаниеСообщенияSOAP», ЭтотОбъект, Контекст); Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении); Иначе ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Не установлен режим работы компоненты XMLDSIG.’»)); КонецЕсли; КонецЕсли; ИначеЕсли Контекст.УстанавливатьКомпоненту Тогда ТекстВопроса = НСтр(«ru = ‘Для подписания XML необходима установка компоненты XMLDSIG. |Перейти к установке данной компоненты?’»); ПоказатьВопрос( Новый ОписаниеОповещения(«ПередУстановкойКомпоненты», ЭтотОбъект, Контекст), ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Операция невозможна. Требуется установка компоненты XMLDSIG.’»)); КонецЕсли; КонецПроцедуры Процедура ПередУстановкойКомпоненты(РезультатВопроса, Контекст) Экспорт Если НЕ РезультатВопроса = КодВозвратаДиалога.Да Тогда ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Операция невозможна. Требуется установка компоненты для HTTP-запросов.’»)); Иначе НачатьУстановкуКомпоненты(Новый ОписаниеОповещения(«ПослеУстановкиКомпоненты», ЭтотОбъект, Контекст)); КонецЕсли; КонецПроцедуры #КонецОбласти #Область Подписание Процедура НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии(ДвоичныеДанныеСертификата, Контекст) Экспорт СертификатКриптографииBase64 = ОтформатироватьСтрокуBase64(Base64Строка(ДвоичныеДанныеСертификата)); Контекст.КонвертSOAP = СтрЗаменить( Контекст.КонвертSOAP, «%BinarySecurityToken%», СертификатКриптографииBase64); Контекст.СертификатКриптографииBase64 = СертификатКриптографииBase64; НачатьПодключениеВнешнейКомпоненты( Новый ОписаниеОповещения(«ПослеПодключенияКомпоненты», ЭтотОбъект, Контекст), «ОбщийМакет.КомпонентаXMLDSIG», «ОбъектXMLDSIG», ТипВнешнейКомпоненты.Native); КонецПроцедуры Процедура НачатьПодписаниеСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; ТипКриптопровайдера = ЭлектроннаяПодписьXMLDSIGВызовСервераПовтИсп.ТипКриптопровайдераПоИмени(ИмяКриптопровайдера); Если ТипКриптопровайдера = Неопределено Тогда ЗавершитьОперациюСОшибкой( Контекст, СтрШаблон( НСтр(«ru = ‘Не удалось определить тип криптопровайдера %1′»), ИнформацияМодуляКриптографии.Имя) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецЕсли; Контекст.ТипКриптопровайдера = ТипКриптопровайдера; Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Подписание_ПослеВыполненияGetSignOIDFromCert», ЭтотОбъект, Контекст, «Подписание_ПослеВыполненияGetSignOIDFromCert_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert( ОписаниеОповещения, Контекст.СертификатКриптографииBase64); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Подписание_ПослеВыполненияGetSignOIDFromCert_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Подписание_ПослеВыполненияGetSignOIDFromCert(OIDАлгоритмаПодписи, Параметры, Контекст) Экспорт Если OIDАлгоритмаПодписи = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода GetSignOIDFromCert произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Если OIDАлгоритмаПодписи <> Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи Тогда ЗавершитьОперациюСОшибкой( Контекст, СтрШаблон( НСтр(«ru = ‘Алгоритм подписи сертификата криптографии отличается от алгоритма %1.’»), Контекст.ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи)); Иначе Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Подписание_ПослеВыполненияC14N_ПодписываемыйТег», ЭтотОбъект, Контекст, «Подписание_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовC14N( ОписаниеОповещения, Контекст.КонвертSOAP, Контекст.ДанныеАлгоритмаПодписания.XPathПодписываемыйТег); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; КонецПроцедуры Процедура Подписание_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Подписание_ПослеВыполненияC14N_ПодписываемыйТег(КаноникализированныйТекстXML, Параметры, Контекст) Экспорт Если КаноникализированныйТекстXML = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода C14N произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Подписание_ПослеВыполненияHash_ПодписываемыйТег», ЭтотОбъект, Контекст, «Подписание_ПослеВыполненияHash_ПодписываемыйТег_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовHash( ОписаниеОповещения, КаноникализированныйТекстXML, Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, Контекст.ТипКриптопровайдера); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Hash компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Подписание_ПослеВыполненияHash_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Hash компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Подписание_ПослеВыполненияHash_ПодписываемыйТег(DigestValue, Параметры, Контекст) Экспорт Если DigestValue = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода Hash произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Контекст.КонвертSOAP = СтрЗаменить(Контекст.КонвертSOAP, «%DigestValue%», DigestValue); Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Подписание_ПослеВыполненияC14N_SignedInfo», ЭтотОбъект, Контекст, «Подписание_ПослеВыполненияC14N_SignedInfo_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовC14N( ОписаниеОповещения, Контекст.КонвертSOAP, Контекст.ДанныеАлгоритмаПодписания.XPathSignedInfo); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Подписание_ПослеВыполненияC14N_SignedInfo_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Подписание_ПослеВыполненияC14N_SignedInfo(КаноникализированныйТекстXMLSignedInfo, Параметры, Контекст) Экспорт Если КаноникализированныйТекстXMLSignedInfo = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода C14N произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Попытка Контекст.ОбъектКомпоненты.НачатьВызовSign( Новый ОписаниеОповещения(«Подписание_ПослеВыполненияSign», ЭтотОбъект, Контекст), КаноникализированныйТекстXMLSignedInfo, Контекст.СертификатКриптографииBase64, Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Sign компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Подписание_ПослеВыполненияSign_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Sign компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Подписание_ПослеВыполненияSign(SignatureValue, Параметры, Контекст) Экспорт Если SignatureValue = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода Sign произошла ошибка:’»), Контекст); Возврат; КонецЕсли; КонвертSOAP = СтрЗаменить(Контекст.КонвертSOAP, «%SignatureValue%», SignatureValue); ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Успех, КонвертSOAP); КонецПроцедуры Процедура НачатьПроверкуПодписиСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; ТипКриптопровайдера = ЭлектроннаяПодписьXMLDSIGВызовСервераПовтИсп.ТипКриптопровайдераПоИмени(ИмяКриптопровайдера); Если ТипКриптопровайдера = Неопределено Тогда ЗавершитьОперациюСОшибкой( Контекст, СтрШаблон( НСтр(«ru = ‘Не удалось определить тип криптопровайдена %1′»), ИнформацияМодуляКриптографии.Имя) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецЕсли; Контекст.ТипКриптопровайдера = ТипКриптопровайдера; Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Проверка_ПослеВыполненияGetSignOIDFromCert», ЭтотОбъект, Контекст, «Проверка_ПослеВыполненияGetSignOIDFromCert_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert( ОписаниеОповещения, Контекст.СертификатКриптографииBase64); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Проверка_ПослеВыполненияGetSignOIDFromCert_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Проверка_ПослеВыполненияGetSignOIDFromCert(OIDАлгоритмаПодписи, Параметры, Контекст) Экспорт Если OIDАлгоритмаПодписи = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода GetSignOIDFromCert произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Если OIDАлгоритмаПодписи <> Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи Тогда ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Hash компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Иначе Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Проверка_ПослеВыполненияC14N_SignedInfo», ЭтотОбъект, Контекст, «Проверка_ПослеВыполненияC14N_SignedInfo_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовC14N( ОписаниеОповещения, Контекст.КонвертSOAP, Контекст.ДанныеАлгоритмаПодписания.XPathSignedInfo); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; КонецПроцедуры Процедура Проверка_ПослеВыполненияC14N_SignedInfo_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Проверка_ПослеВыполненияC14N_SignedInfo(КаноникализированныйТекстXMLSignedInfo, Параметры, Контекст) Экспорт Если КаноникализированныйТекстXMLSignedInfo = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода C14N произошла ошибка:’»), Контекст); Возврат; КонецЕсли; SignatureValue = ИнтеграцияГИСМКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, «SignatureValue»); СертификатКриптографииBase64 = ИнтеграцияГИСМКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, «wsse:BinarySecurityToken»); Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Проверка_ПослеВыполненияVerifySign», ЭтотОбъект, Контекст, «Проверка_ПослеВыполненияVerifySign_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовVerifySign( ОписаниеОповещения, КаноникализированныйТекстXMLSignedInfo, SignatureValue, СертификатКриптографииBase64, Контекст.ТипКриптопровайдера); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода VerifySign компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Проверка_ПослеВыполненияVerifySign_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода VerifySign компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Проверка_ПослеВыполненияVerifySign(ПодписьВерна, Параметры, Контекст) Экспорт Если ПодписьВерна = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода VerifySign произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Если Не ПодписьВерна Тогда ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Подпись не верна (SignatureValue не корректно.’»)); Иначе Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Проверка_ПослеВыполненияC14N_ПодписываемыйТег», ЭтотОбъект, Контекст, «Проверка_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовC14N( ОписаниеОповещения, Контекст.КонвертSOAP, Контекст.ДанныеАлгоритмаПодписания.XPathПодписываемыйТег); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; КонецПроцедуры Процедура Проверка_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода C14N компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Проверка_ПослеВыполненияC14N_ПодписываемыйТег(КаноникализированныйТекстXMLПодписываемыйТег, Параметры, Контекст) Экспорт Если КаноникализированныйТекстXMLПодписываемыйТег = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода C14N произошла ошибка:’»), Контекст); Возврат; КонецЕсли; Попытка ОписаниеОповещения = Новый ОписаниеОповещения( «Проверка_ПослеВыполненияHash_ПодписываемыйТег», ЭтотОбъект, Контекст, «Проверка_ПослеВыполненияHash_ПодписываемыйТег_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовHash( ОписаниеОповещения, КаноникализированныйТекстXMLПодписываемыйТег, Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, Контекст.ТипКриптопровайдера); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Hash компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура Проверка_ПослеВыполненияHash_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода Hash компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура Проверка_ПослеВыполненияHash_ПодписываемыйТег(HashValue, Параметры, Контекст) Экспорт Если HashValue = Неопределено Тогда НачатьПолучениеТекстаОшибки(НСтр(«ru = ‘При выполнении метода Hash произошла ошибка:’»), Контекст); Возврат; КонецЕсли; DigestValue = ИнтеграцияГИСМКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, «DigestValue»); ПодписьВерна = (DigestValue = HashValue); Если Не ПодписьВерна Тогда ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Подпись не верна (SignatureValue корректно, отличается DigestValue).’»)); Иначе ДвоичныеДанные = Base64Значение(Контекст.СертификатКриптографииBase64); ДатаПодписания = ЭлектроннаяПодписьКлиент.ДатаПодписания(ДвоичныеДанные); Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда ДатаПодписания = Неопределено; КонецЕсли; ВозвращаемоеЗначение = Новый Структура; ВозвращаемоеЗначение.Вставить(«Сертификат», Контекст.СертификатКриптографии); ВозвращаемоеЗначение.Вставить(«ДатаПодписания», ДатаПодписания); ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Успех, ВозвращаемоеЗначение); КонецЕсли; КонецПроцедуры Процедура НачатьПолучениеТекстаОшибки(НачалоОписанияТекстаОшибки, Контекст) Попытка Контекст.Вставить(«НачалоОписанияТекстаОшибки», НачалоОписанияТекстаОшибки); ОписаниеОповещения = Новый ОписаниеОповещения( «ПослеВыполненияGetLastError», ЭтотОбъект, Контекст, «ПослеВыполненияGetLastError_Ошибка», ЭтотОбъект); Контекст.ОбъектКомпоненты.НачатьВызовGetLastError(ОписаниеОповещения); Исключение ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetLastError компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры Процедура ПослеВыполненияGetLastError_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; ЗавершитьОперациюСОшибкой( Контекст, НСтр(«ru = ‘Ошибка вызова метода GetLastError компоненты XMLDSIG.’») + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПроцедуры Процедура ПослеВыполненияGetLastError(ТекстОшибки, Параметры, Контекст) Экспорт ЗавершитьОперациюСОшибкой( Контекст, Контекст.НачалоОписанияТекстаОшибки + Символы.ПС + ТекстОшибки); КонецПроцедуры #КонецОбласти #Область Прочее Процедура ЗавершитьОперациюСОшибкой(Контекст, ТекстОшибки) Экспорт ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Ошибка, ТекстОшибки); КонецПроцедуры // Форматирует строку в формате base64, удаляя символы перевода строки и возврата каретки. // // Параметры: // СтрокаBase64 — Строка — строка, которая подлежит преобразования. // // Возвращаемое значение: // Строка — строка, из которой удалены символы перевода строки и возврата каретки. // Функция ОтформатироватьСтрокуBase64(СтрокаBase64) Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, «»); Значение = СтрЗаменить(Значение, Символы.ПС, «»); Возврат Значение; КонецФункции #КонецОбласти #КонецОбласти
Dartwed1989 |
|
Статус: Участник Группы: Участники Поблагодарили: 1 раз в 1 постах |
Добрый день! В 1С организована работа с порталом СЭП(Системы электронных паспортов) для оформления ЭПТС(Электронных паспортов технических средств) через криптошлюз. «Ошибка по VIN: XW7BF3HK00S151416 Ошибка при обработке данных: {ОбщийМодуль.ЭлектроннаяПодписьСлужебный.Модуль(1556)}: Ошибка вызова метода Sign компоненты XMLDSig. Ошибка криптографии : Системная криптографическая ошибка — 0x8010006B ( =1).» Сертификат пользователя проходит все проверки, он действителен, не заблокирован и пользователь с помощью данного сертификата заходит на портал СЭП и работает в системе Диадок. Версия КриптоПро — 4.0.9. |
|
|
Dartwed1989 |
|
Статус: Участник Группы: Участники Поблагодарили: 1 раз в 1 постах |
Проблему решить удалось. Необходимо было в КриптоПро поставить галочку — «Запомнить пароль». |
|
|
Пользователи, просматривающие эту тему |
Guest (2) |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Dartwed1989 |
|
Статус: Участник Группы: Участники
Зарегистрирован: 17.05.2019(UTC) Поблагодарили: 1 раз в 1 постах |
Добрый день! В 1С организована работа с порталом СЭП(Системы электронных паспортов) для оформления ЭПТС(Электронных паспортов технических средств) через криптошлюз. «Ошибка по VIN: XW7BF3HK00S151416 Ошибка при обработке данных: {ОбщийМодуль.ЭлектроннаяПодписьСлужебный.Модуль(1556)}: Ошибка вызова метода Sign компоненты XMLDSig. Ошибка криптографии : Системная криптографическая ошибка — 0x8010006B ( =1).» Сертификат пользователя проходит все проверки, он действителен, не заблокирован и пользователь с помощью данного сертификата заходит на портал СЭП и работает в системе Диадок. Версия КриптоПро — 4.0.9. |
|
|
Dartwed1989 |
|
Статус: Участник Группы: Участники
Зарегистрирован: 17.05.2019(UTC) Поблагодарили: 1 раз в 1 постах |
Проблему решить удалось. Необходимо было в КриптоПро поставить галочку — «Запомнить пароль». |
|
|
Пользователи, просматривающие эту тему |
Guest |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
|
Настройки криптографии
|
1. Настройки криптографии |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.1. При выполнении криптооперации возникают ошибки вида: «Ошибка при получении контекста модуля криптографии». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.2. При выполнении криптооперации возникают ошибки вида: «Не удалось проверить сертификат в списке отозванных, т. к. соответствующий сервер находится в состоянии offline». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.3. При попытке авторизации на сервере банка возникают ошибки вида: «Ошибка работы с Интернет: внутренняя ошибка сервера (500)». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.4. При выполнении криптооперации возникают ошибки вида: «Код ошибки 102. Сертификат недействителен. Цепочка сертификатов обработана, но прервана на корневом сертификате, который не является доверенным». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.5. При попытке авторизации на сервере банка возникают ошибки вида: «Ошибка работы с Интернет: доступ запрещен (403)». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.6. При выполнении криптооперации возникают ошибки вида: «Сертификат, связанный с закрытой частью ключа, указывает на модуль криптографии, отличный от текущего…». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.7. Используется КриптоПро CSP 3.6, изредка «слетает» тип криптопровайдера у сертификата ЭЦП. После переустановки личного сертификата через оснастку КриптоПРО CSP все начинает работать. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.8. При выполнении криптооперации возникают ошибки вида: «…указан неправильный пароль доступа к закрытому ключу, сертификат не связан с закрытым ключом и др.». Или Ошибка при вызове метода контекста (Расшифровать): Ошибка интерфейса модуля криптографии. Модуль криптографии не может выполнить требуемое действие, т. к. контекст был получен в ограниченном режиме. Или Ошибка при вызове метода контекста (Расшифровать): Ошибка интерфейса модуля криптографии. Неверный параметр Keyset (набор ключей) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.9. На тестовой базе успешно проведен тестовый обмен ЭД, но все то же самое на рабочей базе не удается |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.10. Клиент-серверный вариант работы информационной базы, настройки криптографии и сертификатов выполнены согласно инструкции. По команде «Отправить и получить ЭД» на клиенте система запрашивает пароль к серверному сертификату. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.11. При работе через веб-браузер в момент обращения к криптопровайдеру возникает ошибка: «Расширение для работы с криптографией не подключено, операция прервана» |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ответы1. Настройки криптографии
|
zub00 |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 18.02.2022(UTC) |
Добрый день Проблема актуальна для версии Бухгалтерия предприятия, редакция 3.0 (3.0.107.37) и Управление производственным предприятием, редакция 1.3 (1.3.174.1) Клюэ КЭП получили в ФНС на ключе Jacarta, ключ не копируемый Компьютер с Windows 10 КриптоПро версии 5 КриптоПро тестирование КЭП проходит без ошибок Нормально могу зайти на сайты налог.ру и сбис эдо НО в программах 1с — возникают ошибки при проверке тесте настроек сертификата 1) Управление производственным предприятием, редакция 1.3 (1.3.174.1) пишет ошибку Код ошибки 103. Не удалось выполнить операции шифрования/расшифровки на компьютере. 2) Бухгалтерия 3.0 пишет ошибку Ошибка интерфейса модуля криптографии. Ошибка доступа. Способы устранения: Как решить проблему? на edo@1c.ru обращался, вопрос не решён 10 дней. Snimok.PNG (29kb) загружен 14 раз(а). 00.PNG (27kb) загружен 20 раз(а). |
|
|
Александр Лавник |
|
Статус: Сотрудник Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сказал «Спасибо»: 53 раз |
Здравствуйте. Вероятно, с этим токеном возникшую проблему решить нельзя. В результатах тестирования: Код:
То есть расшифровывать на этом ключе будет нельзя — на токене вырабатывается ключ обмена, а прикладное программное обеспечение использует ключ обмена для расшифрования. Предположительно, на этом токене вообще недоступен функционал создания ключа обмена. За подробностями по возможностям токена Вы можете обратиться к его производителю. |
Техническую поддержку оказываем тут |
|
|
|
zub00 |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 18.02.2022(UTC) |
Спасибо за ответ Проверка завершена успешно ошибок не обнаружено |
|
|
LITTELXP |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 04.02.2022(UTC) |
Автор: Александр Лавник Здравствуйте. Вероятно, с этим токеном возникшую проблему решить нельзя. В результатах тестирования: Код:
То есть расшифровывать на этом ключе будет нельзя — на токене вырабатывается ключ обмена, а прикладное программное обеспечение использует ключ обмена для расшифрования. Предположительно, на этом токене вообще недоступен функционал создания ключа обмена. За подробностями по возможностям токена Вы можете обратиться к его производителю. Аналогичная проблема. Что за бред? Как это ключ не подходит? А где написано что определенные токены нельзя? Вы со «сбер подписью» собираетесь что то решать? Тоже не расшифровывает файлы, уже 1,5 месяца прошло а решения никакого нет. Отредактировано пользователем 18 февраля 2022 г. 17:43:55(UTC) |
|
|
zub00 |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 18.02.2022(UTC) |
Утоните, пжл, а если вместо Jacarta мы будем использовать RuTocken Lite, такой проблемы не будет? |
|
|
Grey |
|
Статус: Сотрудник Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сказал «Спасибо»: 5 раз |
Автор: LITTELXP Что за бред? Как это ключ не подходит? А где написано что определенные токены нельзя? Добрый день. Насколько я вижу, проблемный токен — это JaCarta ГОСТ. Он есть в Формуляре как пассивный носитель (для них VKO точно будет работать, т.к. операции выполняет провайдер), но это давно устаревший носитель, так что сертификат, насколько я понимаю, на него истек. |
С уважением, |
|
|
|
Александр Лавник |
|
Статус: Сотрудник Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сказал «Спасибо»: 53 раз |
Автор: zub00 Утоните, пжл, а если вместо Jacarta мы будем использовать RuTocken Lite, такой проблемы не будет? Проблемы не будет. Рутокен Lite — пассивный носитель, вся криптография на стороне КриптоПро CSP. |
Техническую поддержку оказываем тут |
|
|
|
Grey |
|
Статус: Сотрудник Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сказал «Спасибо»: 5 раз |
Автор: zub00 Утоните, пжл, а если вместо Jacarta мы будем использовать RuTocken Lite, такой проблемы не будет? Рутокен Лайт, как и любой другой токен без встроенной криптографии, может использоваться в любых сценариях, которые поддерживает КриптоПро CSP 5.0 — в т.ч. для операций расшифрования. |
С уважением, |
|
|
|
LITTELXP |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 04.02.2022(UTC) |
Автор: Grey Автор: LITTELXP Что за бред? Как это ключ не подходит? А где написано что определенные токены нельзя? Добрый день. Насколько я вижу, проблемный токен — это JaCarta ГОСТ. Он есть в Формуляре как пассивный носитель (для них VKO точно будет работать, т.к. операции выполняет провайдер), но это давно устаревший носитель, так что сертификат, насколько я понимаю, на него истек. Что значит VKO ? |
|
|
zub00 |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 18.02.2022(UTC) |
Автор: Александр Лавник Автор: zub00 Утоните, пжл, а если вместо Jacarta мы будем использовать RuTocken Lite, такой проблемы не будет? Проблемы не будет. Рутокен Lite — пассивный носитель, вся криптография на стороне КриптоПро CSP. Добрый день |
|
|
Пользователи, просматривающие эту тему |
Guest |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Приглашаем на
бесплатный вебинар!
06 июня в 11:00 мск
1 час
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Перейти к содержимому
Настройка 1С
Решения по использованию программ 1С. Техподдержка. Сопровождение. Услуги программистов.
Если возникает ошибка в 1С-ЭДО: «При проверке подписи электронного документа: произошла ошибка: Ошибка интерфейса модуля криптографии. Указан неверный алгоритм».
Проверьте следующее
- Откройте панель криптопровайдера на ПК, с которого выполняете проверку. Например, КриптоПро CSP. Убедитесь, что срок действия лицензии не истек.
Одновременная и корректная работа с разными криптопровайдерами на одном ПК не гарантируется. Если установлены прочие СКЗИ — удалите их или перейдите на другое рабочее место.
- Перейдите в настройки 1С: «НСИ и Администрирование — Настройка интеграции — Обмен электронными документами — Настройки электронной подписи и шифрования — вкладка «Программы»».
В случае КриптоПро CSP должны быть указаны программы ГОСТ 2001, 2012/256, 2012/512 со статусом «Установлена на компьютере».
Укажите необходимое ПО и алгоритмы через Меню «Программы — Добавить». Нажмите кнопку «Обновить».
- Попробуйте пометить на удаление «Microsoft Enhanced RSA and AES CSP» и повторите операцию с документами ЭДО.
__________
Если не получается и требуется дополнительная поддержка — наши программисты готовы вам помочь → +7-911-500-10-11