|   |   | 
| 
 | 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 такой же длины как и не подписанная. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |