|
1c 8.2 МенеджерКриптографии | ☑ | ||
---|---|---|---|---|
0
Python
26.07.11
✎
09:15
|
при создании объекта
МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft RSA SChannel Cryptographic Provider", "",75); вылетает ошибка "Ошибка при получении контекста модуля криптографии." |
|||
1
Python
26.07.11
✎
09:17
|
попробовал провайдеры из етой ветки HKEY_LOCAL_MACHINE\SOFTWARE\Micr osoft\Cryptography\Defaults\Provider все равно не работает
|
|||
2
vmv
26.07.11
✎
09:34
|
Новый МенеджерКриптографии("Microsoft RSA SChannel Cryptographic Provider", "",75)
как-то подозрительно выглядит, хотя я не специалист по крипто |
|||
3
DmitrO
26.07.11
✎
10:12
|
Менеджер = Новый МенеджерКриптографии("Microsoft Base Cryptographic Provider v1.0", "", 1);
|
|||
4
RomaH
naïve
26.07.11
✎
10:25
|
а откуда параметры брать для этого контсруктора
почему 1? почему 75? |
|||
5
DmitrO
26.07.11
✎
10:47
|
Это комплексный ТИП провайдера. Определенные константы.
Определяет некоторые характеристики провайдера, такие как тип ключа обмена, тип сигнатуры, тип шифрования и хешинга. Описывается в MSDN в разделе по криптографии. Подсмотреть его можно в реестре в указанной в (1) ветке. Создаются от туда не все, причина вероятно в 1С и в методах обеспечения функционала и в самом функционале, которые должен обеспечивать интерфейс механизма криптографии встроенный в платформу 8.2. |
|||
6
Python
26.07.11
✎
18:11
|
шибка при вызове метода контекста (Подписать)
НоваяПодпись = МенеджерКриптографии.Подписать(ПолноеИмяфайла,ПолноеИмяфайла1,Сертификат); по причине: Сертификат отсутствует в персональном хранилище сертификатов. |
|||
7
oleg_km
26.07.11
✎
22:16
|
Проверяйте, каком хранилище лежит ваш сертификат (консоль certificates.msc). Там несколько хранилищ: личные, других пользователей и т.д. Еще есть вроде как хранилище не пользователя, а компьютера. Потом какой тип имеет параметр Сертификат? Если строковый, то тоже нужно какой реквизит сертификата подразумевается: Понятное имя, Субъект. Я уже сталкивался с этим: WinAPI дает возможность выбрать любое свойство для идентификации, а скажем WinHTTP только по свойству Кому выдан. С этими обертками, что от 1С, что от MS все очень урбно получается. Они реализуют только часть функционала, на их взгляд наиболее востребованную и ты неожиданно натыкаешься на ограничение их реализации
|
|||
8
zak555
26.07.11
✎
22:38
|
закладка
|
|||
9
Python
27.07.11
✎
19:51
|
функция ПолучитьСписокСертификатовПоТипуОбекта(ТипОбъекта)Экспорт
Перем результат; //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЭЦП.видОбъекта, | ЭЦП.Сертификат, | ЭЦП.Порядок, | ТИПЗНАЧЕНИЯ(ЭЦП.видОбъекта) КАК Тип |ИЗ | РегистрСведений.ЭЦП КАК ЭЦП |ГДЕ | ТИПЗНАЧЕНИЯ(ЭЦП.видОбъекта) = ТИПЗНАЧЕНИЯ(&видОбъекта) | |УПОРЯДОЧИТЬ ПО | ЭЦП.Порядок"; Запрос.УстановитьПараметр("видОбъекта", типОбъекта); РезультатЗапроса = Запрос.Выполнить(); ТаблицаРезультатов = РезультатЗапроса.выгрузить(); Сертификаты = НОвый СписокЗначений(); Для Каждого строкаТаблицыРезультатов из ТаблицаРезультатов цикл ХранилищеСерификатов = строкаТаблицыРезультатов.Сертификат.Хранилище; Если ТипЗнч(ХранилищеСерификатов) <> Тип("ДвоичныеДанные") Тогда Данные = ХранилищеСерификатов.Получить(); Иначе Данные = ХранилищеСерификатов; КонецЕсли; Если Данные <> Неопределено тогда Сертификаты.Добавить(новый СертификатКриптографии(Данные)); КонецЕсли; КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА возврат Сертификаты КонецФункции Функция ПодписатьФайл(Сертификат, полноеИмяФайла = неопределено) экспорт //Если Не ПодключитьРасширениеРаботыСКриптографией() Тогда // Сообщить(НСтр("ru = 'Для требуемой операции необходимо установить расширение работы с криптографией'", "ru")); // Возврат неопределено; //КонецЕсли; МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft Enhanced Cryptographic Provider v1.0", "", 1); //МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft Enhanced Cryptographic Provider v1.0",,РежимВключенияСертификатовКриптографии.ВключатьСертификатСубъекта); //МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "",1); //МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft Base Cryptographic Provider v1.0", "",1); //МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft RSA SChannel Cryptographic Provider", "",1); //сообщить(Сертификат); // //МенеджерКриптографии.АлгоритмПодписи = "Microsoft Enhanced Cryptographic Provider v1.0"; //новыйСертификат = новый СертификатКриптографии(); // //МенеджерКриптографии = Новый МенеджерКриптографии(); Если полноеИмяФайла = неопределено тогда Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Истина); Если Не Диалог.Выбрать() Тогда Возврат неопределено; КонецЕсли; Для каждого ПолученноеИмяФайла Из Диалог.ВыбранныеФайлы Цикл ПолученныйФайл = Новый Файл(ПолученноеИмяФайла); Состояние("Добавляется файл: " + ПолученныйФайл.Имя); Отказ = Ложь; ПолноеИмяфайла = ПолученныйФайл.ПолноеИмя; КонецЦикла; конецЕсли; ПолноеИмяфайла1 = "c:\temp"; НоваяПодпись = МенеджерКриптографии.Подписать(ПолноеИмяфайла,Сертификат); возврат НоваяПодпись; КонецФункции Процедура Кнопка1Нажатие(Элемент) // Вставить содержимое обработчика. ДанныеОСертификатах = ПолучитьСписокСертификатовПоТипуОбекта(Документы.ЕЦП_п.ПустаяСсылка()); Для каждого Сертификат из ДанныеОСертификатах цикл ПодписатьФайл(Сертификат.Значение); КонецЦикла; КонецПроцедуры я беру сертификат из двоичный даных - он там есть |
|||
10
loh_pedalny
27.07.11
✎
20:08
|
мдя... В курсе, что сертификаты хранятся не в Регистрах сведений, а в хранилище сертификатов на компе?
|
|||
11
loh_pedalny
27.07.11
✎
20:09
|
+(10) этим кодом с таким же успехом можно и жпегами попробовать поставить подпись
|
|||
12
Python
27.07.11
✎
20:15
|
сертификаты можно хранить и в двоичных данных
|
|||
13
loh_pedalny
27.07.11
✎
20:19
|
можно, но только менеджер криптографии от MS о них ничо не знает. Их поначалу неплохо бы в хранилище импортировать, а уж потом...
|
|||
14
oleg_km
28.07.11
✎
08:14
|
А действительно, как сертификат попал в регистр сведений, из какого файла? Раз им подписываю сообщение, значит это сертификат с закрытым ключем. Разве можно держать сертификат с закрытым ключем для MS криптопровайдера в файле? По-моему только в p12 для импорта. Если кто знает - подскажите, а то надоедает каждый раз импортировать в хранилице
|
|||
15
Python
28.07.11
✎
18:25
|
алгоритм 1.2.804.2.1.1.1.1.3.1.1
а если это открытый ключ то как им подписать |
|||
16
oleg_km
28.07.11
✎
19:10
|
Так открытым ключем вроде как не подписывают. Открытым ключем ключем шифруют. По смыслу так получается
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |