Вот тут не все функции, например, нужна функция "глРазборJSON" (они просто часть моей конфигурации, уже давно, это надо их оттуда "выковыривать"), я не могу гарантировать, что у Вас это в таком виде "заведется", но принцип понять можно:
// sThumbprint - отпечаток сертификата, используемого для подписи; строка, представляющая отпечаток в шестандцатеричном виде
Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint,БезBOM=1)
infile = КаталогВременныхФайлов()+"infile.txt";
Если ФС.СуществуетФайл(infile) = 1 Тогда
Попытка
ФС.УдалитьФайл(infile);
Исключение
infile = КаталогВременныхФайлов() + "infile" + ГенераторGIUD() + ".txt";
КонецПопытки;
КонецЕсли;
outfile = КаталогВременныхФайлов()+"outfile.txt";
Если ФС.СуществуетФайл(outfile) = 1 Тогда
Попытка
ФС.УдалитьФайл(outfile);
Исключение
outfile = КаталогВременныхФайлов() + "outfile" + ГенераторGIUD() + ".txt";
КонецПопытки;
КонецЕсли;
Если Прав(ТекстДляПодписи,4) = ".xml" Тогда
infile = ТекстДляПодписи;
ПодписатьФайл(infile,ПолучитьСертификатПоОтпечатку(sThumbprint),outfile);
Если ФС.СуществуетФайл(outfile) = 1 Тогда
Возврат outfile;
Иначе
Возврат "";
КонецЕсли;
Иначе
Если БезBOM = 1 Тогда
ВремТекст = СоздатьОбъект("Текст");
ВремТекст.ДобавитьСтроку(ТекстДляПодписи);
ВремТекст.Записать(infile);
Иначе
АдоДБСтрим = СоздатьОбъект("ADODB.Stream");
АдоДБСтрим.Mode = 3;
АдоДБСтрим.Type = 2;//текст
АдоДБСтрим.charset="utf-8";
АдоДБСтрим.Open();
АдоДБСтрим.WriteText(ТекстДляПодписи);
АдоДБСтрим.Position=0;
АдоДБСтрим.SaveToFile(infile,2);
АдоДБСтрим.Close();
КонецЕсли;
ПодписатьФайл(infile,ПолучитьСертификатПоОтпечатку(sThumbprint),outfile);
Если ФС.СуществуетФайл(outfile) = 1 Тогда
Возврат outfile;
Иначе
Возврат "";
КонецЕсли;
КонецЕсли;
КонецФункции
//******************************************************************************
// ПолучитьPublic_cert(ПутьКСертификату)
//
// Параметры:
// ПутьКСертификату - путь к файлу или текст сертификата КЭП
//
// Возвращаемое значение:
// public_cert,signature
//
// Описание:
// убирает переносы строк и возвращает содержимое в виде строки
//
Функция ПолучитьPublic_cert(ПутьКСертификату)
ВозврPublic_cert = "";
Если (Прав(ПутьКСертификату,4) = ".cer") ИЛИ (Прав(ПутьКСертификату,4) = ".txt") Тогда
Если ФС.СуществуетФайл(ПутьКСертификату) = 0 Тогда
Сообщить("Файл сертификата "+СокрЛП(ПутьКСертификату)+" не найден");
Возврат "";
КонецЕсли;
АдоДБСтрим = СоздатьОбъект("ADODB.Stream");
АдоДБСтрим.Mode = 3;
АдоДБСтрим.Type = 2;//текст
АдоДБСтрим.charset="utf-8";
АдоДБСтрим.Open();
АдоДБСтрим.LoadFromFile(ПутьКСертификату);
АдоДБСтрим.Position = 0;
ТекстСертификата = АдоДБСтрим.ReadText(-1);
АдоДБСтрим.Close();
Для СчСтрок = 1 По СтрКоличествоСтрок(ТекстСертификата) Цикл
ТекСтрока = СтрПолучитьСтроку(ТекстСертификата,СчСтрок);
Если Лев(ТекСтрока,4) = "----" Тогда
Продолжить;
КонецЕсли;
ТекСтрока = СтрЗаменить(ТекСтрока,РазделительСтрок,"");
ВозврPublic_cert = ВозврPublic_cert + ТекСтрока;
КонецЦикла;
Иначе
Для СчСтрок = 1 По СтрКоличествоСтрок(ПутьКСертификату) Цикл
ТекСтрока = СтрПолучитьСтроку(ПутьКСертификату,СчСтрок);
Если Лев(ТекСтрока,4) = "----" Тогда
Продолжить;
КонецЕсли;
ТекСтрока = СтрЗаменить(ТекСтрока,РазделительСтрок,"");
ВозврPublic_cert = ВозврPublic_cert + ТекСтрока;
КонецЦикла;
КонецЕсли;
Возврат ВозврPublic_cert;
КонецФункции // ПолучитьPublic_cert()
// Возвращает пары идентификатор-данные для запроса токена
Функция ВернутьПаруЗапрТокена(УРЛ, ПрефиксВерсии)
// WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.SetTimeouts(0, 0, 0, 0);
Url = "https://" + УРЛ + ПрефиксВерсии + "auth/cert/key";
WinHttp.Open("GET", Url, 1);
WinHttp.SetRequestHeader("Content-Type", "application/json");
WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
WinHttp.Send();
RequestTimeout = 40;
Попытка
Рез = WinHttp.WaitForResponse(RequestTimeout);
Исключение
Рез = 0;
Ответ = ОписаниеОшибки();
КонецПопытки;
Ответ = "";
Если Рез = -1 Тогда
Статус = WinHttp.status();
Ответ = СокрЛП(WinHttp.ResponseText());
КонецЕсли;
СЗ = глРазборJSON(Ответ);
Возврат СЗ;
КонецФункции
// Параметры:
// code
// Возвращаемое значение:
// token
//
// Описание:
Функция ПолучитьТокенЦРПТ(ВыбЭЦП, ПрефиксВерсии, СтрОшибка="",life_time=0) Экспорт
Перем Сигнатура;
Перем uuid;
Перем code;
СзКей = ВернутьПаруЗапрТокена(СокрЛП(Константа.АдресСервисаМОТП), ПрефиксВерсии);
сзJSONЗапрос = СоздатьОбъект("СписокЗначений");
Сч = 0;
Для Сч = 1 По СзКей.РазмерСписка() Цикл
uuid = СзКей.Получить("uuid");
code = СзКей.Получить("data");
Сигнатура = ПодписатьТекст(code,СокрЛП(ВыбЭЦП.Отпечаток),1);
Если ПустоеЗначение(Сигнатура) = 1 Тогда
Возврат "";
КонецЕсли;
Сигнатура = ПолучитьPublic_cert(Сигнатура);
сзJSONЗапрос.Установить("uuid",uuid);
сзJSONЗапрос.Установить("data",Сигнатура);
КонецЦикла;
Ответ = глHTPP_ВыполнитьЗапрос("POST","https://" + СокрЛП(Константа.АдресСервисаМОТП) + ПрефиксВерсии + "auth/cert/", сзJSONЗапрос,,,СтрОшибка);
Если ПустоеЗначение(Ответ) = 0 Тогда
сзОтвет = глРазборJSON(Ответ);
КонецЕсли;
Если ПустоеЗначение(сзОтвет) = 1 Тогда
Возврат 0;
КонецЕсли;
Возврат сзОтвет.Получить("token");
КонецФункции // ПолучитьКлючСессии()
PS Функции подписания - не мои, пришлось "по крупицам" собирать на ИнфоСтарте, Мисте, и т.д...