Имя: Пароль:
1C
1С v8
Крипто Про и 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);
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс