Статус: Новичок
Группы: Участники
Зарегистрирован: 04.10.2013(UTC) Сообщений: 5
|
Доброго всем дня: Столкнулся с проблемой подписания xml файлов в 1С 8.1 прошу разъяснения: ИмяФайла - 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 подписью или сама подпись или что формируется?) Как правельно подписать???????? Если Verify.Verify(Результат, Истина, 0); то ошибка: {ВнешняяОбработка.EDI_СчФ_Выданные(1039)}: Ошибка при вызове метода контекста (Verify): Произошла исключительная ситуация: Неправильное значение хеша. Verify.Verify(Результат, Истина, 0); по причине: Произошла исключительная ситуация: Неправильное значение хеша. Если Verify.Verify(Результат, Истина, 1); то ошибка: {ВнешняяОбработка.EDI_СчФ_Выданные(1039)}: Ошибка при вызове метода контекста (Verify): Произошла исключительная ситуация: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия. Verify.Verify(Результат, Истина, 1); по причине: Произошла исключительная ситуация: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия. Корневой сертификат установлен в доверенные центры сертификации... ???????? Отредактировано пользователем 4 октября 2013 г. 11:37:49(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Файл с подписью имеет определенный формат, само значение подписи - фиксированный размер, зависимый от используемых алгоритмов, сертификат имеет определенный размер. Отсюда, если используется один и тот же сертификат для подписания, то и файлы с подписью будут иметь одинаковый размер. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Цитата: Произошла исключительная ситуация: Неправильное значение хеша Не тот файл проверяется, а если файл все же "тот", что был подписан (ниже распространенные ошибки): а) он был изменен после подписания б) данные передаются на проверку в COM "не так" как нужно.
p.s. в код 1С не вчитывался, оформлен не по правилам форума. Есть кнопка "Выберите тип подсветки кода" (6-я слева на панели при вводе текста)
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.10.2013(UTC) Сообщений: 5
|
Так у меня файлы разные разных размеров, а результат выполнения: Результат = SignedData.Sign(Signer, Истина, 0);
Всегда одинаков символ в символ, такого же не должно быть...или я чего то не понимаю?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: ostoha  Так у меня файлы разные разных размеров, а результат выполнения: Результат = SignedData.Sign(Signer, Истина, 0);
Всегда одинаков символ в символ, такого же не должно быть...или я чего то не понимаю? Без разницы на размер исходного файла, если подпись отделенная... p.s. прикрепите тогда уж тестовые файлы и эцп |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: ostoha  Так у меня файлы разные разных размеров, а результат выполнения: Результат = SignedData.Sign(Signer, Истина, 0);
Всегда одинаков символ в символ, такого же не должно быть...или я чего то не понимаю? Вы перед использованием чужого кода заглядывали в описание методов? Код:SignedData.Sign( _
[ ByVal Signer ], _
[ ByVal bDetached ], _
[ ByVal EncodingType ] _
)
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.10.2013(UTC) Сообщений: 5
|
Автор: Андрей *  Автор: ostoha  Так у меня файлы разные разных размеров, а результат выполнения: Результат = SignedData.Sign(Signer, Истина, 0);
Всегда одинаков символ в символ, такого же не должно быть...или я чего то не понимаю? Вы перед использованием чужого кода заглядывали в описание методов? Код:SignedData.Sign( _
[ ByVal Signer ], _
[ ByVal bDetached ], _
[ ByVal EncodingType ] _
)
Метод Sign(Signer,bDetached,EncodingType) Signer - подписант bDetached - boolean (0 - файл подписи включает в себя содержание объекта; 1 - файл подписи не включает в себя содержание объекта) EncodingType (0 - данные выгружаются в виде base64-кодированной строке) Походу понял Код:Результат = SignedData.Sign(Signer, Истина, 0);
Формирует чисто подпись а если надо сам файл с подписью внутри тогда флаг необходимо поменять Код:Результат = SignedData.Sign(Signer, Ложь, 0);
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: ostoha  Автор: Андрей *  Автор: ostoha  Так у меня файлы разные разных размеров, а результат выполнения: Результат = SignedData.Sign(Signer, Истина, 0);
Всегда одинаков символ в символ, такого же не должно быть...или я чего то не понимаю? Вы перед использованием чужого кода заглядывали в описание методов? Код:SignedData.Sign( _
[ ByVal Signer ], _
[ ByVal bDetached ], _
[ ByVal EncodingType ] _
)
Метод Sign(Signer,bDetached,EncodingType) Signer - подписант bDetached - boolean (0 - файл подписи включает в себя содержание объекта; 1 - файл подписи не включает в себя содержание объекта) EncodingType (0 - данные выгружаются в виде base64-кодированной строке) Походу понял Код:Результат = SignedData.Sign(Signer, Истина, 0);
Формирует чисто подпись а если надо сам файл с подписью внутри тогда флаг необходимо поменять Код:Результат = SignedData.Sign(Signer, Ложь, 0);
Да. Только "не чисто подпись", а в определенном формате (включая сертификат\цепочку\дополнительные атрибуты) |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Цитата:Произошла исключительная ситуация: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.
Корневой сертификат установлен в доверенные центры сертификации... А тот ли корневой установлен в доверенные корневые ЦС? |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.10.2013(UTC) Сообщений: 5
|
У нас диск поставки "Астрал" на нем единственный корневой сертификат другого даже и нет)))
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close