|
МенеджерКриптографии.Подписать - не работает! ( | ☑ | ||
---|---|---|---|---|
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
|
(29) не придумано говоришь?
https://ru.wikipedia.org/wiki/Удалённый_вызов_процедур |
|||
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,но последний тоже требует настройки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |