Имя: Пароль:
1C
1С v8
МенеджерКриптографии.Подписать - не работает! (
0 Soulseller76
 
24.11.22
16:24
Всем привет.
Конфа - самописная.
Нужно подписать и зашифровать файл. С шифрованием проблем нет, но на подписании я подвисла конкретно ((((
В строке кода МенеджерКриптографии.Подписать( - процедура прекращает работу без каких-то либо ошибок.
Обернула в попытку/Исключение - в ОписанииОшибки - пусто.
Если вызвать Подписать в точке останова, пишет (НеизвестныйМодуль) Ошибка при вызове метода контекста (Подписать).
На вход подаю по феншую: Подписать(<ИсходныеДанные>, <ВыходныеДанные>, <Сертификат>), где <ИсходныеДанные> - путь до исходного файла, <ВыходныеДанные> - путь для файла, куда пишем, <Сертификат> - ну, собственно, сам сертификат.
Пробовала вместо путей подсунуть двоичные данные - результат тот же.
Короче, я в печали. Что делать? как файл-то подписать?!
1 hockeyist
 
24.11.22
16:27
(0) А ключ подписи где?
А вообще лучше все-таки через COM. Но это - второй вопрос. Первый - где ключ
2 Soulseller76
 
24.11.22
16:30
(1) через com нельзя, у нас линух ((((((((((((((

Ключ, ключ, ключ... Это не сертификат. Это закрытый ключ.
Правильно? Установлен на диске D.
3 Soulseller76
 
24.11.22
16:32
https://its.1c.ru/db/v838doc#bookmark:dev:TI000000836


Все отсюда содрала. С шифрованием прокатило.

А вот с ЭЦП - нетъ ((((
4 Soulseller76
 
24.11.22
16:35
Файл = Новый Файл(ПутьКФайлу);
    
    СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Файл);
    
    ИмяФайлаБезРасширения = СведенияОФайле.ИмяБезРасширения;
    
    Расширение = СведенияОФайле.РасширениеБезТочки;
    
    ТипыСертификатов = Новый Массив;
    ТипыСертификатов.Добавить(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
    
    Список = ПолучитьСписокСертификатов(75, ТипыСертификатов, Истина);
    Сертификат = Список[0];
    
    ДанныеД = Новый ДвоичныеДанные(ПутьКФайлу);
    ДанныеД.Записать(ПутьКЗашифрованномуФайлу);

    МенеджерКриптографии = Новый МенеджерКриптографии("", "", 75);
    МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = ПолучитьПарольДоступа(ПрофильCryptoPro);
    ////МенеджерКриптографии.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.ВключатьПолнуюЦепочку;
    ////МенеджерКриптографии.ИспользованиеИнтерактивногоРежима = ИспользованиеИнтерактивногоРежимаКриптографии.Использовать;

    ДанныеПодписи = МенеджерКриптографии.Подписать(ПутьКФайлу, ПутьКЗашифрованномуФайлу, Сертификат);
5 Soulseller76
 
24.11.22
16:38
И самое обидное - нет обратной связи, вообще никак не соображу, что ему не хватает.

В синтакс помощнике написано: Возвращаемое значение:
Тип: Неопределено, ДвоичныеДанные.
При сохранении подписи в файл возвращает Неопределено.

Но у меня вообще ничего не возвращает. Хотя на вход пытаюсь разные варианты подавать.
6 hockeyist
 
24.11.22
16:41
(5) Ну проверь пароль. Или сделай сертификат сразу с закрытым ключом для проверки (таким пользоваться небезопасно)
7 hockeyist
 
24.11.22
16:43
МенеджерКриптографии = Новый МенеджерКриптографии("", "", 75);

Вот это работать не будет
8 Soulseller76
 
24.11.22
16:43
(6) Пароль 100% верный, так как руками, через Крипто АРМ все шифруется и подписывается идеально.
Клиент на своей стороне, подучая наш файл, через программу Крипто АРМ подписанный и шифрованный - расшифровывает без проблем.
Через 1с - нет. Стали разбираться, а я в коде подписание забыла добавить.
Стала писать код, а он не работает (((((
9 Soulseller76
 
24.11.22
16:44
(7) Почему? Вроде при шифровании не ругается. Что тут надо дописывать?
10 hockeyist
 
24.11.22
16:45
(9) Путь к библиотеке
11 Soulseller76
 
24.11.22
16:47
(10) Ок. Сейчас пойду гляну, как в УТ это сделано.
12 oleg_km
 
24.11.22
20:47
(4) ДанныеПодписи = МенеджерКриптографии.Подписать(ПутьКФайлу, ПутьКЗашифрованномуФайлу, Сертификат);

У тебя задано имя файла для подписи, ПутьКЗашифрованномуФайлу, туда и кладется подпись. А в ДанныеПодписи кладется Неопределено. Вот тебе и кажется, что ничего не возвращается. Посмотри, что в файле ПутьКЗашифрованномуФайлу. По хорошему надо переименовать в ПутьКФайлуЭЦП
13 oleg_km
 
24.11.22
20:49
(10) Это лишнее. Если бы Новый МенеджерКриптографии был неправильный, то Подписать кинуло бы исключение типа алгоритм не соответствует сертификату.
14 Soulseller76
 
25.11.22
10:27
(12) Нет, возвращает не НЕОПРЕДЕЛЕНО, а просто программа перестает работать.
Только я никак не понимаю. МенеджерКриптографии.Подписать - это не процедура подписания ФАЙЛа?
А создание подписи? А как же ее наложить на файл?

Посмотрела в коде БСП, вообще загрустила (
15 Soulseller76
 
25.11.22
10:32
Просто КАК файл с данными подписать полученным файлом ЭЦП.

Я перечитала на ИТС информацию - реально: МенеджерКриптографии.Подписать создает ЭЦП - "Формирование ЭЦП. Выполняется формирование файла с электронной цифровой подписью."

Как их подружить - файл ЭЦП и Файл эксель с данными?
16 hockeyist
 
25.11.22
11:12
(15) 1С-овский МенеджерКриптографии сильно ограничен в своих возможностях. Я в свое время сразу же его забросил и переключился на  COM. Раз вы на Линуксе, смотрите в сторону openssl. Там предусмотрен весь спектр работы с ЭЦП. Подпись отдельно, подпись вместе, формат такой, формат сякой... и т.д.
17 hockeyist
 
25.11.22
11:14
... или погружайтесь в изучение форматов криптографии
18 emuradov
 
25.11.22
11:15
Подписать(<ИсходныеДанные>, <ВыходныеДанные>, <Сертификат>, <ТипПодписи>) Описание изменено в версии 8.3.20.
Подписать(<ИсходныеДанные>, <Сертификат>) раньше было так
19 hockeyist
 
25.11.22
11:18
(18) Подтягиваются потихоньку. Ну очень потихоньку )))
20 Soulseller76
 
25.11.22
11:57
(17) Если бы было время. Его, капец, как не хватает.
В любом случае, спасибо за помощь.
21 Garykom
 
гуру
25.11.22
13:06
(0) Очень советую для своих решений использовать старый https://www.cryptopro.ru/products/other/cryptcp
В 1С сделать обертки для вызова
Если что обертки переделать на нечто другое, на вызов встроенного МенеджерКриптографии.Подписать или еще что то
22 Garykom
 
гуру
25.11.22
13:08
(16) Не надо COM
Это платформозависимое и устаревшее

Намного проще и надежней КомандаСистемы или ЗапуститьПриложение
23 Chai Nic
 
25.11.22
13:18
(22) КомандаСистемы тоже платформозависимое и ещё гораздо более устаревшее..
24 Garykom
 
гуру
25.11.22
13:20
(23) Есть ЗапуститьПриложение с кучей вариаций
25 Garykom
 
гуру
25.11.22
13:23
(23) Насчет устаревшее пока этого нигде не написано и оно переживет саму 1С

Да сейчас принято использовать вызов внешних сервисов по http, но какая разница если этот сервис все равно в итоге использует аналог КомандаСистемы или ЗапуститьПриложение
26 Garykom
 
гуру
25.11.22
13:24
(23) Насчет устаревшее пока этого нигде не написано и оно переживет саму 1С

Да сейчас принято использовать вызов внешних сервисов по http
Но какая разница если этот сервис все равно в итоге использует аналог КомандаСистемы или ЗапуститьПриложение
27 ДедМорроз
 
25.11.22
20:34
Если прекращает работу,то настраивать технологический журнал и смотреть там,что происходит.
Опять же,вы подписываете на сервере или на клиенте ?
28 Chai Nic
 
26.11.22
07:13
(26) "Насчет устаревшее пока этого нигде не написано"
Значит, устаревание у нас происходит в плановом порядке по постановлению политбюро?)
29 Chai Nic
 
26.11.22
07:15
Дело в том, что _реальной_ функциональной альтернативы COM так и не придумано, к сожалению. Все эти веб-сервисы и обмены через файлы предоставляют лишь подмножество возможностей, которые предоставляет COM изначально. Возможность из одной программы прозрачно обращаться к объектам другой - дорого стоит. И от этого отказываются не по причине "устаревания", а элементарно по причине "не шмогла я".
30 Garykom
 
гуру
26.11.22
07:50
31 NorthWind
 
26.11.22
08:20
(30) ну а дальше-то что? Из близко похожего только CORBA, но она, как мы знаем, не взлетела.
32 NorthWind
 
26.11.22
08:21
хотя вообще идея была хорошая - интерфейсы описывать специальным языком, кросс-платформенность из коробки... Но почему-то не срослось.
33 Garykom
 
гуру
26.11.22
14:39
(32) на данный момент стандарт это http rest api
34 NorthWind
 
26.11.22
15:26
(33) Тут нового-то нет ничего, и SOAP, и REST были еще в начале нулевых. Но весь вопрос в том, что это дико громоздко и неудобно. Вообще основная претензия к ИТ у меня в том, что идет дикое усложнение инфраструктуры. Как было хорошо в нулевых - дельфя с приложениями из кубиков, винда, где все было просто и понятно... И что сейчас. Вообще мрачный пипец какой-то. Ради того чтобы дернуть что-то в другом приложении, надо веб-сервер поднимать - рехнуться можно...
35 Garykom
 
гуру
26.11.22
15:30
(34) В нулевых считай рулил wintel
Сейчас же зоопарк и под него надо как то писать
Да еще и все сетевое

Так что бэк на микросервисах, фронт на web (html5/css/js) и связываем через http rest api
36 Garykom
 
гуру
26.11.22
15:32
(35)+ имхо стандарт должен быть что любая хреновина запускает свой микросервис, поднимает там веб-интерфейс и api
и делает обратные http вызовы если ей надо и указали куда через веб-интерфейс или по api
37 Garykom
 
гуру
26.11.22
15:35
(36)+ проблема только что упрется в порты, надо от нумерации портов уходить к guid'ам или аля dns для "портов" сервисов
причем все это можно на одном стандартном порту где стандартно сидит некий менеджер
38 ДедМорроз
 
26.11.22
19:14
Есть linux-сокеты,чтобы от портов уходить.
Есть даже shared memory.
Только,реально,все упирается в RPC.
Опять же,внутри технологии Com лежит Rpc.
Что касается обменов между программами,то тут много способов и rest api далеко не первый.
Просто,общение одной серверной части напрямую с другой - это шаг намного выше,чем Com и,собственно,Ole,которое и принесло популярность Com.

Ну и не забываем,что потоки появились сразу как только появилась возможность запуска нескольких программ,и до сих пор этот способ не считается устаревшим.
39 NorthWind
 
27.11.22
16:26
(13) да не, должны туда передаваться данные. Причем если верить СП, то для винды и для линукса там дело обстоит по-разному. Для винды второй параметр не нужен, достаточно имени провайдера и типа. Все это можно подсмотреть в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider, там есть и имя (название подветки внутри ветки), и тип (ключ Type в этой подветке). Все просто. А вот в линуксе как раз нужен второй параметр.
40 Chai Nic
 
27.11.22
18:26
(38) Проблема не в именах сокетах или номерах портов. Главное преимущество COM - прозрачность обращения клиента к серверным данным без программирования на стороне сервера. При обращении отрабатываются методы сервера для доступа к объектам автоматически. И не нужно писать никакие обработчики типа "если на этот порт поступило А, то отправить Б".
По-моему, COM для межпрограммного взаимодействия было тем же, чем является 1с для бизнес-приложений. Вместо того, чтобы прописывать работу с данными вручную на низком уровне таблиц и индексов, появилась возможность использовать высокоуровневые абстракции. Так и здесь.
41 Garykom
 
гуру
27.11.22
19:14
(40) эээ
а ты понимаешь что внутри под капотом COM/OLE фактически DLL, код из которых выполняется?
42 Chai Nic
 
27.11.22
19:59
(41) Дело не в том что "под капотом", а в возможностях, которые эта технология дает.
43 Garykom
 
гуру
27.11.22
20:34
(42) дык микросервисы тоже самое только по сети изначально
44 Chai Nic
 
27.11.22
20:41
(43) Ну и в каком софте эти микросервисы "из коробки" работают, с интерфейсами ко всем объектам и методам сервера?
45 NorthWind
 
27.11.22
21:09
(44) ну... 1С УФ, например. А вот больше я навскидку даже ничего и не назову.
46 Chai Nic
 
28.11.22
05:54
(45) "1С УФ"
И что, там я взаправду через некие искоробочные микросервисы могу обратиться к общему модулю и вызвать его метод, не модифицируя код приложения-сервера?
47 NorthWind
 
28.11.22
07:04
(46) хм, ну а чем, строго говоря, занимается код, когда выполняет вызов процедуры НаСервере? Он таким образом вполне может обратиться к общему модулю и вызвать его, не модифицируя код приложения. Более того, есть возможность и стороннему, не 1С-приложению, сделать то же самое через веб-сервис, встроенный в конфигурацию.
48 Chai Nic
 
28.11.22
08:00
(47) Ну это словесная эквилибристика. Само собой, что внутренняя технология 1с это обеспечивает. Речь о _внешней_ технологии, по отношению к 1с.
Через COM можно из любой программы-клиента обратиться к _любой_ конфигурации 1с, вызвав любую экспортную функцию или создав COM-объект этой конфигурации. Через веб-сервисы же это нужно предварительно конфигурировать.
49 NorthWind
 
28.11.22
11:09
(48) В ряде современных конфигураций уже встроены сервисы для обращения к каким-то отдельным кишкам. Теоретически разработчик конфигурации может опубликовать вообще все, вот только зачем?
50 Chai Nic
 
28.11.22
11:24
(49) А в случае COM это вообще прозрачно работает. И разработчику не надо напрягаться дополнительно.
51 NorthWind
 
28.11.22
11:25
Гарик имеет в виду, что в гетерогенной среде COM все равно не работает. Из-под конфы, работающей под линуксом, не получится ничего вызвать через COM в конфе, работающей под Windows. А через веб-сервисы получится. Ввиду того что с виндой рано или поздно придется прощаться - он как бы намекает, что есть определенный смысл смотреть по сторонам.
52 NorthWind
 
28.11.22
11:26
(50) см. (51). Это все понятно, но мы уже живем в другом мире. Винда одним прекрасным утром запросто может написать, что она недоступна в нашем регионе. Кроме того, помимо винды все больше и больше железок не винтел, а какой-нибудь арм. На других операционках.
53 Chai Nic
 
28.11.22
14:05
(52) Да я о том, что раз уж надо делать на микросервисах, совместимых с линуксами на армах - то пусть это внедряют в платформу это, а не отдают на откуп разработчикам прикладных решений..
54 Garykom
 
гуру
28.11.22
14:09
(53) Уже неоднократно писал что в платформу 1С (и в клиентов и в сервер) надо встроить http сервер
Тогда ВК нафик не нужны будут
55 Kassern
 
28.11.22
14:14
(54) Есть же встроенный Автономный сервер
https://its.1c.ru/db/v8314doc/bookmark/adm/TI000000894
56 Chai Nic
 
28.11.22
14:31
(55) Это другое, тут речь о том чтобы работать с прикладной моделью, не только из родного клиента, а _вообще_.
57 Garykom
 
гуру
28.11.22
15:07
(56) Да пофиг на модель, хотя бы вызовы на ЯП 1С обрабатывать
Обертку чтобы с моделью 1С работать сам напишу

Т.е. вот хочу я допустим все мессенджеры (скайп, телеграм, вацап и т.д.) подключить к 1С
Чтобы прямо из нее читать и писать
И мне надо чтобы клиент 1С без всяких ВК мог по http входящие запросы принимать и код выполнять
58 Garykom
 
гуру
28.11.22
15:08
(57)+ Сейчас это делается только через ВК, что проблематично на разных клиентах и платформах
59 Kassern
 
28.11.22
15:14
(57) (58) А как же система взаимодействия и еже с ними? Всякие там шины 1с, боты и прочие примочки платформенные?
60 Kassern
 
28.11.22
15:14
Или вы хотите бесплатно с этим делом работать?)
61 Garykom
 
гуру
28.11.22
16:39
(59) это все не то
62 Kassern
 
28.11.22
16:45
(61) Как не то? " по http входящие запросы принимать и код выполнять" -> привет шина 1с. Там и очередь можно свою организовать из этих запросов.
"хочу я допустим все мессенджеры (скайп, телеграм, вацап и т.д.) подключить к 1С" - так же реализуется через систему взаимодействия 1с. Вот вам пример для УНФ https://its.1c.ru/db/answers1c/content/1245/hdoc
63 Garykom
 
гуру
28.11.22
16:59
(62) на клиенте надо
64 Garykom
 
гуру
28.11.22
17:01
(63)+и без всяческих взаимодействий и прочих обсуждений
просто json получать и кодом на ЯП 1С обрабатывать как надо

это они хрень маркетологовую в 1С придумали и суют во все дыры
65 Garykom
 
гуру
28.11.22
17:01
И да нафик шина когда есть куча готовых брокеров
Просто встройте в платформу средствами работы с ними!
66 Garykom
 
гуру
28.11.22
17:02
(65)+ хотя даже работу со сторонними субд не смогли нормально
67 Kassern
 
28.11.22
17:03
(65) Так и работайте с этими брокерами через шину 1с. Все же есть для этого
68 Kassern
 
28.11.22
17:03
(66) это так же через шину 1с можно реализовать, она для этого и создавалась, чтобы с разными субд согласовать работу
69 Kassern
 
28.11.22
17:04
(67) Настройка обмена сообщениями между базой на платформе "1С:Предприятие" и брокером сообщений RabbitMQ с использованием "1С:Шины"
https://its.1c.ru/db/metod8dev/content/5995/hdoc
70 Garykom
 
гуру
28.11.22
17:06
(69) говно
как программно кодом из 1С создать новые очереди и подписаться на них?
71 Garykom
 
гуру
28.11.22
17:06
(70)+ говорю же та же нерабочая хрень вышла что и в ВИД
не не работает оно как надо и неудобно
72 Kassern
 
28.11.22
17:08
(70) (71) Вы пользовались этими инструментами (1с шина, сервисы интеграции, боты и т.д.) на проектах? Или вы прочитав статьи сделали такой вывод?
73 Garykom
 
гуру
28.11.22
17:13
(72) да пользовался и понял что нативный прямой доступ через http или ВК лучше
74 Garykom
 
гуру
28.11.22
17:14
(73)+ аналогично и с ВИД, больше не использую ибо кака
даже FTP и ZIP встроенные хрень бывает глючная
75 Garykom
 
гуру
28.11.22
17:16
Обычный энтерпрайз проект это тебя хрен к серверу подпустят
Так что или все что можно на клиенте или кодом на 1С

Еще в лучшем случаем можно будет свой exe сохранить из макета и запустить на сервере
Ну или когда все плохо поднимаешь свой микросервис на отдельном сервере и по http через него
76 Kassern
 
28.11.22
17:22
(75) никогда с такими проблемами не сталкивался. Да и сам сервер не особо и нужен. У тебя есть доступ к конфигурации, а служба 1с запускается от определенного юзвера, у которого есть ограниченные права, которых за глаза хватает. Подобные инъекции экзешниками через макеты - это какой-то изврат, за который можно по шапке получить.
(74) По поводу FTP согласен, на стороне 1с это соединение плохо реализовано, не все протоколы поддерживает и работает медленно, приходится пользоваться сторонними библиотеками.
ВИД у меня используется в одном проекте, точнее поддерживаю чужой проект реализованный на нем. В принципе все работает и достаточно быстро, но есть нюансы связанные с именами таблиц, и изменения структуры конфигурации (например из обычного типа переводят в составной)
77 ДедМорроз
 
28.11.22
19:14
На самом деле,для Com нужна библиотека,которая реализует Com-сервер.
Для взаимодействия с Web-сервером нужна другая библиотека,которая реализует обработку запросов от http-сервера.
Для всего остального,тоже нужна биьлиотека,которая является собранной внешней компонентой.
Разница только в том,что некоторые библиотеки уже в комплекте с платформой - другие же нужно ставить.

Кроме того,Com работает в режиме,похожем на тостый клиент в управляемых формах,выполняч все модули в своем контексте,и,если есть подписка на события на сервере,то можно нарваться на передачу мутабельного значения и очень долго плеваться и в сторону Com и в сторону 1с.

Web-сервиы и http-сервисы,помимо установки http-сервера требуют реализации логики обработки запросов.
Конечно,есть rest API oData,но последний тоже требует настройки.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший