| 
    
        
     
     | 
    
    
  | 
МенеджерКриптографии. Как использовать? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Help1с    
     21.03.16 
            ✎
    09:39 
 | 
         
        Добрый день.
 
        Как я понял нельзя в 1с понять файл содержит подпись или нет. Как проверить файл содержит ЭЦП или нет? Может кто подскажет как должен работать механизм проверки подписанного файла в 1С?  | 
|||
| 
    1
    
        Help1с    
     21.03.16 
            ✎
    09:39 
 | 
         
        Мое видение процесса:
 
        1. Получаем файл от контрагента. 2. В конфигурации должен быть регистр соответствия Сертификатов конкретному Контрагенту. 3. Методом перебора всех сертификатов и проверкой наличия данного сертификата в полученном файле узнаем что это за контрагент. 4. Проверяем действительность сертификата. Пункт 3 не нравится. Пункт 4 не знаю как реализовать.  | 
|||
| 
    2
    
        Fedor-1971    
     21.03.16 
            ✎
    10:09 
 | 
         
        (1) Для начала ответь на вопрос: каким ПО криптографии собираешься пользоваться? Avest, Copicom или нечто другое. Как определишься - выясняешь методы работы выбранной системы.
 
        В идеале, работа с шифрованными данными выглядит так: 1. Получили файл 2. Скормили его системе шифрования, на предмет определения есть подпись или нет 3. Попросили расшифровать, если подпись есть Вполне вероятно, что п.2 и п.3 выполняются за одно действие. Не изобретай велосипед, там где он не нужен. До тебя уже всё сделали и придумали как хранить сертификаты (выпуск, отзыв, обмен, локальное хранилище, обмен с выше стоящим УЦ), как проверять их актуальность, как использовать в шифровании/дешифровании данных и проч.  | 
|||
| 
    3
    
        Help1с    
     21.03.16 
            ✎
    10:45 
 | 
         
        (2) посмотреть бы этот велосипед. :)
 
        про первый вопрос - вообще думал что КриптоПро буду использовать и МенеджерКриптографии.  | 
|||
| 
    4
    
        Fedor-1971    
     21.03.16 
            ✎
    11:38 
 | 
         
        (3) вот и почитай как работает, где хранит ключи, как получает сертификат, какие функции доступны для программного использования.
 
        Как минимум на сайте производителя. На сколько я помню, там целая система замкнутая на носитель контейнера, вроде всё на нём и хранится.  | 
|||
| 
    5
    
        Help1с    
     21.03.16 
            ✎
    12:03 
 | 
         
        (4) дело в том, что у нас контейнера быть не может. мы же просто получаем подписанный файл.     
         | 
|||
| 
    6
    
        Fedor-1971    
     21.03.16 
            ✎
    12:40 
 | 
         
        (5) о на как! Тогда о каких сертификатах идёт речь?
 
        "подписанный файл" - по сути проходит двойное шифрование, сначала шифруется область подписи, т.е. с используется шифрование на основе закрытого ключа отправителя (для проверки именно отправителя), потом шифруется всё сообщение твоим открытым ключом. По получении расшифровываем своим закрытым ключом всё сообщение и проверяем подпись используя открытый ключ отправителя. Могу ошибаться в деталях, но общая идеология именно такая. Изучил бы для начала предметную область. А без минимальных знаний в оной вопросы "Как должна работать проверка подписи в 1С" аналогичны "Есть ли жизнь на Марсе?"  | 
|||
| 
    7
    
        Serginio1    
     21.03.16 
            ✎
    12:56 
 | 
         
        (3) Если, что посмотри http://www.cryptopro.ru/products/net     
         | 
|||
| 
    8
    
        Гость из Мариуполя    
     гуру 
    21.03.16 
            ✎
    13:11 
 | 
         
        (6) офигеть ты загнул.
 
        сходи на сайт bus.gov.ru выбери любое учреждение. перейди в раздел "Подробная информация" открой там "Документы" о чудо! все документы подписаны ЭЦП! ЭЦП можно посмотреть. Документы можно скачать. При этом моего ключа ни открытого, ни закрытого нету и в помине. Нету у меня ключа вообще. А ЭЦП у документов, размещенных на сайте, есть. И я эту ЭЦП вижу. Во, к примеру, первый попавшийся: Открывай "Документы" и любуйся на "Подпись". http://bus.gov.ru/pub/agency/109629 ситуация точь в точь как в (5). Так что предметнаяобласть - она тоже.. разная.. И кой-кому тоже бы не помешало ее подучить. :)  | 
|||
| 
    9
    
        Borteg    
     21.03.16 
            ✎
    13:17 
 | 
         
        (8) шифруется сообщение при передаче от одного пользователя к другому, чтобы при перехвате сообщение не могли открыть, а только конечный получатель своим закрытым ключом. Если они лежат в открытым доступе значит расшифровка уже была произведена, электронную подпись ты тоже видишь, не имея сертификата открытого ключа ты не сможешь проверить подлинность этой электронной подписи, так как не сможешь сформировать хэш документа и сверить его с хэшем в электронной подписи.     
         | 
|||
| 
    10
    
        Borteg    
     21.03.16 
            ✎
    13:19 
 | 
         
        (9) + с первого апреля этого года, проверка хэша в электронной подписи является обязательным условием для юридической значимости документа, если подпись не хранит хэш - документ не имеет силы     
         | 
|||
| 
    11
    
        Гость из Мариуполя    
     гуру 
    21.03.16 
            ✎
    13:39 
 | 
         
        (9) Я согласен, что шифруется и т.д. и т.п. Для двухстороннего обмена.
 
        Но.. не надо.. смешивать шифрование и подпись. Для признания юридической значимости документ не обязательно шифровать. Котировочные заявки на госзакупках, электронные аукционы, госконтракты по их итогам т.д.и т.п. Я для кого bus.gov.ru привел? могу еще на zakupki.gov.ru отправить. В общем. ситация схожая с (5) - сплошь и рядом. Так что для двухстороннего обмена - одно дело. Можно и шифровать, и обменяться открытыми ключами и т.д. Для документов же, выложенных в публичный доступ, можно использовать, к примеру - http://www.cryptopro.ru/sites/default/files/products/office-signature/2.0.11386/cryptopro_office_signature.pdf там и про хэширование, и крипто.net упомянут а также можно посмотреть, к примеру, вот сюда http://cryptoarm.ru  | 
|||
| 
    12
    
        Borteg    
     21.03.16 
            ✎
    13:52 
 | 
         
        (11) если у тебя нету открытого ключа ты не сможешь проверить подлинность подписи.     
         | 
|||
| 
    13
    
        Borteg    
     21.03.16 
            ✎
    13:52 
 | 
         
        (11) так же как и подлинность документа     
         | 
|||
| 
    14
    
        Help1с    
     21.03.16 
            ✎
    13:53 
 | 
         
        как бы это все в 1с реализовать...     
         | 
|||
| 
    15
    
        Serginio1    
     21.03.16 
            ✎
    14:06 
 | 
||||
| 
    16
    
        Serginio1    
     21.03.16 
            ✎
    14:11 
 | 
||||
| 
    17
    
        Serginio1    
     21.03.16 
            ✎
    14:23 
 | 
||||
| 
    18
    
        Help1с    
     21.03.16 
            ✎
    15:14 
 | 
         
        Serginio1 спасибо за ссылки. читаю :)     
         | 
|||
| 
    19
    
        Help1с    
     22.03.16 
            ✎
    09:21 
 | 
         
        нашел вот такой код:
 
        &НаКлиенте Процедура ПроверитьПодпись(Команда) МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "", 75); МенеджерКриптографии.ПроверитьПодпись("D:\ФайлДляПодписи.txt", "D:\Подпись.txt"); Сообщить("Подпись верна!"); КонецПроцедуры где лучше хранить подпись? у нас не будет файла. это я про свои пункты 2 и 3 из (1) - не нравится мне такая схема.  | 
|||
| 
    20
    
        Help1с    
     22.03.16 
            ✎
    12:37 
 | 
         
        Как лучше и как правильно связать подпись с контрагентом?
 
        когда мы получаем файл мы не знаем кто его отправил. нужно все имеющиеся подписи проверить? может есть более красивый вариант?  | 
|||
| 
    21
    
        Help1с    
     23.03.16 
            ✎
    14:04 
 | 
         
        Делаю:
 
        МенеджерКриптографии.ПроверитьСертификат(Сертификат); Выходит ошибка: Сертификат не предназначен для указанного использования что это?  | 
|||
| 
    22
    
        Serginio1    
     23.03.16 
            ✎
    15:03 
 | 
         
        А у тебя Крипто про то стоит?     
         | 
|||
| 
    23
    
        Help1с    
     24.03.16 
            ✎
    09:44 
 | 
         
        (22) да.     
         | 
|||
| 
    24
    
        Serginio1    
     24.03.16 
            ✎
    10:02 
 | 
         
        (23) Попробуй 7, пока в теме молчание
 
        Использование классов .Net в 1С для новичков  | 
|||
| 
    25
    
        Help1с    
     24.03.16 
            ✎
    11:35 
 | 
         
        (24) спасибо. почитаю.     
         | 
|||
| 
    26
    
        Help1с    
     24.03.16 
            ✎
    11:46 
 | 
         
        (25) не понятно куда копать, там не то что мне нужно. (     
         | 
|||
| 
    27
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    11:52 
 | 
         
        ТСу продавть СП еще не предлагали?
 
        СертификатКриптографии.ОткрытыйКлюч (CryptoCertificate.PublicKey) СертификатКриптографии (CryptoCertificate) ОткрытыйКлюч (PublicKey) Использование: Только чтение. Описание: Тип: ДвоичныеДанные. Содержит данные открытого ключа. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.  | 
|||
| 
    28
    
        Serginio1    
     24.03.16 
            ✎
    12:13 
 | 
         
        (26) Что из этого тебе не нужно
 
        КриптоПро .NET - программный продукт, позволяющий использовать средство криптографической защиты информации (СКЗИ) КриптоПро CSP на платформе Microsoft .NET Framework. КриптоПро .NET является новой версией существовавшего ранее программного продукта КриптоПро Sharpei и реализует набор интерфейсов для доступа к криптографическим операциям .NET Cryptographic Provider: хэширование; подпись; шифрование; MAC; генерация ключей и т.д.  | 
|||
| 
    29
    
        Help1с    
     24.03.16 
            ✎
    12:13 
 | 
         
        (27) сертификаты в системе я вижу. вопрос как прочитать сертификат и подпись в документе ексель.     
         | 
|||
| 
    30
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:20 
 | 
         
        (29) "Подпись" (ЭП/ЭЦП) это хеш файла (который подписываем) зашифрованный приватным (или открытым) ключем (из пары ключей открытый/приватный)
 
        "Проверка подписи" это берется изначальный файл и считается его хеш снова. Затем берется зашифрованный хеш, расшифровывается нужным ключем (вторым к тому которым был зашифрован). И сверяется 2 хеша на совпадение.  | 
|||
| 
    31
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:21 
 | 
         
        (30)+ Если хеш файла был зашифрован приватным ключем контрагента (которого у вас понятно нет он чужой).
 
        То проверять подпись нужно открытым ключем контрагента (взять его из сертификата ключа контрагента)  | 
|||
| 
    32
    
        Help1с    
     24.03.16 
            ✎
    12:27 
 | 
         
        (30) как можно получить изначальный файл?     
         | 
|||
| 
    33
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:29 
 | 
         
        (32) эээ, вам бы сферу деятельности сменить... точно знаю что дикая нехватка кадров есть в рабочих сферах     
         | 
|||
| 
    34
    
        Serginio1    
     24.03.16 
            ✎
    12:31 
 | 
||||
| 
    35
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:33 
 | 
         
        Обычно то что называют "подписанным файлом" это по сути просто зашифрованный изначальный файл (возможно к которому добавили его хеш) и зашифровали приватным ключем.
 
        Поэтому если расшифровать открытым ключем то и получится "исходный файл". Смотреть по размеру этого "подписанного" если он всегда одинаковый и не зависит от размера исходного то это только хеш с подписью. Если большой то сам файл исходный внутри.  | 
|||
| 
    36
    
        tank_25    
     24.03.16 
            ✎
    12:33 
 | 
         
        (33)(34)
 
        Какие все умные. Из встроенного языка 1С как получить первичный файл без подписи?  | 
|||
| 
    37
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:35 
 | 
         
        (35)+ И чтобы было понятно то шифрованный файл это когда подписывают открытым ключем получателя. Тогда только зная приватный ключ (получателя) можно расшифровать.
 
        Проверки подписи в этом смысле нет потому что открытый ключ получателя много кому известен.  | 
|||
| 
    38
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:35 
 | 
         
        (36) Обратиться к специалистам?     
         | 
|||
| 
    39
    
        tank_25    
     24.03.16 
            ✎
    12:36 
 | 
         
        (38) Вот обращаемся.
 
        Есть пример хотя бы приблизительный?  | 
|||
| 
    40
    
        tank_25    
     24.03.16 
            ✎
    12:37 
 | 
         
        +(39) Вот есть на входе файл с подписью, не зашифрованный.     
         | 
|||
| 
    41
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:39 
 | 
         
        (39) Платным специалистам     
         | 
|||
| 
    42
    
        Help1с    
     24.03.16 
            ✎
    12:42 
 | 
         
        (40) +1
 
        Дано: Файл Эксель подписанный контрагентом. Сертификат контрагента у нас отсутствует. Необходимо: Выполнить проверку действительности подписи, если подпись действительна, то выполняем операции с файлом. Еще нужно по полученному сертификату найти контрагента.  | 
|||
| 
    43
    
        tank_25    
     24.03.16 
            ✎
    12:43 
 | 
         
        (41) Понятно. Нет бы честно признаться, что средствами встроенного языка это сделать нельзя. Начинаются тут отмазки.     
         | 
|||
| 
    44
    
        Help1с    
     24.03.16 
            ✎
    12:44 
 | 
         
        (43) как я понял это можно сделать СОМ объектом, типа КапиКом, но он снят с поддержки, и у меня не получилось.     
         | 
|||
| 
    45
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:54 
 | 
         
        (42) >Сертификат контрагента у нас отсутствует. 
 
        У вас нет образца подписи совсем (в переводу на ручную). Что с чем вы собираетесь сверять?  | 
|||
| 
    46
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    12:55 
 | 
         
        (45)+ смените работу... пока вам ее принудительно не предложили поменять с такими знаниями     
         | 
|||
| 
    47
    
        Help1с    
     24.03.16 
            ✎
    12:58 
 | 
         
        (45) для начала нужно из файла получить сертификат. вы знаете как это сделать?     
         | 
|||
| 
    48
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:02 
 | 
         
        (47) А с какого перепугу там должен он быть?     
         | 
|||
| 
    49
    
        MishaD    
     24.03.16 
            ✎
    13:03 
 | 
         
        (47) надеюсь не из файла Excel ?     
         | 
|||
| 
    50
    
        Help1с    
     24.03.16 
            ✎
    13:04 
 | 
         
        (48) контрагент подписал файл эксель. нужно получить из этого эксель подпись, из подписи получить сертификат(ы) и проверить его на актуальность.     
         | 
|||
| 
    51
    
        Help1с    
     24.03.16 
            ✎
    13:05 
 | 
         
        (49) в том то и дело что из эксель.     
         | 
|||
| 
    52
    
        Help1с    
     24.03.16 
            ✎
    13:05 
 | 
         
        (50) + я так представляю порядок работы.     
         | 
|||
| 
    53
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:22 
 | 
         
        (50) >контрагент подписал файл эксель. нужно получить из этого эксель подпись, из подписи получить сертификат(ы) и проверить его на актуальность.
 
        Если вы сумеете это сделать то нобелевка за вскрытие криптографии вам обеспечена!  | 
|||
| 
    54
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:25 
 | 
         
        (53)+ причем сделать без использования отдельно переданного/полученного сертификата подписи контрагента (с открытым ключом внутри его)     
         | 
|||
| 
    55
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:27 
 | 
         
        (53)+ хотя насчет нобелевки это я погорячился... просто не доживете... раньше закопают     
         | 
|||
| 
    56
    
        Serginio1    
     24.03.16 
            ✎
    13:51 
 | 
||||
| 
    57
    
        Help1с    
     24.03.16 
            ✎
    13:52 
 | 
         
        (53) в чем проблема? я же визуально из экселя вижу подпись файла, могу провалиться в сертификат, сохранить его как файл.
 
        теперь это нужно сделать в 1с, чтобы пользователь не проверял наличие подписи визуально.  | 
|||
| 
    58
    
        Help1с    
     24.03.16 
            ✎
    13:55 
 | 
         
        (56) это не то. визуально ручками посмотреть подпись можем без проблем. как бы это автоматизировать.     
         | 
|||
| 
    59
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:55 
 | 
         
        (57) если в сам файл включен сертификат то надо его просто  оттуда вытащить логично же     
         | 
|||
| 
    60
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    13:56 
 | 
         
        (59) можно один раз и руками     
         | 
|||
| 
    61
    
        Help1с    
     24.03.16 
            ✎
    13:58 
 | 
         
        (59) в этом и вопрос. вы знаете как это сделать из 1с?     
         | 
|||
| 
    62
    
        DGorgoN    
     24.03.16 
            ✎
    14:01 
 | 
         
        (12) Шифрование бывает асинхронным, когда для проверки подавленности может быть 1 доступный публичный ключ, а вот для подписания документа уже закрытый.     
         | 
|||
| 
    63
    
        Serginio1    
     24.03.16 
            ✎
    14:06 
 | 
         
        http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=11&ved=0ahUKEwi-pYDPltnLAhXiJ5oKHbvvBQM4ChAWCBswAA&url=http%3A%2F%2Fwww.kmscity.ru%2Fassets%2Factivity%2Fmunzakaz%2Fproverka_zayavok.doc&usg=AFQjCNEmSSm18pPzc_eU8oZdGPAg5lYc_A
 
        МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по проверке заявок участников размещения заказов, направляемых заказчикам, уполномоченным органам в форме электронных документов, подписанных ЭЦП, для участия в открытых конкурсах и запросах котировок  | 
|||
| 
    64
    
        DGorgoN    
     24.03.16 
            ✎
    14:10 
 | 
||||
| 
    65
    
        Help1с    
     24.03.16 
            ✎
    14:15 
 | 
         
        (63) это не автоматизированная проверка. нужно этот алгоритм автоматизировать :)     
         | 
|||
| 
    66
    
        Help1с    
     24.03.16 
            ✎
    14:17 
 | 
         
        (64) это не то. (((     
         | 
|||
| 
    67
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    14:47 
 | 
         
        (61) если сертификат включен в подписанный файл то знаю, если не включен то никак
 
        500 руб в час  | 
|||
| 
    68
    
        Help1с    
     24.03.16 
            ✎
    15:11 
 | 
         
        (67) готов заплатить 500, если это действительно то что нужно.     
         | 
|||
| 
    69
    
        Serginio1    
     24.03.16 
            ✎
    15:19 
 | 
         
        (68) Ты хоть читал 63     
         | 
|||
| 
    70
    
        Serginio1    
     24.03.16 
            ✎
    15:20 
 | 
         
        Тебе нужно из файла сохранить сертификат     
         | 
|||
| 
    71
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    15:22 
 | 
         
        (68) ТЗ?     
         | 
|||
| 
    72
    
        Help1с    
     24.03.16 
            ✎
    15:29 
 | 
         
        (69) да. мне нужно чтобы это делало 1с. руками этоделать умеем.     
         | 
|||
| 
    73
    
        Help1с    
     24.03.16 
            ✎
    15:31 
 | 
         
        (71) файл подписан сертификатом. из файла получить подпись и сертификат.     
         | 
|||
| 
    74
    
        Serginio1    
     24.03.16 
            ✎
    15:50 
 | 
         
        (72) Смотри 7. Там есть примеры в SDK. В 1С не сможешь.     
         | 
|||
| 
    75
    
        Serginio1    
     24.03.16 
            ✎
    15:52 
 | 
         
        Вот пример только проверки подписи SOAP https://www.cryptopro.ru/blog/2012/05/16/podpis-soobshchenii-soap-dlya-smev-s-ispolzovaniem-kriptopro-net     
         | 
|||
| 
    76
    
        Garykom    
     гуру 
    24.03.16 
            ✎
    15:55 
 | 
         
        (73) насчет разных типов файлов и видов сертификатов с разными системами эцп в курсе?     
         | 
|||
| 
    77
    
        Serginio1    
     24.03.16 
            ✎
    16:14 
 | 
||||
| 
    78
    
        Help1с    
     25.03.16 
            ✎
    07:46 
 | 
         
        (76) я скину подписанный файл, нужно эту подпись прочитать и получить сертификат. желательно бесплатными средствами. договорились?     
         | 
|||
| 
    79
    
        Help1с    
     25.03.16 
            ✎
    08:07 
 | 
         
        (77) спасибо, хорошая ссылка!     
         | 
|||
| 
    80
    
        Help1с    
     25.03.16 
            ✎
    10:06 
 | 
         
        как перевести на 1с следующий код:
 
        Option Explicit Const CAPICOM_VERIFY_SIGNATURE_ONLY = 0 Const ForReading = 1 Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") ' Загрузка подписанных данных для проверки. Dim Message : Message = LoadFile("test.sig") ' Подпись совмещенная. oSignedData.Verify Message, False я вот так делаю: КапиКом = Новый COMОбъект("CAdESCOM.CadesSignedData"); Проверка = КапиКом.Verify(Файл); выходит ошибка: {Форма.Форма.Форма(22)}: Ошибка при вызове метода контекста (Verify) Проверка = КапиКом.Verify(Файл); по причине: Произошла исключительная ситуация (CAdESCOM.CadesSignedData.1): Встречено неверное значение тега ASN1.  | 
|||
| 
    81
    
        Help1с    
     25.03.16 
            ✎
    11:42 
 | 
         
        подниму     
         | 
|||
| 
    82
    
        Help1с    
     25.03.16 
            ✎
    14:11 
 | 
         
        ап     
         | 
|||
| 
    83
    
        Help1с    
     28.03.16 
            ✎
    10:05 
 | 
         
        попробую поднять     
         | 
|||
| 
    84
    
        Serginio1    
     28.03.16 
            ✎
    19:16 
 | 
         
        Попробуй 24     
         | 
|||
| 
    85
    
        Help1с    
     29.03.16 
            ✎
    07:17 
 | 
         
        (84) что такое 24?     
         | 
|||
| 
    86
    
        Serginio1    
     29.03.16 
            ✎
    07:59 
 | 
         
        (23) Попробуй 7, пока в теме молчание 
 
        Использование классов .Net в 1С для новичков http://www.cryptopro.ru/products/net Использование классов .Net в 1С для новичков  | 
|||
| 
    87
    
        Help1с    
     29.03.16 
            ✎
    08:05 
 | 
         
        (86) я так и пытаюсь сейчас сделать. вот это мне нужно как COMОбъект подключить. пока не нашел как. https://msdn.microsoft.com/ru-ru/library/system.io.packaging.packagedigitalsignaturemanager.packagedigitalsignaturemanager(v=vs.90).aspx     
         | 
|||
| 
    88
    
        Serginio1    
     29.03.16 
            ✎
    08:09 
 | 
         
        (87) Ты статью прочитай. Там все подробно описано http://catalog.mista.ru/public/448668/     
         | 
|||
| 
    89
    
        Serginio1    
     29.03.16 
            ✎
    08:14 
 | 
         
        PackageDigitalSignatureManager=Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll");     
         | 
|||
| 
    90
    
        Help1с    
     29.03.16 
            ✎
    08:14 
 | 
         
        (88) ошибка. не создает такой COM объект:
 
        врап=новый COMОбъект("NetObjectToIDispatch45")  | 
|||
| 
    91
    
        Help1с    
     29.03.16 
            ✎
    08:16 
 | 
         
        Ошибка при вызове конструктора (COMОбъект)
 
        врап=новый COMОбъект("NetObjectToIDispatch45"); по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса  | 
|||
| 
    92
    
        Help1с    
     29.03.16 
            ✎
    08:24 
 | 
         
        (89) в файле из статьи есть компонента NetObjectToIDispatch45? http://catalog.mista.ru/public/download.php?file=238585&pub=238584     
         | 
|||
| 
    93
    
        Serginio1    
     29.03.16 
            ✎
    08:35 
 | 
||||
| 
    94
    
        Help1с    
     29.03.16 
            ✎
    08:49 
 | 
         
        (93) спасибо. буду пробовать. кажется накнец-то нашел что нужно :)     
         | 
|||
| 
    95
    
        Help1с    
     29.03.16 
            ✎
    10:33 
 | 
         
        (89) COMОбъект создался. как до методов достучаться?     
         | 
|||
| 
    96
    
        Help1с    
     29.03.16 
            ✎
    10:35 
 | 
         
        пока не могу понять как с этим объектом работать. как ему передать подписанный файл для проверки     
         | 
|||
| 
    97
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    10:45 
 | 
         
        (96) Каким именно объектом? "NetObjectToIDispatch45" просто позволяет классы .net использовать из 1С.
 
        Не зная (не изучив) C# и .Net оно чем поможет?  | 
|||
| 
    98
    
        Help1с    
     29.03.16 
            ✎
    10:50 
 | 
         
        (97) надеюсь что поможет и смогу выполнить задачу. :)     
         | 
|||
| 
    99
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    10:58 
 | 
         
        (98) Каким образом?
 
        1. Каким образом сделана подпись в файлах? Средствами ms office или http://www.cryptopro.ru/products/office/signature или еще что 2. В курсе про https://ca.kontur.ru/faq/teh/43 - несовместимость в некоторых случая подписей? 3. Что будете делать если отправитель поменяет алгоритм подписи? Где тех мануал по подписям с отправителем/подписантом?  | 
|||
| 
    100
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    11:01 
 | 
         
        (99)+ для простоты и надежности обычно договариваются о том что к примеру используем КриптоПро одной версии, один стандарт ЭЦП и один вид контейнера внутри которого как в архиве любые уже документы. И подписан сам контейнер и уже стандартно все поддается автоматизации.     
         | 
|||
| 
    101
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    11:02 
 | 
         
        (100)+ А всяческие привязки в МС Офисам идут лесом, у нас он только на 2 компах к примеру есть и все в остальных LibreOffice и GoogleOffice     
         | 
|||
| 
    102
    
        Serginio1    
     29.03.16 
            ✎
    12:04 
 | 
         
        (99) Для этого и существуют сертификаты.
 
        Сертификат открытого ключа выдаётся центром сертификации и состоит из таких полей как: сам открытый ключ владельца сертификата, срок действия, имя эмитента (центра сертификации), имя владельца сертификата и, самой важной части, цифровой подписи. Цифровая подпись гарантирует невозможность подделки сертификата. Она является результатом криптографической хеш-функции от данных сертификата, зашифрованным закрытым ключом центра сертификации. Открытый ключ центра сертификации является общеизвестным, поэтому любой может расшифровать им цифровую подпись сертификата, затем вычислить хеш самостоятельно и сравнить, совпадают ли хеши. Если хеши совпадают — значит сертификат действительный и можно не сомневаться, что открытый ключ принадлежит именно тому с кем мы собираемся устанавливать соединение. Если Алиса сформирует сертификат со своим публичным ключом, и этот сертификат будет подписан третьей стороной (например, Трентом), любой, доверяющий Тренту, сможет удостовериться в подлинности открытого ключа Алисы. В централизованной инфраструктуре в роли Трента выступает удостоверяющий центр. В сетях доверия Трент может быть любым пользователем, и следует ли доверять этому пользователю, удостоверившему ключ Алисы, решает сам отправитель сообщения. В SSL используется целая цепочка доверия: сертификат подписывается открытым ключом владельца сертификата, находящегося выше в цепи.[1]  | 
|||
| 
    103
    
        Serginio1    
     29.03.16 
            ✎
    12:08 
 | 
         
        А в подписи может быть алгоитм хэширования и сам хэш     
         | 
|||
| 
    104
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    12:17 
 | 
         
        (102) (103) а еще можно взять сертификат и таким образом его засунуть в "подписанный файл" (ТС утверждает что внутри подписанных файлов офиса лежит сертификат)
 
        что потом хрен что кроме той же версии офиса и софта по засовыванию/высовыванию прочитать смогет  | 
|||
| 
    105
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    12:24 
 | 
         
        (104)+ и самое интересное что если "подписанный файл офиса" открывается любым офисом и зная что хеш при расчете не включает в себя сам хеш добавленный к файлу (иначе рекурсия)
 
        то нужно знать алгоритм расчета хеша, что нужно откинуть из файла чтобы получился после шифрования открытым ключом из сертификата (его тоже наверно надо вытаскивать перед подсчетом хеша) правильный зашифрованный хеш  | 
|||
| 
    106
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    12:25 
 | 
         
        (105)+ Перефразируя: без реверс-инжиниринга у ТС нифуя не выйдет...     
         | 
|||
| 
    107
    
        Serginio1    
     29.03.16 
            ✎
    12:33 
 | 
         
        (104) Да смотри 63. Есть специвльная область 
 
        https://www.cryptopro.ru/products/office/signature  | 
|||
| 
    108
    
        Serginio1    
     29.03.16 
            ✎
    12:52 
 | 
||||
| 
    109
    
        Serginio1    
     29.03.16 
            ✎
    13:18 
 | 
||||
| 
    110
    
        Help1с    
     29.03.16 
            ✎
    14:04 
 | 
         
        (99) 
 
        1. пока рассматриваем что средствами офиса. 2. нет, почитаю. 3. мы не можем на это повлиять. не вдаваясь в детали - по закону контрагент может сдавать документы подписанные ЭЦП, не важно как он их подписал, мы обязаны их принять.  | 
|||
| 
    111
    
        Help1с    
     29.03.16 
            ✎
    14:09 
 | 
         
        я еще вот что узнал - если файл екселя сохранить без расширения, то в тотал коммандере он отображается как папка. там есть _xmlsignatures. в этой папке есть файлики, похоже это и есть ЭЦП, но прочитать их не получается, файл в формате ХМЛ.     
         | 
|||
| 
    112
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    14:09 
 | 
         
        (110) Понятие "Контрагент" подразумевает по дефолту наличие "Договора" с ним.
 
        В него просто приложением стандартным и внутри ссылку на приложение. А в приложении уже стандарт ЭП/ЭЦП прописано все. И если умные менагеры/юристы и прочие считают что это не нужно то могу только посочувствовать. Пусть сидят и сами ручками подписи проверяют.  | 
|||
| 
    113
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    14:10 
 | 
         
        (111) docx|xlsx = zip архив с xml     
         | 
|||
| 
    114
    
        Help1с    
     29.03.16 
            ✎
    14:11 
 | 
         
        (112) так и будут проверять ручками исключительные ситуации. от этого скорее всего не уйти. пока мы (разработчики) не учтем все варианты.     
         | 
|||
| 
    115
    
        Garykom    
     гуру 
    29.03.16 
            ✎
    14:14 
 | 
||||
| 
    116
    
        Help1с    
     29.03.16 
            ✎
    14:31 
 | 
         
        (93) подскажи пожалуйста куда копапть? создал я КомОбъект (89), как методы использовать? или это еще не конечный комОбъект и мне нужно еще что-то создать?     
         | 
|||
| 
    117
    
        Help1с    
     29.03.16 
            ✎
    14:33 
 | 
         
        интересно почему через капиком не получилось. может у меня криптопро как-то криво установился.     
         | 
|||
| 
    118
    
        Serginio1    
     29.03.16 
            ✎
    15:26 
 | 
         
        (116) Смотри примеры КриптоПро.Net
 
        https://msdn.microsoft.com/ru-ru/library/office/ee526351.aspx  | 
|||
| 
    119
    
        Serginio1    
     29.03.16 
            ✎
    15:51 
 | 
||||
| 
    120
    
        Help1с    
     30.03.16 
            ✎
    08:07 
 | 
         
        (118) вот как я пытаюсь сделать:
 
        Врап = Новый COMОбъект("NetObjectToIDispatch45"); PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); ФайлВрап = Врап.ОбернутьЛюбойОбъект(ДДФайл); Врап.ВыполнитьМетод("PackageDigitalSignatureManager.IsSigned()",ФайлВрап); //НН = PackageDigitalSignatureManager.IsSigned(ДДФайл);  | 
|||
| 
    121
    
        Serginio1    
     30.03.16 
            ✎
    09:06 
 | 
         
        (120) Смотрим документациб
 
        https://msdn.microsoft.com/ru-ru/library/system.io.packaging.packagedigitalsignaturemanager.issigned(v=vs.110).aspx dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager,package); // Check to see if the package contains any signatures. Если не dsm.IsSigned Тогда return false; // The package is not signed. КонецЕсли; // Verify that all signatures are valid. VerifyResult result = dsm.VerifySignatures(false); Если не(result.Equals(Врап.ПолучитьТип(System.IO.Packaging.VerifyResult).Success) Тогда return false; // One or more digital signatures are invalid. КонецЕсли; // else if (result == VerifyResult.Success) return true; // All signatures are valid.  | 
|||
| 
    122
    
        Serginio1    
     30.03.16 
            ✎
    09:15 
 | 
         
        Теперь смотрим как создается package
 
        https://msdn.microsoft.com/ru-ru/library/system.io.packaging.package(v=vs.110).aspx У меня сейчас нет ни студии ни 1С. Строку нужно оборачивать только тогда когда нужно вызваит метод String. ВыполнитьМетод тоже когда метд не выполнянтся при этом его сигнатура такая на предыдущнм примере Врап.ВыполнитьМетод(dsm,"VerifySignatures",ложь); IsSigned это свойство  | 
|||
| 
    123
    
        Help1с    
     30.03.16 
            ✎
    09:25 
 | 
         
        (121) я вот какой пример смотрю из документации:
 
        // Пример проверки подписи документа Office. using System; using System.Security.Cryptography.X509Certificates; using System.IO.Packaging; namespace Simple35.Office { public class Verify { [STAThread] public static int Main(string[] args) { // Разбираем аргументы if (args.Length < 1) { Console.WriteLine("Office.Verify <document>"); return 1; } string document = args[0]; // Открываем документ using (Package package = Package.Open(document)) { PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package); if (!dsm.IsSigned) { Console.WriteLine("Документ не подписан."); return 1; } int count = 1; foreach (PackageDigitalSignature pds in dsm.Signatures) { Console.WriteLine("Подпись {0} на сертификате {1}.", count++, pds.Signer); VerifyResult result = pds.Verify(); if (result == VerifyResult.Success) Console.WriteLine(" подпись верна."); else Console.WriteLine(" подпись не верна:{0}", result); X509Chain chain = new X509Chain(); if (chain.Build(new X509Certificate2(pds.Signer))) Console.WriteLine(" сертификат действителен"); else Console.WriteLine(" сертификат недействителен"); } VerifyResult res = dsm.VerifySignatures(false); if (res != VerifyResult.Success) { Console.WriteLine("Одна или несколько подписей неверны"); } } return 0; } } }  | 
|||
| 
    124
    
        Serginio1    
     30.03.16 
            ✎
    09:34 
 | 
         
        Значит ты уже получаешь файл
 
        Тогда package = Врап.ПолучитьТип("System.IO.Packaging").Open(document) Ну и дальше тебе работать с сертификатами https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chain(v=vs.110).aspx Все по аналогии  | 
|||
| 
    125
    
        Serginio1    
     30.03.16 
            ✎
    09:36 
 | 
         
        То есть
 
        foreach (PackageDigitalSignature pds in dsm.Signatures) По русски Для каждого pds in dsm.Signatures Цикл  | 
|||
| 
    126
    
        Serginio1    
     30.03.16 
            ✎
    09:39 
 | 
         
        Кстати создав
 
        Сертификат=Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2",pds.Signer) Ты получаешь достуа к свойствам https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate2_properties(v=vs.110).aspx  | 
|||
| 
    127
    
        Help1с    
     30.03.16 
            ✎
    09:40 
 | 
         
        (124) какой должен быть формат у переменной document? ДвоичныеДанные, Файл, Полный путь не проходят, выходит сообщение неверный тип System.IO.Packaging.
 
        или он именно на "System.IO.Packaging" ругается?  | 
|||
| 
    128
    
        Help1с    
     30.03.16 
            ✎
    09:50 
 | 
         
        первая строка отрабатывается, вторая - нет. если первую закомментировать - то выполняется, но с ошибкой (127)
 
        PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); package = Врап.ПолучитьТип("System.IO.Packaging").Open(Файл);  | 
|||
| 
    129
    
        Help1с    
     30.03.16 
            ✎
    09:53 
 | 
         
        (128) + вот так отрабатывается :)
 
        Врап.ПолучитьТип("System.IO.Packaging.Package")  | 
|||
| 
    130
    
        Help1с    
     30.03.16 
            ✎
    09:59 
 | 
         
        файл с подписью завис открытым после выполнения Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл);
 
        как его закрыть?  | 
|||
| 
    131
    
        Serginio1    
     30.03.16 
            ✎
    10:00 
 | 
         
        (127) Строка. Смотри документацию 
 
        https://msdn.microsoft.com/ru-ru/library/ms568185(v=vs.110).aspx  | 
|||
| 
    132
    
        Help1с    
     30.03.16 
            ✎
    10:02 
 | 
         
        (129) + ничего не менял, но снова перестала работать данная строка кода Врап.ПолучитьТип("System.IO.Packaging.Package")     
         | 
|||
| 
    133
    
        Serginio1    
     30.03.16 
            ✎
    10:02 
 | 
         
        package.Close()
 
        Иди Врап.ЗакрытьРесурс(package)  | 
|||
| 
    134
    
        Serginio1    
     30.03.16 
            ✎
    10:04 
 | 
         
        (132) И какую ошибку выдает     
         | 
|||
| 
    135
    
        zak555    
     30.03.16 
            ✎
    10:05 
 | 
         
        чем вариант (19) не подходит ?     
         | 
|||
| 
    136
    
        Help1с    
     30.03.16 
            ✎
    10:06 
 | 
         
        (134) неверный тип System.IO.Packaging.Package     
         | 
|||
| 
    137
    
        Serginio1    
     30.03.16 
            ✎
    10:07 
 | 
         
        package = Врап.ПолучитьТип("System.IO.Packaging.ZipPackage").Open(Файл);     
         | 
|||
| 
    138
    
        Help1с    
     30.03.16 
            ✎
    10:07 
 | 
         
        (135) у меня нет подписи. она содержится в документе Excel, если бы вытащить эту подпись из файла, то возможно подошло бы.     
         | 
|||
| 
    139
    
        zak555    
     30.03.16 
            ✎
    10:08 
 | 
         
        (138) я ж вчера писал, как это сделать     
         | 
|||
| 
    140
    
        zak555    
     30.03.16 
            ✎
    10:09 
 | 
         
        (138) ЭЦП, Сертификат, Подпись. Что есть что? -- последний пост     
         | 
|||
| 
    141
    
        Serginio1    
     30.03.16 
            ✎
    10:09 
 | 
         
        Врап.ПолучитьТипИзСборки("SSystem.IO.Packaging.Package","WindowsBase.dll");     
         | 
|||
| 
    142
    
        Help1с    
     30.03.16 
            ✎
    10:09 
 | 
         
        (139) упс. не видел. посмотрю обязательно. пока меня заинтересовала работа с .НЕТ.  :)     
         | 
|||
| 
    143
    
        Help1с    
     30.03.16 
            ✎
    10:11 
 | 
         
        (141) вот что выполняю:
 
        Врап = Новый COMОбъект("NetObjectToIDispatch45"); package = Врап.ПолучитьТип("System.IO.Packaging.ZipPackage").Open(Файл); при первом проходе отладчика пишет что метод ПолучитьТип не найден. при втором проходе отладчика ошибка (136)  | 
|||
| 
    144
    
        zak555    
     30.03.16 
            ✎
    10:11 
 | 
         
        (142) зачем тебе этот дот ?
 
        перейдёшь на линь -- что будешь делать ?  | 
|||
| 
    145
    
        Serginio1    
     30.03.16 
            ✎
    10:12 
 | 
         
        (143) Потому, что у тебя WindowsBase.dll не подгружена
 
        Врап.ПолучитьТипИзСборки("SSystem.IO.Packaging.ZipPackage","WindowsBase.dll");  | 
|||
| 
    146
    
        Help1с    
     30.03.16 
            ✎
    10:13 
 | 
         
        (140) там требуется наличие Файла Подписи, а его нет. Пробовал передать файл экселя - не работает.     
         | 
|||
| 
    147
    
        Serginio1    
     30.03.16 
            ✎
    10:14 
 | 
         
        (144) ССЗБ?     
         | 
|||
| 
    148
    
        zak555    
     30.03.16 
            ✎
    10:15 
 | 
         
        (146) получаешь сертификат с помощью ПолучитьСертификатыИзПодписи     
         | 
|||
| 
    149
    
        Serginio1    
     30.03.16 
            ✎
    10:16 
 | 
         
        (143) Почитай статьи
 
        http://catalog.mista.ru/public/448668/ http://catalog.mista.ru/public/238584/ Мне надо бежать  | 
|||
| 
    150
    
        Help1с    
     30.03.16 
            ✎
    10:19 
 | 
         
        (149) большое спасибо. статьи читал. ты мне очень помогаешь, возвращайся :)     
         | 
|||
| 
    151
    
        Help1с    
     30.03.16 
            ✎
    10:20 
 | 
         
        (148) Сртификат я может и смогу получить. а вот саму Подпись из файла екселя никак. (     
         | 
|||
| 
    152
    
        zak555    
     30.03.16 
            ✎
    10:24 
 | 
         
        (151) ещё раз цитата СП
 
        ПолучитьСертификатыИзПодписи(<ИсходныеДанные>) Параметры: <ИсходныеДанные> (обязательный) Тип: Строка: ДвоичныеДанные. Исходные данные, из которых будет извлечен сертификат. Данные могут размещаться в файле (в этом случае указывается имя файла) или представлены как ДвоичныеДанные. Возвращаемое значение: Тип: Массив. Содержит объекты СертификатКриптографии. Описание: Извлекает массив сертификатов из данных подписи.  | 
|||
| 
    153
    
        Help1с    
     30.03.16 
            ✎
    10:27 
 | 
         
        (152) в последней строке указано что из данных подписи. у меня нет этих данных, они в файде экселя. не может этот метод прочитать эксель.     
         | 
|||
| 
    154
    
        zak555    
     30.03.16 
            ✎
    10:28 
 | 
         
        (153) код какой использовал ?     
         | 
|||
| 
    155
    
        Help1с    
     30.03.16 
            ✎
    10:33 
 | 
         
        (154) в качестве параметра Файл передавал различные варианты, и ДвоичныеДанные и Файл, и Путь.
 
        //МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider","",75); //СертификатИзПодписи = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(Файл);  | 
|||
| 
    156
    
        zak555    
     30.03.16 
            ✎
    10:35 
 | 
         
        (155) какой результат ?     
         | 
|||
| 
    157
    
        zak555    
     30.03.16 
            ✎
    10:43 
 | 
         
        // Подпись не была прочитана при записи объекта.
 
        ДвоичныеДанныеФайлаЭП = ПолучитьИзВременногоХранилища(Подпись.АдресЭП); Попытка Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(ДвоичныеДанныеФайлаЭП); Исключение ШаблонСообщения = НСтр("ru = 'Получение сертификатов из подписи: %1'"); ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Прервать; КонецПопытки;  | 
|||
| 
    158
    
        Help1с    
     30.03.16 
            ✎
    10:50 
 | 
         
        (156) Ошибка при вызове метода контекста (ПолучитьСертификатыИзПодписи)
 
        СертификатИзПодписи = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(Файл); по причине: Ошибка при чтении криптографических данных (2).  | 
|||
| 
    159
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    10:50 
 | 
         
        (144) под линь многие .net проги нативно идут без перекомпиляции, прикинь да?
 
        достаточно сделать apt-get install mono-devel mono-complete а затем в консоли >mono Hello.exe  | 
|||
| 
    160
    
        Help1с    
     30.03.16 
            ✎
    10:52 
 | 
         
        как в 1с вот эту операцию перевести? 
 
        PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package);  | 
|||
| 
    161
    
        Help1с    
     30.03.16 
            ✎
    10:52 
 | 
         
        не могу присвоить значение dsm     
         | 
|||
| 
    162
    
        zak555    
     30.03.16 
            ✎
    10:55 
 | 
         
        (158) БП есть ?
 
        код оттуда там принцип какой ... к тебе приходит XML пакет, подписанный КЭП этот пакет пишут в справочник, потом пихает в двоичные данные, получают КЭП и этот серт пишут в справочник  | 
|||
| 
    163
    
        Help1с    
     30.03.16 
            ✎
    12:16 
 | 
         
        (162) БП нет, попробую посмотреть если этот вариант не получится. мне кажется там есть некий формат ХМЛ, возможно не получится из файла экселя     
         | 
|||
| 
    164
    
        zak555    
     30.03.16 
            ✎
    12:21 
 | 
         
        (163) в бп можно обмениваться произвольным документом, причём подписав его как с одной стороны, так и с другой     
         | 
|||
| 
    165
    
        Help1с    
     30.03.16 
            ✎
    12:30 
 | 
         
        (164) т.е. подписывается не сам файл, а некий пакет? при этом в базе есть сертификат отправителя. вроде так в ЭДО сделано. у нас же нет сертификата контрагента, мы его первый раз получаем.     
         | 
|||
| 
    166
    
        tank_25    
     30.03.16 
            ✎
    12:40 
 | 
         
        Я извиняюсь, но чтоб не создаю новую тему спрошу.
 
        Можно ли средствами встроенного языка снять подпись с подписанного файла?  | 
|||
| 
    167
    
        zak555    
     30.03.16 
            ✎
    12:56 
 | 
         
        (165) именно сам файл
 
        в терминах 1с -- это пакетЭДО  | 
|||
| 
    168
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    13:02 
 | 
         
        (166) Да, можно     
         | 
|||
| 
    169
    
        Help1с    
     30.03.16 
            ✎
    13:06 
 | 
         
        (167) ок. посмотрю. 
 
        (166) МенеджерКриптографии не умеет это делать.  | 
|||
| 
    170
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    13:07 
 | 
         
        (169) А про менеджер никто и ни спрашивал, а средствами языка можно     
         | 
|||
| 
    171
    
        Help1с    
     30.03.16 
            ✎
    13:12 
 | 
         
        (170) ну так-то я тоже средствами языка пытаюсь сделать, но используя внешние компоненты :)     
         | 
|||
| 
    172
    
        Help1с    
     30.03.16 
            ✎
    13:21 
 | 
         
        Выполняю:
 
        Врап = Новый COMОбъект("NetObjectToIDispatch45"); PackageZIP = Врап.ПолучитьТипИзСборки("System.IO.Packaging.ZipPackage","WindowsBase.dll"); package = Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл); PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); dsm = Врап.ВыполнитьМетод("PackageDigitalSignatureManager.Signatures(package)", package); Выдает ошибку: Ошибка в методе [DISPID=0] Не найден метод "System.IO.Packaging.ZipPackage.ToString". mscorlib  | 
|||
| 
    173
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    13:25 
 | 
         
        (171) А вам пора профессию поменять...     
         | 
|||
| 
    174
    
        Serginio1    
     30.03.16 
            ✎
    13:38 
 | 
         
        (172) Смотри 121     
         | 
|||
| 
    175
    
        Serginio1    
     30.03.16 
            ✎
    13:49 
 | 
         
        Должен работать такой код
 
        PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); package = Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл); dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager,package); Ну и дальше. https://msdn.microsoft.com/ru-ru/library/ms568185(v=vs.110).aspx ZipPackage представляет собой тип пакета, используемый по умолчанию методом Open.  | 
|||
| 
    176
    
        Help1с    
     30.03.16 
            ✎
    15:12 
 | 
         
        (174) огромное спасибо. сейчас вот этот код работает, пока не знаю правильно или нет, но работает :)
 
        Сейчас проверю с просроченными сертификатами. ДДФайл = Новый ДвоичныеДанные(Файл); ФФайл = Новый Файл(Файл); Попытка Врап = Новый COMОбъект("NetObjectToIDispatch45"); PackageZIP = Врап.ПолучитьТипИзСборки("System.IO.Packaging.Package","WindowsBase.dll"); package = Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл); PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager, package); Если НЕ dsm.IsSigned Тогда Сообщить("Файл " + Файл + " не содержит подписи"); КонецЕсли; Для каждого pds Из dsm.Signatures Цикл //Сертификат = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2",pds.Signer); Результат = dsm.VerifySignatures(false); Если не Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда Сообщить("Подпись не верна"); // One or more digital signatures Иначе Сообщить("Подпись верна"); КонецЕсли; КонецЦикла; Исключение КонецПопытки; Попытка Врап.ЗакрытьРесурс(package); Исключение Сообщить("Закрыть не удалось"); КонецПопытки;  | 
|||
| 
    177
    
        Serginio1    
     30.03.16 
            ✎
    15:17 
 | 
         
        Если ты уже загрузил сборку
 
        PackageZIP = Врап.ПолучитьТипИзСборки("System.IO.Packaging.Package","WindowsBase.dll"); То для получения типа из этой сборки можно импользовать просто PackageDigitalSignatureManager = Врап.ПолучитьТип("System.IO.Packaging.PackageDigitalSignatureManager");  | 
|||
| 
    178
    
        tank_25    
     30.03.16 
            ✎
    15:19 
 | 
         
        (168) Каким способом? Если не трудно, то хотя бы намек в сторону решения. Желательно под линукс.     
         | 
|||
| 
    179
    
        Help1с    
     30.03.16 
            ✎
    15:21 
 | 
         
        (177) ок. спасибо. :)     
         | 
|||
| 
    180
    
        Help1с    
     30.03.16 
            ✎
    15:22 
 | 
         
        просроченный сертификат прошел проверку. буду дальше смотреть что не так. 
 
        Если не Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда Сообщить("Подпись не верна"); // One or more digital signatures Иначе Сообщить("Подпись верна"); КонецЕсли;  | 
|||
| 
    181
    
        Serginio1    
     30.03.16 
            ✎
    15:25 
 | 
         
        (180) Проверь сертификат
 
        chain = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain"; Ну и дальше if (chain.Build(new X509Certificate2(pds.Signer))) Console.WriteLine(" сертификат действителен"); else Console.WriteLine(" сертификат недействителен");  | 
|||
| 
    182
    
        zak555    
     30.03.16 
            ✎
    15:32 
 | 
         
        (169) > МенеджерКриптографии не умеет это делать
 
        как это ?  | 
|||
| 
    183
    
        Serginio1    
     30.03.16 
            ✎
    15:39 
 | 
         
        181 Проверь свойство NotAfter    
 
        Получает дату в формате местного времени, после которой сертификат недействителен. https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate2_properties(v=vs.110).aspx  | 
|||
| 
    184
    
        Help1с    
     30.03.16 
            ✎
    15:44 
 | 
         
        (183) вот этот код работает, подписал файл старым сертификатом и новым. выдал два сообщения действителен и не действителен.
 
        ДДФайл = Новый ДвоичныеДанные(Файл); ФФайл = Новый Файл(Файл); Попытка Врап = Новый COMОбъект("NetObjectToIDispatch45"); PackageZIP = Врап.ПолучитьТипИзСборки("System.IO.Packaging.Package","WindowsBase.dll"); package = Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл); PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll"); dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager, package); Если НЕ dsm.IsSigned Тогда Сообщить("Файл " + Файл + " не содержит подписи"); КонецЕсли; Для каждого pds Из dsm.Signatures Цикл //Сертификат = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2",pds.Signer); Результат = dsm.VerifySignatures(false); Если не Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда Сообщить("Подписи нет"); Иначе Сообщить("Подпись есть"); КонецЕсли; chain = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain"); Если chain.Build(pds.Signer) Тогда Сообщить(" сертификат действителен"); Иначе Сообщить(" сертификат недействителен"); КонецЕсли; КонецЦикла; Исключение КонецПопытки; Попытка Врап.ЗакрытьРесурс(package); Исключение Сообщить("Закрыть не удалось"); КонецПопытки;  | 
|||
| 
    185
    
        Help1с    
     30.03.16 
            ✎
    15:49 
 | 
         
        (184) + позже попробую разобрать состав сертификата, чтобы прочитать владельца сертификата. пора уходить.
 
        Serginio1 еще раз - огромное спасибо!!! :)  | 
|||
| 
    186
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    15:57 
 | 
         
        (184) (185) Вот интересно каким образом умение создавать свои подписи (неким методом) и проверять их.
 
        Может помочь проверить чужую подпись созданную совсем другими методами?  | 
|||
| 
    187
    
        Serginio1    
     30.03.16 
            ✎
    17:38 
 | 
         
        (186) Это как раз проверка чужой подписи Word или Excel
 
        http://stackoverflow.com/questions/17791504/how-to-sign-on-office-documents-with-sha256-384-512-using-packagedigitalsignatur  | 
|||
| 
    188
    
        Serginio1    
     30.03.16 
            ✎
    17:43 
 | 
         
        С крипто про идут примеры
 
        http://cpdn.cryptopro.ru/default.asp?url=content/cpnet/html/d5da1068-67b6-4247-bb41-4d1bd1e99974.htm http://cpdn.cryptopro.ru/default.asp?url=content/cpnet/html/d5da1068-67b6-4247-bb41-4d1bd1e99974.htm Данный пример демонстрирует использование метода VerifySignatures класса PackageDigitalSignatureManager для проверки подписи документа MS Office.  | 
|||
| 
    189
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    17:43 
 | 
         
        (187) Каким образом узнали что это именно та подпись? Где у ТС сказано каким образом подписываются документы, какой вообще версии офиса и т.д. Какой алгоритм хеша который подписан.     
         | 
|||
| 
    190
    
        Serginio1    
     30.03.16 
            ✎
    17:46 
 | 
         
        (189) В подписи и сертификате все есть     
         | 
|||
| 
    191
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    17:47 
 | 
         
        (188) ТСу пришлют файл подписанный в "Офис 2020"... что будет дальше?
 
        Не кажется что намного проще позвонить/написать отправителям их тех спецам и все выяснить?  | 
|||
| 
    192
    
        Serginio1    
     30.03.16 
            ✎
    17:48 
 | 
         
        А там и ерсия особо то и нужна. документа MS Office это есть Zip файл. И там лежит подписью
 
        (191) Если проверку не пройдет тогда и позвонят  | 
|||
| 
    193
    
        Help1с    
     30.03.16 
            ✎
    18:42 
 | 
         
        (186) мы не создаем подписи. контрагенты нам присылают подписанные документы. чтобы не проверять вручную подпись делаю обработку. проверять будем чужие подписи. как я понял для этого метода не важно что за подпись, он любую может прочитать, как в самом офисе.
 
        сейчас проверил подпись, которую я сам создал, результат - сертификат действителен. наверно потому что я добавлял сертификат в доверенные. надо на чистом компе будет проверить, т.к. по идее такой сертификат мы не должны признавать.  | 
|||
| 
    194
    
        Help1с    
     30.03.16 
            ✎
    18:43 
 | 
         
        (188) да. я этот пример и рассматривал. выкладывал код выше :)     
         | 
|||
| 
    195
    
        zak555    
     30.03.16 
            ✎
    18:44 
 | 
         
        Help1с пришли мне свой файл подписанный, я его 1с-кой попробую распаковать     
         | 
|||
| 
    196
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    18:49 
 | 
         
        (193) контактов контрагентов нет? 
        Не логичнее было бы сначала с ними попытаться проблему решить а не на форумах без предоставления полной инфы?  | 
|||
| 
    197
    
        Help1с    
     30.03.16 
            ✎
    18:51 
 | 
         
        (191) (196) долго объяснять. если коротко - массово так не получится. и зачем, если есть возможность написать код для чтения любых подписей.     
         | 
|||
| 
    198
    
        Help1с    
     30.03.16 
            ✎
    18:51 
 | 
         
        (195) отправил     
         | 
|||
| 
    199
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    18:56 
 | 
         
        (197) заодно напишите код для распознания и сверки любых графических (обычных ручных в виде картинки) подписей...
 
        а еще сразу для загрузки данных из любых форматов... и проигрывания любых аудио/видео файлов... даже тех которые еще только в будущем изобретут а что удобно же, изобрели новый формат а у вас уже есть код для проигрывания  | 
|||
| 
    200
    
        Московский    
     30.03.16 
            ✎
    19:02 
 | 
         
        200!     
         | 
|||
| 
    201
    
        Help1с    
     30.03.16 
            ✎
    19:04 
 | 
         
        (199) мне не понятно - что тебя не устраивает? )     
         | 
|||
| 
    202
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    19:06 
 | 
         
        (201) Меня идиотизм длительно не лечащийся удивляет     
         | 
|||
| 
    203
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    19:08 
 | 
         
        Если знать как именно подписывает (каким софтом и как) контрагент доки то можно (при наличии инструментов или хотя бы мануала) сделать проверку подписи (если все есть в т.ч. сертификаты с алгоритмами)
 
        Но сделать это "для любых подписей" равнозначно (199)  | 
|||
| 
    204
    
        Help1с    
     30.03.16 
            ✎
    19:11 
 | 
         
        (202) тут можно долго дискутировать, но вряд ли мы поймем друг друга. 
 
        то что делаю я - решает вопрос проверки подписи(я надеюсь). то что предлагаешь ты - решает один возможный сценарий.  | 
|||
| 
    205
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    19:12 
 | 
         
        (204) Сорри забыл в личку заглянуть... 86 же     
         | 
|||
| 
    206
    
        Help1с    
     30.03.16 
            ✎
    19:16 
 | 
         
        (205) и вот на этом я предлагаю завершить спор что так делать не нужно было.  :)     
         | 
|||
| 
    207
    
        Serginio1    
     30.03.16 
            ✎
    21:19 
 | 
         
        (206) Предлагаю, тебе и zak555 написать статьи про иапользование ЭЦП     
         | 
|||
| 
    208
    
        zak555    
     30.03.16 
            ✎
    21:23 
 | 
         
        (198) получил     
         | 
|||
| 
    209
    
        zak555    
     30.03.16 
            ✎
    21:23 
 | 
         
        (207) денег дадут ? )     
         | 
|||
| 
    210
    
        Serginio1    
     30.03.16 
            ✎
    21:26 
 | 
         
        На ифостарте целых 10 старт мани. Если получишь 50 звездочек еще 30. Можешь выложить файлы и за каждую скачку 0.8 с каждой скачки. Заживешь ....
 
        Главное другим поможешь  | 
|||
| 
    211
    
        Garykom    
     гуру 
    30.03.16 
            ✎
    21:32 
 | 
         
        Лучше не просто статью а готовые обработки со всем необходимым (а уж если на vipnet бесплатных) для простой реализации ЭЦП в 1С     
         | 
|||
| 
    212
    
        Help1с    
     31.03.16 
            ✎
    06:14 
 | 
         
        (207) есть такая мысль. потому что много интернета перекапал, но не нашел готового решения. (210) цель - помочь таким же как я, чтоб не приходилось изобретать велосипед. :)     
         | 
|||
| 
    213
    
        Help1с    
     31.03.16 
            ✎
    10:52 
 | 
         
        не работает метод VerifyCertificate(X509Certificate).
 
        https://msdn.microsoft.com/ru-ru/library/system.io.packaging.packagedigitalsignaturemanager_methods(v=vs.110).aspx здесь указано некий System_Caps_Static, что это? dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager, package); Если НЕ dsm.IsSigned Тогда Сообщить("Файл " + Файл + " не содержит подписи"); КонецЕсли; Для каждого pds Из dsm.Signatures Цикл Результат2= dsm.VerifyCertificate(); //не работает Результат = dsm.VerifySignatures(false); //работает  | 
|||
| 
    214
    
        oleg_km    
     31.03.16 
            ✎
    11:03 
 | 
         
        (213)
 
        dsm.VerifyCertificate() - статический метод, а ты вызываешь его из экземпляра объекта. Его нужно вызывать из типа, или как там сейчас у Сергея реализовано.  | 
|||
| 
    215
    
        Serginio1    
     31.03.16 
            ✎
    11:03 
 | 
         
        Так ты должен иметь или подучить сертификат
 
        foreach (PackageDigitalSignature pds in dsm.Signatures) { Console.WriteLine("Подпись {0} на сертификате {1}.", count++, pds.Signer); VerifyResult result = pds.Verify(); if (result == VerifyResult.Success) Console.WriteLine(" подпись верна."); else Console.WriteLine(" подпись не верна:{0}", result); X509Chain chain = new X509Chain(); if (chain.Build(new X509Certificate2(pds.Signer))) Console.WriteLine(" сертификат действителен"); else Console.WriteLine(" сертификат недействителен"); }  | 
|||
| 
    216
    
        Serginio1    
     31.03.16 
            ✎
    11:04 
 | 
||||
| 
    217
    
        Help1с    
     31.03.16 
            ✎
    12:22 
 | 
         
        (215) сертификат я получил 
 
        chain = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain", pds.Signature);  | 
|||
| 
    218
    
        Help1с    
     31.03.16 
            ✎
    12:26 
 | 
         
        (214) кажется понял о чем речь. сейчас проверю.     
         | 
|||
| 
    219
    
        Serginio1    
     31.03.16 
            ✎
    12:37 
 | 
         
        (217)Да там статический метод
 
        Сертификат= Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain", pds.Signature); X509ChainStatusFlags =PackageDigitalSignatureManager.VerifySignatures(Сертификат);  | 
|||
| 
    220
    
        Serginio1    
     31.03.16 
            ✎
    12:41 
 | 
         
        Проверяй на NoError
 
        https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chainstatusflags(v=vs.110).aspx X509ChainStatusFlags.Equals(Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509ChainStatusFlags").NoError)  | 
|||
| 
    221
    
        Serginio1    
     31.03.16 
            ✎
    12:49 
 | 
         
        Но вообще то у сертификата есть метод
 
        public bool Verify() https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate2.verify(v=vs.110).aspx Если не Сертификат.Verify() Тогда  | 
|||
| 
    222
    
        Serginio1    
     31.03.16 
            ✎
    12:57 
 | 
||||
| 
    223
    
        Serginio1    
     01.04.16 
            ✎
    11:47 
 | 
         
        Кстати https://blogs.msdn.microsoft.com/dotnet/2016/03/30/announcing-the-net-framework-4-6-2-preview/
 
        Cryptography X509 Certificates Now Support FIPS 186-3 DSA The .NET Framework 4.6.2 adds support for DSA (Digital Signature Algorithm) X509 certificates whose keys exceed the FIPS 186-2 limit of 1024-bit. In addition to supporting the larger key sizes of FIPS 186-3, the .NET Framework 4.6.2 allows computing signatures with the SHA-2 family of hash algorithms (SHA256, SHA384, and SHA512). The FIPS 186-3 support is provided by the new DSACng class. Keeping in line with recent changes to RSA (.NET Framework 4.6) and ECDsa (.NET Framework 4.6.1), the DSA abstract base class has additional methods to allow callers to make use of this functionality without casting. public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert) { using (DSA dsa = cert.GetDSAPrivateKey()) { return dsa.SignData(data, HashAlgorithmName.SHA384); } } public static void VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert) { using (DSA dsa = cert.GetDSAPublicKey()) { return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384); } }  | 
|||
| 
    224
    
        Help1с    
     04.04.16 
            ✎
    09:24 
 | 
         
        Как сделать так, чтобы ChainPolicy проверял сертификат? как передать ему? по всякому уже испробовал.
 
        X509RevocationMode = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509RevocationMode"); X509RevocationMode.Equals(Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509ChainStatusFlags").NoError); ChainPolicy = chain.ChainPolicy; //ChainPolicy = chain.ChainPolicy.RevocationMode.Equals(Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509RevocationMode").Online); //ChainPolicy = chain.ChainPolicy.RevocationMode(pds.Signer); Сообщить("Chain revocation flag: {0}" + ChainPolicy.RevocationFlag); // X509RevocationMode.RevocationFlag Сообщить("Chain revocation mode: {0}" + ChainPolicy.RevocationMode); Сообщить("Chain verification flag: {0}" + ChainPolicy.VerificationFlags); Сообщить("Chain verification time: {0}" + ChainPolicy.VerificationTime); //Сообщить("Chain status length: {0}" + ChainStatus.Length); Сообщить("Chain application policy count: {0}" + ChainPolicy.ApplicationPolicy.Count); Сообщить("Chain certificate policy count: {0} {1}" + ChainPolicy.CertificatePolicy.Count); // + " " + Environment.NewLine);  | 
|||
| 
    225
    
        Help1с    
     04.04.16 
            ✎
    10:15 
 | 
         
        (223) интересно. сначала реализую как сейчас делаю, потом можно будет и так попробовать. )     
         | 
|||
| 
    226
    
        Serginio1    
     04.04.16 
            ✎
    11:19 
 | 
         
        (224) Смотрим https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chain.chainpolicy(v=vs.110).aspx
 
        selected certificate. X509Chain ch = new X509Chain(); ch.Build (certificate); Console.WriteLine ("Chain Information"); ch.ChainPolicy.RevocationMode = X509RevocationMode.Online; Console.WriteLine ("Chain revocation flag: {0}", ch.ChainPolicy.RevocationFlag); Console.WriteLine ("Chain revocation mode: {0}", ch.ChainPolicy.RevocationMode); Console.WriteLine ("Chain verification flag: {0}", ch.ChainPolicy.VerificationFlags); Console.WriteLine ("Chain verification time: {0}", ch.ChainPolicy.VerificationTime); Console.WriteLine ("Chain status length: {0}", ch.ChainStatus.Length); Console.WriteLine ("Chain application policy count: {0}", ch.ChainPolicy.ApplicationPolicy.Count); Console.WriteLine ("Chain certificate policy count: {0} {1}", ch.ChainPolicy.CertificatePolicy.Count, Environment.NewLine);  | 
|||
| 
    227
    
        Serginio1    
     04.04.16 
            ✎
    11:21 
 | 
         
        Для вывода используй либо Format либо Врап.Встроку     
         | 
|||
| 
    228
    
        Serginio1    
     04.04.16 
            ✎
    11:23 
 | 
         
        X509RevocationMode это перечисление. К нему нельзя применить СоздатьОбъект. Только получить тип.
 
        https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509revocationmode(v=vs.110).aspx  | 
|||
| 
    229
    
        degot    
     04.04.16 
            ✎
    12:50 
 | 
         
        закладка     
         | 
|||
| 
    230
    
        Help1с    
     04.04.16 
            ✎
    13:48 
 | 
         
        (226) в принципе получилось, результат только не тот. даже не знаю зачем мне это )
 
        chain = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain"); Если chain.Build(pds.Signer) Тогда Сообщить("сертификат загружен"); Иначе Сообщить("сертификат не загружен"); КонецЕсли; //////////////// читаем данные сертификата X509RevocationMode = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509RevocationMode"); chain.ChainPolicy.RevocationMode = Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509RevocationMode").Online; Сообщить("Chain revocation flag: {0}" + Врап.Встроку(chain.ChainPolicy.RevocationFlag)); // X509RevocationMode.RevocationFlag Сообщить("Chain revocation mode: {0}" + Врап.Встроку(chain.ChainPolicy.RevocationMode)); Сообщить("Chain verification flag: {0}" + Врап.Встроку(chain.ChainPolicy.VerificationFlags)); Сообщить("Chain verification time: {0}" + Врап.Встроку(chain.ChainPolicy.VerificationTime)); Сообщить("Chain application policy count: {0}" + Врап.Встроку(chain.ChainPolicy.ApplicationPolicy.Count)); Сообщить("Chain certificate policy count: {0} {1}" + Врап.Встроку(chain.ChainPolicy.CertificatePolicy.Count)); // + " " + Environment.NewLine); Результат: сертификат загружен Chain revocation flag: {0}ExcludeRoot Chain revocation mode: {0}Online Chain verification flag: {0}NoFlag Chain verification time: {0}04.04.2016 15:46:31 Chain application policy count: {0}0 Chain certificate policy count: {0} {1}0  | 
|||
| 
    231
    
        Serginio1    
     04.04.16 
            ✎
    14:01 
 | 
         
        Проще использовать String.Format
 
        http://catalog.mista.ru/public/448668/ String=Врап.ПолучитьТип("System.String"); Сообщить(String.Format("Chain application policy count: {0}" ,chain.ChainPolicy.ApplicationPolicy.Count),0);  | 
|||
| 
    232
    
        Help1с    
     04.04.16 
            ✎
    15:17 
 | 
         
        (231) исправил     
         | 
|||
| 
    233
    
        Help1с    
     05.04.16 
            ✎
    14:15 
 | 
         
        две проверки, первую проверку сертификат не проходит, вторую проходит. возможно первую проверку не проходит из-за отсутствия доверия к корневому сертификату.
 
        может кто-нибудь знает что проверяют данные проверки? проверка на то что сертификат отозван осуществляется?  | 
|||
| 
    234
    
        Help1с    
     05.04.16 
            ✎
    14:15 
 | 
         
        (233) + вот код:
 
        Результат = dsm.VerifySignatures(false); Если не Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда Сообщить("Проверка сертификата и цепочки прошла успешно"); Иначе Сообщить("Сертификат не прошел проверку"); КонецЕсли; Если pds.Signer.Verify() Тогда Сообщить("Сертификат действителен"); Иначе Сообщить("Сертификат недействителен."); КонецЕсли;  | 
|||
| 
    235
    
        Serginio1    
     05.04.16 
            ✎
    14:54 
 | 
         
        Посмотри чему равен результат
 
        врап.Встроку(Результат) Смотри варианты https://msdn.microsoft.com/ru-ru/library/system.io.packaging.verifyresult(v=vs.110).aspx  | 
|||
| 
    236
    
        Help1с    
     05.04.16 
            ✎
    15:04 
 | 
         
        (235) равно "Success".
 
        похоже неправильно условие поставил. :) данные провекри проверяют сертификат в режиме он-лайн? если сертификат отозван - выйдет ошибка? не нашел я описание как выполняется проверка.  | 
|||
| 
    237
    
        Help1с    
     05.04.16 
            ✎
    15:30 
 | 
         
        создал сертификат, он у меня проходит все три проверки. получается что сертификат он-лайн никак не проверяется?
 
        вот проверки которые я выполняю: //1. Проверяем подпись Результат = dsm.VerifySignatures(false); Если Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда Сообщить("Проверка подписи прошла успешно"); КонецЕсли; //2. Проверяем сертификат подписи Если pds.Signer.Verify() Тогда Сообщить("Сертификат действителен"); КонецЕсли; //3. еще раз проверяем сертификат Результат2= PackageDigitalSignatureManager.VerifyCertificate(pds.Signer); Сообщить("Ошибки: " + Врап.Встроку(Результат2));  | 
|||
| 
    238
    
        Serginio1    
     05.04.16 
            ✎
    15:38 
 | 
         
        Ты его в документ засунул? Проверь на другой машине, и открой и посмотри как офис проверяет     
         | 
|||
| 
    239
    
        Serginio1    
     05.04.16 
            ✎
    15:40 
 | 
         
        https://msdn.microsoft.com/ru-ru/library/system.io.packaging.packagedigitalsignaturemanager.verifysignatures(v=vs.110).aspx
 
        Этот метод проверяет только цифровые подписи, но не связанные с ними сертификаты X.509. Для проверки сертификатов X.509 можно использовать метод VerifyCertificate.  | 
|||
| 
    240
    
        Help1с    
     05.04.16 
            ✎
    15:57 
 | 
         
        (239) это проверка №3. тоже успешно проходит. сертификат в документе офиса.
 
        сейчас смотрю как 1с МенеджерКриптографии сертификаты проверяет: 1. самодельный сертификат забраковал. 2. реальный действующий сертификат тоже забраковал, пишет: "Сертификат не предназначен для указанного использования"  | 
|||
| 
    241
    
        Help1с    
     05.04.16 
            ✎
    16:02 
 | 
         
        (240) + вот так проверка проходит без ошибки:
 
        МенеджерКриптографии.ПроверитьСертификат(Сертификат,РежимПроверкиСертификатаКриптографии.РазрешитьТестовыеСертификаты);  | 
|||
| 
    242
    
        Serginio1    
     05.04.16 
            ✎
    17:20 
 | 
         
        Вообще то ты должен получить сертификат
 
        Сертификат= Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain", pds.Signature); X509ChainStatusFlags =PackageDigitalSignatureManager.VerifySignatures(Сертификат); Хотя https://msdn.microsoft.com/ru-ru/library/system.io.packaging.packagedigitalsignature.signer(v=vs.110).aspx Свойство PackageDigitalSignature.Signer Возвращает сертификат X.509 подписавшего.  | 
|||
| 
    243
    
        Serginio1    
     05.04.16 
            ✎
    17:30 
 | 
         
        Для проверки сертификата используй X509Certificate2
 
        https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate2(v=vs.110).aspx https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509certificate2.verify(v=vs.110).aspx Сертификат= Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2", pds.Signature);  | 
|||
| 
    244
    
        Serginio1    
     05.04.16 
            ✎
    17:47 
 | 
         
        chain = new X509Chain(); 
 
        chain.ChainPolicy.ExtraStore.Add(GetYourRootCert()); // GetYourRootCert() - Ваш корневой X509Certificate2 //chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; //убираем комментарий вначале если не нужна проверка на отозванность chain.Build(certificate); А вот для политики проверки используй https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chain.chainpolicy(v=vs.110).aspx ChainPolicy https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chainpolicy(v=vs.110).aspx И устанавливай нужные значения VerificationFlags например NoFlag https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509verificationflags(v=vs.110).aspx  | 
|||
| 
    245
    
        Serginio1    
     05.04.16 
            ✎
    17:52 
 | 
         
        К тестовым сертификатам я так понимаю применяется флаг 
 
        AllowUnknownCertificateAuthority Не учитывать, что цепочку нельзя проверить из-за неизвестного центра сертификации (ЦС).  | 
|||
| 
    246
    
        Serginio1    
     05.04.16 
            ✎
    18:05 
 | 
         
        243 
 
        Сертификат= Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2",pds.Signer);  | 
|||
| 
    247
    
        Help1с    
     06.04.16 
            ✎
    08:54 
 | 
         
        (243) я так пробовал, не работает, не может сертификат загрузить.
 
        вот так выполняется код, но сертификат не загружается в объект: Сертификат2 = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2");  | 
|||
| 
    248
    
        Help1с    
     06.04.16 
            ✎
    09:04 
 | 
         
        (246) да, именно такой код пробовал, не создается объект     
         | 
|||
| 
    249
    
        Help1с    
     06.04.16 
            ✎
    09:06 
 | 
         
        (247) (248) мистика. заработал такой код: 
 
        Сертификат2 = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2", pds.Signer)  | 
|||
| 
    250
    
        Serginio1    
     06.04.16 
            ✎
    09:36 
 | 
         
        (247) Ты просто создаешь пустой объект. 
 
        Либо делай как в 246 или используй Import https://msdn.microsoft.com/ru-ru/library/ms148437(v=vs.110).aspx  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |