ЗаписатьСертификатВСправочник (БСП)

Автор: 1С
ОбщийМодуль.ЭлектроннаяПодпись
БСП

Записать сертификат справочник. Позволяет создать и обновить элемент справочника СертификатыКлючейЭлектроннойПодписиИШифрования по

// Позволяет создать и обновить элемент справочника СертификатыКлючейЭлектроннойПодписиИШифрования по
// указанному сертификату криптографии.
//
// Параметры:
//  Сертификат - СертификатКриптографии - сертификат.
//             - ДвоичныеДанные - двоичные данные сертификата.
//             - Строка - адрес временного хранилища, содержащего двоичные данные сертификата.
//
//  ДополнительныеПараметры - Неопределено - без дополнительных параметров.
//    - Структура - с произвольным составом из следующих свойств:
//      * Наименование - Строка - представление сертификата в списке.
//
//      * Пользователь - СправочникСсылка.Пользователь - пользователь, которому принадлежит сертификат.
//                       Значение используется при получении списка личных сертификатов пользователя
//                       в формах подписания и шифрования данных.
//
//      * Организация  - СправочникСсылка.Организация - организация, к которой относится сертификат.
//
//      * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа, которая
//                      требуется для подписания и расшифровки.
//
//      * УсиленнаяЗащитаЗакрытогоКлюча - Булево - сертификат был установлен на компьютере с усиленной
//                      защитой закрытого ключа, которая означает поддержку только пустого пароля на
//                      уровне «1С:Предприятия» (пароль у пользователя не запрашивается - это делает
//                      операционная система, которая не принимает от «1С:Предприятия» непустой пароль).
//
// Возвращаемое значение:
//  СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на сертификат.
// 
Функция ЗаписатьСертификатВСправочник(Знач Сертификат, ДополнительныеПараметры = Неопределено) Экспорт
	
	Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда
		ДополнительныеПараметры = Новый Структура;
	КонецЕсли;
	
	Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда
		ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат);
	
	ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
		ДвоичныеДанныеСертификата = Сертификат;
	КонецЕсли;
	
	Если ДвоичныеДанныеСертификата = Неопределено Тогда
		СертификатКриптографии = Сертификат;
		ДвоичныеДанныеСертификата = СертификатКриптографии.Выгрузить();
	Иначе
		СертификатКриптографии = Новый СертификатКриптографии(ДвоичныеДанныеСертификата);
	КонецЕсли;
	
	СертификатСсылка = СсылкаНаСертификат(Сертификат);
	
	Если ЗначениеЗаполнено(СертификатСсылка) Тогда
		СертификатОбъект = СертификатСсылка.ПолучитьОбъект();
		ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь);
	Иначе
		СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент();
		СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата);
		СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток);
		
		СертификатОбъект.Добавил = Пользователи.АвторизованныйПользователь();
	КонецЕсли;
	
	Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда
		СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата);
	КонецЕсли;
	
	СвойстваСертификата = СвойстваСертификата(СертификатКриптографии);
	ОбновитьЗначение(СертификатОбъект.Подписание,     СвойстваСертификата.Подписание);
	ОбновитьЗначение(СертификатОбъект.Шифрование,     СвойстваСертификата.Шифрование);
	ОбновитьЗначение(СертификатОбъект.КомуВыдан,      СвойстваСертификата.КомуВыдан);
	ОбновитьЗначение(СертификатОбъект.КемВыдан,       СвойстваСертификата.КемВыдан);
	ОбновитьЗначение(СертификатОбъект.ДействителенДо, СвойстваСертификата.ДатаОкончания);
	
	СвойстваСубъекта = СвойстваСубъектаСертификата(СертификатКриптографии);
	ОбновитьЗначение(СертификатОбъект.Фамилия,   СвойстваСубъекта.Фамилия,     Истина);
	ОбновитьЗначение(СертификатОбъект.Имя,       СвойстваСубъекта.Имя,         Истина);
	ОбновитьЗначение(СертификатОбъект.Фирма,     СвойстваСубъекта.Организация, Истина);
	Если СвойстваСубъекта.Свойство("Отчество") Тогда
		ОбновитьЗначение(СертификатОбъект.Отчество,  СвойстваСубъекта.Отчество,    Истина);
	КонецЕсли;	
	Если СвойстваСубъекта.Свойство("Должность") Тогда
		ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность,   Истина);
	КонецЕсли;	
	
	Если СертификатОбъект.ЭтоНовый()
	   И Не ДополнительныеПараметры.Свойство("Наименование") Тогда
		
		ДополнительныеПараметры.Вставить("Наименование",
			ПредставлениеСертификата(СертификатКриптографии));
	КонецЕсли;
	
	Для Каждого КлючИЗначение Из ДополнительныеПараметры Цикл
		ОбновитьЗначение(СертификатОбъект[КлючИЗначение.Ключ], КлючИЗначение.Значение);
	КонецЦикла;
	
	Если СертификатОбъект.Модифицированность() Тогда
		СертификатОбъект.Записать();
	КонецЕсли;
	
	Возврат СертификатОбъект.Ссылка;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗаписатьСертификатВСправочник (БСП)

ПроверитьСертификатСправочника (БСП)

ПредставлениеСертификата (БСП)

СсылкаНаСертификат (БСП)

СертификатНачалоВыбораСПодтверждением (БСП)

ЗаписатьСертификатыШифрования (БСП)

ЗаписатьСведенияОПользователе (БСП)

ПередНачаломРедактированияСертификатаКлюча (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом