Подписать документ сертификатом

1. fleg87 31.03.21 18:19 Сейчас в теме
Конфигурация Бух. 2.0 обычные формы.
Платформа 8.3.15
Цель - подписать документ сертификатом, который хранится в справочнике "ПользователиИСЭСФ" в реквизите "СертификатАутентификации" с типом ХранилищеЗначений.
Нашел общий модуль с функцией, которую хотел применить:
ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи(
МенеджерКриптографии,
ОбъектДляПодписиСсылка,
ДвоичныеДанные,
СтруктураПараметровПодписи) Экспорт

Прошу сориентируйте, где не корректно указываю данные:
	Пароль = Объект.Сертификат.ПарольАутентификации;
	
	МК                        = Новый МенеджерКриптографии("Microsoft Enhanced Cryptographic Provider v1.0", "", 1);
	АдресСертификата          = ПоместитьВоВременноеХранилище(Объект.Сертификат.СертификатАутентификации, УникальныйИдентификатор);
	ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата);
	
	Сертификат                = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); //Ошибка Несоответсвие типов (параметр номер 1)

	Структура = Новый Структура("Сертификат, Пароль, Комментарий", Сертификат, Пароль, "");	
	ДанныеПодписи = ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи(МК, Объект.Ссылка, ДвоичныеДанныеСертификата, Структура);		
	НоваяЗаписьПодпись = ДанныеПодписи.НоваяПодписьДвоичныеДанные;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
16. RustamZz 01.04.21 17:04 Сейчас в теме
(1)
	ПараметрыCMS = ЭлектроннаяПодпись.ПараметрыCMS();
		
	МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("Подписание", Ложь);
	МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = "ПаРолЬ";
	РезультатПодписания = ЭлектроннаяПодписьСлужебный.Подписать(
			"ЧтоПодписываемСтрокой",
			ПараметрыCMS,
			ЭлектроннаяПодписьСлужебный.ПолучитьСертификатПоОтпечатку(СертификатыКлючейЭлектроннойПодписиИШифрования.Отпечаток, Истина, Ложь),
			МенеджерКриптографии);
Показать
17. fleg87 02.04.21 07:28 Сейчас в теме
(16) Что такое в вашем примере:
ЭлектроннаяПодпись
ЭлектроннаяПодписьСлужебный
СертификатыКлючейЭлектроннойПодписиИШифрования
?
Общие модули? У меня таких нет.
18. RustamZz 02.04.21 08:57 Сейчас в теме
(17) Да общие модули, только это кусок кода для УПП. Все от БСП. Думал что у нее та же версия что и в БП 2. СертификатыКлючейЭлектроннойПодписиИШифрования - это справочник с таким же именем.
2. Leon75 31.03.21 20:49 Сейчас в теме
Откуда вы взяли переменную Объект?
3. fleg87 01.04.21 06:37 Сейчас в теме
(2)Объект это сам документ, который подписываю. Код выполняю на его форме на клиенте.
Сертификат - реквизит с типом СправочникСсылка.ПользователиИСЭСФ
4. Leon75 01.04.21 10:11 Сейчас в теме
(3)А должен быть тип ДвоичныеДанные, полученные из ХранилищаЗначения этого справочника.
Сертификат должен быть либо СертификатомКриптографии, либо если мне не изменяет память двоичными данными файла сертификата.
5. fleg87 01.04.21 10:22 Сейчас в теме
(4) У справочника есть реквизит ХранилищеЗначений, как получить из него тип ДвоичныеДанные?
Если делаю просто Получить() то получаю тип Строка
7. Leon75 01.04.21 10:48 Сейчас в теме
(5)А что в этой строке? Может быть сериализованный сертификат? MODULUS и т д.
8. fleg87 01.04.21 10:51 Сейчас в теме
(7) Да не та строка, конечно. Доработал и получил нужный сертификат!))
Пароль = Объект.Сертификат.ПарольАутентификации;
	
	МК = Новый МенеджерКриптографии("Microsoft Enhanced Cryptographic Provider v1.0", "", 1);
	
	ДвоичныеДанныеСертификата = Base64Значение(Объект.Сертификат.СертификатАутентификации.Получить()); //получить из хранилища
	
	Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата);

	Структура = Новый Структура("Сертификат, Пароль, Комментарий", Сертификат, Пароль, "");
	
	ДанныеПодписи = ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи(МК, Объект.Ссылка, ДвоичныеДанныеСертификата, Структура);
		
	НоваяЗаписьПодпись = ДанныеПодписи.НоваяПодписьДвоичныеДанные;
Показать
9. fleg87 01.04.21 10:52 Сейчас в теме
(7)Но теперь используя общ. функцию, т.е. итоговоую цель - Подписать() - получаю ошибку:
Сертификат отсутствует в персональном хранилище сертификатов.

Но это уже другое дело! Попробую изменить провайдера....
10. Leon75 01.04.21 10:54 Сейчас в теме
(9)Персональное хранилище - это хранилище сертификатов Windows. Раздел Личное вроде бы...
11. fleg87 01.04.21 11:15 Сейчас в теме
(10)Т.к. не известно где это будет запускаться, то хотелось бы если возможно получить провайдера программно.
Пытаюсь применить для этого общ. функ-ю
ЭлектроннаяЦифроваяПодпись.ПолучитьПерсональныеНастройкиРаботыСЭЦПСервер()
в которой помимо прочего провайдер должен браться из константы:
...
	ПровайдерЭЦП = Константы.ПровайдерЭЦП.Получить();
...

но у меня в конф-и такой константы нет, поээтому использовать не получилось(((
13. Leon75 01.04.21 12:23 Сейчас в теме
(12)
(11)Не почтите за оскорбление, но либо вы нещадно переработали и вам нужна медицинская помощь, либо вы - троль и вы плодите энтропию в интернете и на этом уважаемом ресурсе. У вас каша в вашем "вопросе". И я думаю, что каша намеренная. Неправильно буквально все.
14. fleg87 01.04.21 12:45 Сейчас в теме
(13)Нет, не троль. Дело в том что никогда не занимался подписями. А сейчас есть задача, которую пытаюсь решить. Готового примера у меня нет, вот и приходится отовсюду надергать куски и пробовать. Понятно что каша от этого получается, Подскажите если знаете как правильно получать подписи?
15. Leon75 01.04.21 14:42 Сейчас в теме
(14)Нетроль на (7) ответил бы. Конечно вываливать сюда сериализованный закрытый серт не нужно, но ответить можно было. Вместо этого очередная каша в (8).
12. fleg87 01.04.21 11:53 Сейчас в теме
(10)А что обязательно сертификат еще в Windows встраивать? Не достаточно что он уже в 1с сохранен?
6. fleg87 01.04.21 10:31 Сейчас в теме
(4)Попробовал такую конструкцию
ДанныеВBase64 = XMLСтрока(Объект.Сертификат.СертификатАутентификации); // Получим Base64 хранилища значения
	ДвоичныеДанныеСертификата = Base64Значение(ДанныеВBase64);
	
	Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата);

Получил ошибку:Ошибка при создании контекста сертификата.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот