|
|
|
Крипто Про и 1С 8.1 | ☑ | ||
|---|---|---|---|---|
|
0
ostoha
04.10.13
✎
11:28
|
Доброго всем дня: Столкнулся с проблемой подписания xml файлов в 1С 8.1 прошу разъяснения:
|
|||
|
1
ostoha
04.10.13
✎
11:32
|
ИмяФайла - xml файл
ИмяВыхФайла - Имя нового файла Функция ПодписатьФайл(ИмяФайла,ИмяВыхФайла) обХранСерт = Новый COMОбъект("CAPICOM.Store"); обХранСерт.Open(2); мсСерт = обХранСерт.Certificates; Серт = Неопределено; Для каждого текСерт Из мсСерт Цикл Если текСерт.ValidToDate > ТекущаяДата() И текСерт.SerialNumber = "01CE5C45B54463E000000000048205DA" Тогда Серт = текСерт; Прервать; КонецЕсли; КонецЦикла; Если Серт = Неопределено Тогда Сообщить("Нет сертификатов"); Возврат 0; КонецЕсли; Signer = Новый COMОбъект("CAPICOM.Signer"); Signer.Certificate = Серт; Signer.Options = 2; SignedData = Новый COMОбъект("CAPICOM.SignedData"); Данные = Новый ДвоичныеДанные(ИмяФайла); Строка64=Base64Строка(Данные); Строка64=Прав(Строка64,СтрДлина(Строка64)-4); SignedData.Content = Строка64; Данные = Неопределено; Результат = SignedData.Sign(Signer, Истина, 0); ДвоичныеДанные = Base64Значение(Результат); ДвоичныеДанные.Записать(ИмяВыхФайла); ДвоичныеДанные = Неопределено; Verify = Новый COMОбъект("CAPICOM.SignedData"); Данные = Новый ДвоичныеДанные(ИмяВыхФайла); Строка64 = Base64Строка(Данные); //Строка64=Прав(Строка64,СтрДлина(Строка64)-4); Строка64 = Строка64 + Символы.ПС; Verify.Content = Строка64; Verify.Verify(Результат, Истина, 0); КонецФункции Подписываю очень много xml, подскажите что формируется в итоге а то я новичек, у меня выходят bin файлы и у всех размер байт в байт (Это xml c подписью или сама подпись или что формируется?) Как правельно подписать???????? |
|||
|
2
ostoha
04.10.13
✎
11:37
|
Если Verify.Verify(Результат, Истина, 0); то ошибка:
{ВнешняяОбработка.EDI_СчФ_Выданные(1039)}: Ошибка при вызове метода контекста (Verify): Произошла исключительная ситуация: Неправильное значение хеша. Verify.Verify(Результат, Истина, 0); по причине: Произошла исключительная ситуация: Неправильное значение хеша. Если Verify.Verify(Результат, Истина, 1); то ошибка: {ВнешняяОбработка.EDI_СчФ_Выданные(1039)}: Ошибка при вызове метода контекста (Verify): Произошла исключительная ситуация: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия. Verify.Verify(Результат, Истина, 1); по причине: Произошла исключительная ситуация: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия. Корневой сертификат установлен в доверенные центры сертификации... |
|||
|
3
ostoha
04.10.13
✎
12:53
|
Походу понял сам:
Метод Sign(Signer,bDetached,EncodingType) Signer - подписант bDetached - boolean (0 - файл подписи включает в себя содержание объекта; 1 - файл подписи не включает в себя содержание объекта) EncodingType (0 - данные выгружаются в виде base64-кодированной строке) Результат = SignedData.Sign(Signer, Истина, 0); Формирует чисто подпись а если надо сам файл с подписью внутри тогда флаг необходимо поменять Результат = SignedData.Sign(Signer, Ложь, 0); |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |