|
API Честного Знака | ☑ | ||
---|---|---|---|---|
0
igel1969
12.03.20
✎
19:10
|
Кто-нибудь смог соединиться с авторизацией к API Честного знака?
У меня по их документации получилось только два GET-запроса и ни одного POST. Вот из их описания: Пример запроса: POST <url стенда>/auth/simpleSignIn Content-Type: application/json; charset=utf-8 Postman-Token: 5325d8aa-ba27-44c5-9b10-c02da19f1b0c cache-control: no-cache [ { "uuid": "a63ff582-b723-4da7-958b-453da27a6c62", "data": "efd833c7248544dca05bff1036bea6" }, { "uuid": "4a5c679e-af37-46a6-ad79-8fc0cd5271c4", "data": "tro965c0124567uie74fbh1223uer2" } ] Откуда мне взять Postman-Token? (Ключ ЕТокен у меня есть). В тело запроса писать из примера с квадратными скобками или без? У меня на этот запрос все время отвечает <html> <head><title>307 Temporary Redirect</title></head> <body> <center><h1>307 Temporary Redirect</h1></center> <hr><center>nginx</center> </body> </html> Есть у кого-нибудь пример реально работающего кода связи с этим Честным знаком, буд они неладны (хотя они и так неладны)? |
|||
1
big
12.03.20
✎
20:10
|
Немного непонятна операция, которую вы делаете? Это какой-то упрощенный способ авторизации, судя по simpleSignIn?
Я получаю токен сначала получая от ЧЗ случайные данные, подписываю его ЭЦП и отправив его затем в ЧЗ. В ответ приходит JSON с токеном. Под рукой нет документации, только на работе. |
|||
2
big
12.03.20
✎
20:12
|
(1) Да, и это на 7.7
|
|||
3
igel1969
12.03.20
✎
20:14
|
(2) А можно кусок кода, пожалуйста?
Я через 1С подписывать ЭЦП не умею. Я тоже сперва получаю через GET-запрос случайные данные, а вот то что я написал тут в (0) - это как раз запрос, чтобы получить JSON с токеномвидимо, но я не могу его добиться. |
|||
4
big
12.03.20
✎
20:29
|
Подписываем файл со случайными данными. В файле ИмяФайла данные из data, то бишь те самые случайные. В файле ИмяФайлаПодп будут уже подписанные данные. Отпечаток - это отпечаток ЭЦП, строка из букв и цифр (получаем через объект CaDESCOM)
"C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe" -sfsign -sign -in "+ИмяФайла+" -out "+ИмяФайлаПодп+" -my "+Отпечаток+" -base64 -add Из полученного файла надо убрать все символы перевода строк и разделителя строк. Полученную строку СтрИтог используем уже в запросе с uuid Текст = СоздатьОбъект("Текст"); Текст.ДобавитьСтроку("{""uuid"":"""+СокрЛП(СессияUuid)+""",""data"":""" + СтрИтог + """}"); Текст.Записать(ИмяФайлаПодп); Отправляем запрос. ИмяСервиса - это уже по месту. Или тестовый, или боевой. Но тестовый вроде у них не работает, не получилось у меня. curl.exe -X POST "+ИмяСервиса+"/auth/cert/ -H ""content-type: application/json;charset=UTF-8"" --data-binary @"+ИмяФайлаПодп + " -v -k --output " + ФайлОтвета; Код вставлял из рабочей обработки, попутно выправляя для читабельности. Могут быть нестыковки, но принцип должен быть понятен. |
|||
5
big
12.03.20
✎
20:31
|
(4) ФайлОтвета - в нём будет JSON с токеном.
|
|||
6
igel1969
12.03.20
✎
20:41
|
(5) (4) Спасибо большое, завтра попробую. Вроде все понятно.
|
|||
7
igel1969
13.03.20
✎
09:21
|
(4) Так и не смог ((( совсем в этих технологиях плаваю вслепую.
попробовал: Отпечаток = "16 2d ec 08 71 14 1f 18 27 08 24 79 9e d2 e0 f1 ee 52 f1 71"; (для данного форума поменял несколько цифр в отпечатке). ЗапуститьПриложение("C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe -sfsign -sign -in "+ ФайлИН + " -out " + ФайлАут + " -my " + Отпечаток + " -base64 -add"); выходит список из трех сертификатов, просит выбрать нужный. когда выбираю - ФайлАут не обнаружен, значит в него ничего не записалось. Отпечаток я взял таким образом - в КриптоПро нашел сертификат в контейнере, зашел в его свойства, там есть строка "отпечаток", ее тупо скопировал. |
|||
8
Cyberhawk
13.03.20
✎
10:08
|
(7) Сколько тебе платят за решение вопроса?
|
|||
9
igel1969
13.03.20
✎
10:10
|
я на окладе ))
|
|||
10
big
13.03.20
✎
10:39
|
(7) И пробелы в отпечатке так же присутствуют? И, кстати, сам ключ где находится - в реестре или на каком другом носителе?
|
|||
11
big
13.03.20
✎
10:42
|
(7) Если быть точным, то командная строка неверная. В кавычки надо заключить "C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe". То есть в реальной 1С путь до csptest.exe надо заключить в двойные кавычки. Пробуйте сначала запускать из cmd или bat
|
|||
12
igel1969
13.03.20
✎
10:45
|
(10) пробелы присутствуют. убирать пробовал - просто пролетает все, но файл не создается. сам ключ в реестре.
|
|||
13
igel1969
13.03.20
✎
10:55
|
(11) ха, через командную строку получилось (отпечаток без пробелов вводил). есть над чем подумать теперь, спасибо
|
|||
14
big
13.03.20
✎
10:58
|
(13) В пути файлов нет русских букв?
|
|||
15
Garykom
гуру
13.03.20
✎
11:01
|
(7) >Отпечаток = "16 2d ec 08 71 14 1f 18 27 08 24 79 9e d2 e0 f1 ee 52 f1 71";
пробелы убери юморист |
|||
16
Garykom
гуру
13.03.20
✎
11:03
|
(7) >когда выбираю - ФайлАут не обнаружен, значит в него ничего не записалось.
ыыы а у тебя ФайлАут с полным путем или как? вот ты csptest с полным путем запускашь а как думаешь куда он запишет ФайлАут ? |
|||
17
Garykom
гуру
13.03.20
✎
11:04
|
(16)+ Ну и пуск > cmd и туда команду и смотрим на что ругается
или делаешь батник с pause в конце запускаешь и смотришь что пишет |
|||
18
igel1969
13.03.20
✎
11:05
|
(17) да, так и собираюсь
|
|||
19
Garykom
гуру
13.03.20
✎
11:06
|
(18) Советую сразу с csptest перейти на cryptcp
|
|||
20
big
13.03.20
✎
11:11
|
(19) А смысл? Шифровать то ничего не нужно.
|
|||
21
big
13.03.20
✎
11:16
|
Выяснилась интересная особенность при подписывании из командной строки. При подписывании надо указать или наименование сертификата, или его отпечаток. В случае запуска 32-разрядной csptest, работают оба варианта. Если же запускать 64-разрядную версию, то работает только через указание наименования.
|
|||
22
igel1969
13.03.20
✎
11:23
|
в общем, подписать удалось. оно и раньше видимо работало, проблема была не в КриптоПро, а в 1С и временных файлах.
Смотрите: ФайлИн = ПолучитьИмяВременногоФайла(); дает нам вот такое имя: C:\Users\admin\AppData\Local\Temp\v8_264_83.tmp Хотя на самом деле когда записываешь в файл ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.УстановитьТекст(data); ТекстовыйФайл.Записать(ФайлИн, КодировкаТекста.UTF8); , то записывает в C:\Users\admin\Local Settings\Temp\v8_264_83.tmp Как так - я не понимая, если честно. строка получается "C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe" -sfsign -sign -in C:\Users\admin\AppData\Local\Temp\v8_264_83.tmp -out C:\Users\admin\AppData\Local\Temp\v8_264_84.tmp -my 11111ОТПЕЧАТОКee52f171 -base64 -add Но ответ записывается тоже в папку C:\Users\admin\Local Settings\Temp Глюк какой-то. И вот когда я потом пробовал прочитать ответ из файла: Ответ = Новый ТекстовыйДокумент(); Ответ.Прочитать(ФайлАут, КодировкаТекста.UTF8); ТекстОтвета = Ответ.ПолучитьТекст(); Мне сообщало что не может найти такой файл. |
|||
23
big
13.03.20
✎
11:26
|
Ёшки-матрёшки!! Так в 8-ке же есть свои объекты для работы с криптой! Зачем этот огород городить с командной строкой? Я ни разу не восьмёрошник, но даже я это знаю
|
|||
24
igel1969
13.03.20
✎
11:30
|
(23) тут Вы хоть какой-то пример дали и крохотными шажочками я по нему подбираюсь к результату.
А по МенеджерКриптографии в интернете вообще тишина. Каким текстом заполнять параметры задавать при создании объекта? Нигде не написано. |
|||
25
igel1969
13.03.20
✎
11:32
|
(23) МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "", 75);
откуда тут все эти циферки? |
|||
26
igel1969
13.03.20
✎
12:14
|
и вообще глюк былв том, что я не дожидался исполнения команды, потому и не было выходного файла.
|
|||
27
big
13.03.20
✎
13:55
|
(26) Лучше запускать через COMSPEC
Функция локКомандаСистемы(Команда,Реж=0, ТипЗапуска = "c") // Реж 0 - окно не отображается // 1 - активизирует и отображает окно // 2 - активизирует окно и отображает его в свернутом виде // 3 - активизирует окно и отображает его в максимизированном виде // // ТипЗапуска c - выход по завершении выполнения команды // k - ожидание команды пользователя WshShell=СоздатьОбъект("WScript.Shell"); WshShell.Run("%COMSPEC% /"+ТипЗапуска+" "+Команда, Реж, 1) КонецФункции |
|||
28
victuan1
16.03.20
✎
08:26
|
(27) Чем лучше? У самого Shell есть подобные режимы запуска.
|
|||
29
big
16.03.20
✎
08:46
|
(28) Как я понял ТС-а - у него 1С не дожидается окончания работы командной строки. Как там в 8-ке не знаю, потому и присоветовал такой вариант
|
|||
30
Лодырь
16.03.20
✎
08:59
|
(29) В 8ке есть МенеджерКриптографии и наверное правильнее использовать его. Надо подумать на эту тему. Благо топикстартер явно размышлял над встроенными средствами.
|
|||
31
Necessitudo
16.03.20
✎
18:04
|
#Область Электронная_подпись
// sThumbprint - отпечаток сертификата, используемого для подписи; строка, представляющая отпечаток в шестнадцатеричном виде // пример 195934d72dcdf69149901d6632aca4562d8806d8 // // ТекстДляПодписи должен быть в Base64 // //bDetached - Истина/Ложь - откреплённая/прикреплённая подпись Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint, bDetached) CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64 CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи //bDetached = Ложь; EncodingType = 0; oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усоверш-ной подписи oSigner.Certificate = ComОбъектСертификатаПоОтпечатку(sThumbprint); oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усоверш-ной подписью. oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY; oSignedData.Content = ПеревестиДанныеВBase64(ТекстДляПодписи); sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись. Возврат sSignedMessage; // Подпись в формате Base64 КонецФункции // Получить Com-объект сертификата по отпечатку. // // Параметры: // Отпечаток - Строка - отпечаток сертификата, используемого для подписи; строка, представляющая отпечаток в шестнадцатеричном виде // пример 195934d72dcdf69149901d6632aca4562d8806d8 // Возвращаемое значение: // ComОбъект - Com-объект сертификата. Функция ComОбъектСертификатаПоОтпечатку(Отпечаток) CAPICOM_CURRENT_USER_STORE = 2; // 2 - Искать сертификат в ветке "Личное" хранилища. CAPICOM_MY_STORE = "My"; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0; oStore = Новый COMОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, Отпечаток); ComОбъект = Certificates.Item(1); // Найденный сертификат (Com-объект) oStore.Close(); // Закрыть хранилище сертификатов и освободить объект Возврат ComОбъект; КонецФункции Функция ПолучитьСписокДоступныхСертификатов() Экспорт //Получим список доступных сертификатов CAPICOM_CURRENT_USER_STORE = 2; //2 - Искать сертификат в ветке "Личное" хранилища. CAPICOM_MY_STORE = "My"; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение СписокСертификатов = Новый СписокЗначений; Попытка oStore = Новый COMОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов Для Каждого ТекСертификат Из oStore.Certificates Цикл СписокСертификатов.Добавить(ТекСертификат.Thumbprint, ТекСертификат.SubjectName); КонецЦикла; oStore.Close(); // Закрыть хранилище сертификатов и освободить объект Исключение #Если Клиент Тогда СообщитьОбОшибке(ОписаниеОшибки()); #КонецЕсли КонецПопытки; Возврат СписокСертификатов; КонецФункции #КонецОбласти |
|||
32
Garykom
гуру
16.03.20
✎
19:17
|
(30) Если 8-ка то да МенеджерКриптографии, если нет проблем с его применением &НаСервере
|
|||
33
igel1969
17.03.20
✎
14:12
|
(29) можно продолжить? я так и не достиг результата ((((((((((.
я хотел спросить - после подписания date у Вас тоже становится длиной около 5000 знаков? просто в документации по API в примере подписанная date такой же длины как и не подписанная. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |