Имя: Пароль:
1C
1С v8
Подписание файлов excel c помощью КриптоПро Office Signature
0 dr3amer
 
23.08.19
13:23
Добрый день!
Надо подписывать созданные файлы excel с помощью утилиты КриптоПро Office Signature.
Подпись должна быть в самом файле.
Сталкивался кто-нибудь с таким?
Есть пример кода?

Пробовал так:
        МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider","",80);
        ХранилищеСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов();
        Сертификаты = ХранилищеСертификатов.ПолучитьВсе();
        МенеджерКриптографии.Подписать(ИмяФайла,Сертификаты[0]);

Всё работает, но ничего не подписывается.
1 VladZ
 
23.08.19
13:24
(0) "Всё работает, но ничего не подписывается." - что это значит? Можно подробнее описать, что происходит? И какой результат хотите увидеть.
2 Chum
 
23.08.19
13:37
(1) это значит, что никогда такого не было и вот опять.
Система не ругается, но и ничего не происходит.
3 dr3amer
 
23.08.19
14:04
Всё верно.
Ругани от системы нет. Но и файлы сохранились без подписи.
4 sitex
 
naïve
23.08.19
14:08
(0) Что то не пойму так вы с помощью утилиты проверяете ?
и да я подписваю так и все норм Подписать(<ИсходныеДанные>, <ВыходныеДанные>, <Сертификат>)
5 sitex
 
naïve
23.08.19
14:10
+(4) ПарольДоступаКЗакрытомуКлючу есть ? Установлен сам сертификат в Хранилище ?
6 Di-dog
 
23.08.19
14:17
Ничего не происходит, потому что 1С генерирует подпись отдельными двоичными данными и возвращает их в функции МенеджерКриптографии.Подписать(ИмяФайла,Сертификаты[0]);
А Вы, судя по коду, вызываете эту функцию как процедуру...

Либо как в (4) во второй параметр. :)
7 dr3amer
 
23.08.19
16:27
Вызвал её как функцию.
Возвращает двоичные данные.
Это отдельно подпись или файл с подписью?
Попробовал сохранить в файл xlsx, сохранилось, но не открывается.
8 dr3amer
 
23.08.19
16:29
(6) Вызвал её как функцию.
Возвращает двоичные данные.
Это отдельно подпись или файл с подписью?
Попробовал сохранить в файл xlsx, сохранилось, но не открывается.
9 dr3amer
 
23.08.19
16:31
(5) У меня на руках есть установленный КриптоПро Office Signature и сертификат.
Сертификат получаю из хранилища сертификатов, там всё норм.
Откуда взять закрытый ключ и зачем он мне при подписи?
10 dr3amer
 
23.08.19
16:34
(4) Можете прислать пример кода который у вас нормально всё подписывает?
У меня есть сертификат, есть файл, есть утилита КриптоПро Office Signature которая встраивается в Microsoft Office.
На выходе я хочу получить файл excel с электронной подписью внутри.
11 Di-dog
 
23.08.19
18:17
(8) Это двоичные данные подписи, сохраняются в формат p7s (PKCS#7)
12 Гость из Мариуполя
 
гуру
23.08.19
19:20
(9) Та действительно, и зачем тебе какой-то ключ (закрытый) при подписывании.
Сертификат есть и ладно.. :)))


Вот смотри - у меня есть бутылка коньяка. И есть сертификат на эту бутылку. Сертификат - бумажка с печатью, удостоверяющая, что коньяк подлинный, безумно коллекционный и дорогой, особого года издания.

Тебе, раз тебе достаточно сертификата, чтобы набухаться, нужно понюхать бумажку.
Но, лично мне, как хочешь, мне чтобы ощутить вкус и послевкусие, одного только бумажного сертификата маловато будет.  :)))

аналогично и с ЭЦП.
Сертификат ключа - это по сути ничто, всего лишь некая опция, аналогичная сертификату к бутылке коллекционного коньяка..
и ничего более.. есть он в хранилище сертификатов ну и есть. У меня вон тоже сертификат на коньяк в хранилище есть.
Коньяка вот только увы.. уже нет.

Понимаешь теперь, почему твоя фраза "Откуда взять закрытый ключ и ЗАЧЕМ ОН МНЕ ПРИ ПОДПИСИ?"  вызывает ржач.
13 dr3amer
 
24.08.19
23:25
(12) Ключ я достану.
Но неужто никто такого никогда не делал и не может просто прислать пример кода как это сделать?
14 dr3amer
 
24.08.19
23:27
(12) При подписи в документе excel через КриптоПро закрытый ключ не запрашивается.
15 Сияющий в темноте
 
25.08.19
00:18
(14)он запрашивается один раз,потом криптопро в течение определенного времени его помнит.
16 Сияющий в темноте
 
25.08.19
00:21
вообще,насколько я помню,можно в файл подписи добавить исходный файл,так как файл подписи-э о контейнер,а вот чтобы в сам ексель дописать подпись-это поддержка со стороны ексель должна быть,иначе,любое изменение файла приводит к нарушению подписи,а ексель,насколько я помню,при открытии пишет дату открытия в свой файл,так что с проверкой подписи будут танцы с бубном.
17 Гость из Мариуполя
 
гуру
25.08.19
02:40
(13) дык какой тебе кусок кода, если у тебя все в кучу в голове смешалось.
вот смотри:
КриптоПро Office Signature - это НЕ криптопровайдер, это всего лишь утилита (надстройка/плагин) к MS OFFICE.
и, в свою очередь, этот плагин все равно для работы требует криптопровайдер КриптоПро CSP.

то, что ты кодишь в (0)  - это ты просто пытаешься подписать файл с помощью Крипто Про CSP, и никаким применением  КриптоПро Office Signature тут и не пахнет, что есть он на компьютере, что нет, ты его не юзаешь в коде.
Т.е. у тебя в итоге получиться просто обычный файл, подписанный тривиально с использованием обычного КриптоПро CSP.




Для того, чтобы пользовать именно функционал плагина Office Signature (а не тривиальное подписывание произвольного файла с помощью КриптоПро CSP), ты должен к нему(плагину) ... ммм... как бы сказать, "дотянуться".

А поскольку это всего лишь надстройка(плагин) в MS Office, то дотянуться до нее(надстройки) - хм.. через VBA.
типа так:
https://docs.microsoft.com/ru-ru/office/vba/_repo.en-us/api/office.signatureset.addnonvisiblesignature

если юзаешь NET, можно еще посмотреть здесь:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.core.signatureset.addnonvisiblesignature?view=office-pia


PS: и да, идентификатор плагина КриптоПро Office Signature (то, что обозначается- varSigProviderID):
{F5AC7D23-DA04-45F5-ABCB-38CE7A982553}.
18 dr3amer
 
26.08.19
15:24
(17) Спасибо большое!
Это то что нужно.
Взял ссылку:
https://docs.microsoft.com/ru-ru/office/vba/_repo.en-us/api/office.signatureset.addnonvisiblesignature

При вызове метода AddNonVisibleSignature открывается окошко подписи документа.
Пытаюсь найти способ не открывать окошко, а сразу передать в него свои данные подписи.