Выполнить на стороне сервера. Только для внутреннего использования.
// Только для внутреннего использования.
Функция ВыполнитьНаСторонеСервера(Знач Параметры, АдресРезультата, ОперацияНачалась, ОшибкаНаСервере) Экспорт
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии(Параметры.Операция,
Ложь, ОшибкаНаСервере, Параметры.СертификатПрограмма);
Если МенеджерКриптографии = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
// Если личный сертификат шифрования не используется, тогда его не нужно искать.
Если Параметры.Операция <> "Шифрование"
Или ЗначениеЗаполнено(Параметры.СертификатОтпечаток) Тогда
СертификатКриптографии = ЭлектроннаяПодписьСлужебный.ПолучитьСертификатПоОтпечатку(
Параметры.СертификатОтпечаток, Истина, Ложь, Параметры.СертификатПрограмма, ОшибкаНаСервере);
Если СертификатКриптографии = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Попытка
Данные = ПолучитьИзВременногоХранилища(Параметры.ЭлементДанныхДляСервера.Данные);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОшибкаНаСервере.Вставить("ОписаниеОшибки",
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Параметры.Операция)
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат Ложь;
КонецПопытки;
ЭтоXMLDSig = (ТипЗнч(Данные) = Тип("Структура")
И Данные.Свойство("ПараметрыXMLDSig"));
Если ЭтоXMLDSig Тогда
Если Параметры.Операция <> "Подписание" Тогда
ОшибкаНаСервере.Вставить("ОписаниеОшибки",
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Параметры.Операция)
+ Символы.ПС + НСтр("ru = 'Внешняя компонента XMLDSig может использоваться только для подписания.'"));
Возврат Ложь;
КонецЕсли;
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля;
Попытка
ДвоичныеДанныеРезультата = ЭлектроннаяПодписьСлужебный.Подписать(
Данные.КонвертSOAP,
Данные.ПараметрыXMLDSig,
СертификатКриптографии,
МенеджерКриптографии);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
Иначе
ОписаниеОшибки = "";
Если Параметры.Операция = "Подписание" Тогда
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля;
Попытка
ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
ИначеЕсли Параметры.Операция = "Шифрование" Тогда
Сертификаты = СертификатыКриптографии(Параметры.АдресСертификатов);
Попытка
ДвоичныеДанныеРезультата = МенеджерКриптографии.Зашифровать(Данные, Сертификаты);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ДвоичныеДанныеРезультата, ОписаниеОшибки);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
Иначе // Расшифровка.
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля;
Попытка
ДвоичныеДанныеРезультата = МенеджерКриптографии.Расшифровать(Данные);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
КонецЕсли;
КонецЕсли;
Если ИнформацияОбОшибке <> Неопределено Тогда
ОшибкаНаСервере.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ОшибкаНаСервере.Вставить("Инструкция", Истина);
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОшибкаНаСервере.Вставить("ОписаниеОшибки", ОписаниеОшибки);
Возврат Ложь;
КонецЕсли;
ОперацияНачалась = Истина;
Если Параметры.Операция = "Подписание" Тогда
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии);
СвойстваСертификата.Вставить("ДвоичныеДанные", СертификатКриптографии.Выгрузить());
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанныеРезультата,
СвойстваСертификата, Параметры.Комментарий, Пользователи.АвторизованныйПользователь());
Если Параметры.СертификатВерен <> Неопределено Тогда
СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса();
СвойстваПодписи.ДатаПроверкиПодписи = СвойстваПодписи.ДатаПодписи;
СвойстваПодписи.ПодписьВерна = Параметры.СертификатВерен;
КонецЕсли;
АдресРезультата = ПоместитьВоВременноеХранилище(СвойстваПодписи, Параметры.ИдентификаторФормы);
Если Параметры.ЭлементДанныхДляСервера.Свойство("Объект") Тогда
ВерсияОбъекта = Неопределено;
Параметры.ЭлементДанныхДляСервера.Свойство("ВерсияОбъекта", ВерсияОбъекта);
ПредставлениеОшибки = ДобавитьПодпись(Параметры.ЭлементДанныхДляСервера.Объект,
СвойстваПодписи, Параметры.ИдентификаторФормы, ВерсияОбъекта);
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ОшибкаНаСервере.Вставить("ОписаниеОшибки", ПредставлениеОшибки);
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Иначе
АдресРезультата = ПоместитьВоВременноеХранилище(ДвоичныеДанныеРезультата, Параметры.ИдентификаторФормы);
КонецЕсли;
Возврат Истина;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыполнитьПодключениеКонечнойТочкиНаСторонеПолучателя (БСП)
ВыполнитьПодключениеКонечнойТочкиНаСторонеОтправителя (БСП)
ВыполнитьНаСторонеПослеПоискаСертификата (БСП)
ВыполнитьНаСторонеПослеВыгрузкиСертификата (БСП)
НастройкиПроксиНаСервере (БСП)
СохранитьНастройкиПроксиНаСервере1СПредприятие (БСП)
ВыполнитьНаСторонеПослеСозданияМенеджераКриптографии (БСП)
ВыполнитьНаСторонеПодготовкаСертификатовПослеИнициализацииСертификата (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)