Имя: Пароль:
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,но последний тоже требует настройки.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан