|   |   | 
| 
 | HTTP запрос Post и подпись | ☑ | ||
|---|---|---|---|---|
| 0
    
        Aradel3d 15.06.18✎ 09:00 | 
        Привет!
 Есть защищенное HTTP соединение, в котором я прописываю СертификатКлиентаФайл (.pem) и (.key) который подставляю в качестве пароля, а также СертификатыУдостоверяющихЦентровФайл (тоже .pem). Все три сертификата переданы нашим партнером. Но как выяснилось, отправляемый POST запрос, нужно еще подписывать "private_key.xml сконвертированным в pem". В pem я сконвертировал, а вот как дальше не соображу. Подскажите пожалуйста...? | |||
| 1
    
        Aradel3d 15.06.18✎ 09:04 | 
        Может речь о МенеджерКриптографии и подписывать надо строку которую я передаю в запросе?     | |||
| 2
    
        Cyberhawk 15.06.18✎ 09:06 | 
        ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл(ПутьККлиентскомуСертификату, ПарольККлиентскомуСертификату));     | |||
| 3
    
        Cyberhawk 15.06.18✎ 09:06 | 
        И указываешь его в конструкторе ХТТП-соединения     | |||
| 4
    
        Cyberhawk 15.06.18✎ 09:08 | 
        Никакого понятия "подписать запрос" в объектной модели 1С нет.
 Возможно, тебе нужно добавить в него какой-нибудь заголовок, но это уже исключительно прикладным АПИ поставщика сервиса определяется. | |||
| 5
    
        Aradel3d 15.06.18✎ 09:12 | 
        (2) SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("C:/.../client.pem","C:/.../client.key"),Новый СертификатыУдостоверяющихЦентровФайл("C:/.../cacert.pem"));
 Это уже сделано. Но ТП партнера пишет что "Запрос нужно подписать ключем private_key" т.е. это четвертый файл который они передали нам. Получается 1с так не умеет? Я кстати попробовал МенеджерКриптографии, вылетает с ошибкой, что подписывать можно только файлы. Но при этом в HTTP запросы мне нужно в тело передавать строку. Получается МенеджерКриптографии отпадает... | |||
| 6
    
        Cyberhawk 15.06.18✎ 09:34 | 
        "ТП партнера пишет что "Запрос нужно подписать ключем private_key" т.е. это четвертый файл который они передали нам" // У них и спрашивай, что это означает.
 Для начала через какую-нибудь стороннюю проверялку добейся, чтоб работал с твоими сертификатами | |||
| 7
    
        Cyberhawk 15.06.18✎ 09:35 | 
        И твой код это дичь какая-то, у тебя пароль это путь к файлу key что ли? Лол     | |||
| 8
    
        Aradel3d 15.06.18✎ 09:37 | 
        (7) )) сейчас тоже заметил, заменил на содержимое .key - не прокатило...     | |||
| 9
    
        Cyberhawk 15.06.18✎ 09:42 | 
        Ты узнай у ТП, пусть выдадут тебе сервис для теста, который не требует "подписывать запрос"     | |||
| 10
    
        Cyberhawk 15.06.18✎ 09:43 | 
        Но который работает через ХТТПС, с клиентским сертификатом и паролем от него     | |||
| 11
    
        Aradel3d 15.06.18✎ 09:45 | 
        (10) Верно. Как думаешь, пароль в виде содержимого .pem это ок? А то есть сомнения. По хорошему первым этапом тестов нужно чтоб от нас любые сертификаты принимались, далее понять работает ли клиентский сертификат и его пароль KEY и последний этап попытки завести с signature в заголовке например, на мой взгляд.     | |||
| 12
    
        Aradel3d 15.06.18✎ 09:46 | 
        (11) * пароль в виде содержимого .key файла     | |||
| 13
    
        Cyberhawk 15.06.18✎ 09:47 | 
        "пароль в виде содержимого .pem это ок?" // Может key? Тебе виднее, где там твой присланный пароль от этого сертификата.
 Через браузер-то работает? Он тоже умеет запрашивать файл сертификата и показывает окошко для ввода пароля. | |||
| 14
    
        dezss 15.06.18✎ 09:54 | 
        (8) а ты этот файл хоть открывал?
 смотрел, что в нем? | |||
| 15
    
        Aradel3d 15.06.18✎ 10:03 | 
        (14) конечно, когда я увидел что пароль это жестко строка, открыл файл, взял данные между -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- и перенес в качестве строки в поле для пароля. 
 (13) нет, ничего не открывает, но ТП говорит, что "Это ок". Сейчас находимся на этапе ожидания отключения проверок клиентских сертификатов. Держу в курсе)) | |||
| 16
    
        Cyberhawk 15.06.18✎ 10:06 | 
        (15) "взял данные между -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- и перенес в качестве строки в поле для пароля" // Нет, это не пароль, это скорее всего двоичные данные клиентского сертификата     | |||
| 17
    
        Aradel3d 15.06.18✎ 10:09 | 
        (16) client.crt, client.key - Клиентский сертификат и его секретная часть сгенерированная на основе client_ca.crt (пароль 1234) вот что пишут php-шники из ТП. Тогда вопрос, как подцепить "секретную часть" в 1С?     | |||
| 18
    
        Cyberhawk 15.06.18✎ 10:09 | 
        Ты еще огласи платформу, а то ХТТПС в веб-/хттп-сервисах с сертификатами работает только на 8.3.9+ (режим совместимости неважен), на более ранних будешь ловить геморрой в виде непонятных ошибок, над которыми можно долго зависать и геморроиться безконечно     | |||
| 19
    
        Aradel3d 15.06.18✎ 10:10 | 
        *client.crt был сконвертирован в .pem. Платформа 8.3.10.2561     | |||
| 20
    
        Cyberhawk 15.06.18✎ 10:12 | 
        Рекомендую (на твоем месте) почитать чего-нибудь в гугле, чтобы понимать, чего там и как взаимодействует     | |||
| 21
    
        Aradel3d 15.06.18✎ 10:13 | 
        (20) я параллельно это делаю:)     | |||
| 22
    
        dezss 15.06.18✎ 10:15 | 
        (17) ну вот...при генерации ты пароль какой-то вводил для доступа к ключу, его пихай во второй параметр Новый СертификатКлиентаФайл(Путь,Пароль).
 А может это волшебное "1234" и есть пароль. | |||
| 23
    
        Cyberhawk 15.06.18✎ 10:15 | 
        Скорее всего твои ребятки на той стороне не о "подписи запроса" толкуют, а о подписи передаваемых в этом запросе данных     | |||
| 24
    
        Aradel3d 15.06.18✎ 10:16 | 
        (22) нет, увы, я все попробовал     | |||
| 25
    
        Aradel3d 15.06.18✎ 10:16 | 
        (23) данные строка json     | |||
| 26
    
        Cyberhawk 15.06.18✎ 10:17 | 
        (25) Это неважно, в этой строке и будет текстовое представление зашифрованных тем твоим четвертым ключом данных. Я так думаю.     | |||
| 27
    
        Cyberhawk 15.06.18✎ 10:18 | 
        Обычно у нормальных ребят (и сам так всегда делаю) есть операция веб-/хттп-сервиса "Hello" без всяких параметров, которая возвращает ответ. Это дает понимание, что ХТТПС-связь (на уровне клиентского сертификата и его пароля) установлена     | |||
| 28
    
        Cyberhawk 15.06.18✎ 10:19 | 
        Если ХТТПС (ССЛ) соединение установлено, то никакой ХТТП-запрос (ПОСТ там, ГЕТ и т.д.) "подписать" отдельно нельзя. Так что (6) и сношай мозг им.     | |||
| 29
    
        Aradel3d 15.06.18✎ 10:21 | 
        (27) у этих ребят есть "Hello" но прикол в том, что оно возвращается даже без сертификатов)))     | |||
| 30
    
        Cyberhawk 15.06.18✎ 10:50 | 
        Ну может это не прикол, а так и задумано.
 Возможно эти все твои сертификаты и не нужны для ХТТПС-соединения? А нужны для подписи самих передаваемых данных? | |||
| 31
    
        Cyberhawk 15.06.18✎ 10:51 | 
        Тебе явно надо с ними "по понятиям" поговорить (в прямом смысле)     | |||
| 32
    
        Aradel3d 15.06.18✎ 11:15 | 
        (31) Выяснилось, что под подписью запроса они подразумевали именно x-signature в заголовке запроса. С этим разобрались, но прикол в том, что проверку сертификатов при соединении ssl они отрубить не могут. Запросил у них какую-нибудь проверялку сертификатов на php или еще что-то в этом духе, чтоб понять соединение работает с ними или нет, может и не в 1с дело...     | |||
| 33
    
        Cyberhawk 15.06.18✎ 11:49 | 
        "проверку сертификатов при соединении ssl они отрубить не могут" // Ну так это и не нужно. Браузером прекрасно проверяется.     | |||
| 34
    
        Aradel3d 15.06.18✎ 14:23 | 
        Дело было в Private key. К client.pem шел client.key который нужен, чтоб воспользоваться клиентским сертификатом. Но в 1С его подцепить не удалось. Поэтому был запрошен сертификат без ключа client.pfx и он заработал. При этом он защищен паролем (тем самым "1234").
 Новый СертификатКлиентаФайл("C:/.../client.pfx","1234") Вот так вот все здорово закончилось. | |||
| 35
    
        Cyberhawk 15.06.18✎ 14:46 | 
        "был запрошен сертификат без ключа client.pfx и он заработал" // Ну это сертификат с паролем, ага. Но только ты и сам его по идее мог сделать, странно что тебя не послали     | |||
| 36
    
        Aradel3d 15.06.18✎ 14:50 | 
        1с-ники и php-шники, друзба!     | |||
| 37
    
        Cyberhawk 15.06.18✎ 14:58 | 
        Ну да. Ни те, ни другие не программисты )     | |||
| 38
    
        Джон 15.06.18✎ 15:21 | 
        Коллеги! Всем привет! Крайне редко здесь оказываюсь , хотя учетка давно. Сегодня методом поиска вышел на эту ветку и прямо в цель. Аналогичная задача - интеграция приложения 1С для получения данных по чекам. Не удивлюсь,  что работаем через одного поставщика. Написал запрос POST, разобрался с подписью в заголовке, хотя в итоге оказывается нужно для каждого запроса формировать новую подпись. А вот коннект был неудачен из-за вот этих самых файлов с ключами. Спасибо за разбор. Буду держать в курсе с подписью, мало ли получится. Прошу вас держите в курсе событий если не сложно.     | |||
| 39
    
        Джон 15.06.18✎ 15:29 | 
        Подскажите  при определении переменной вот так прописываю
 ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаФайл("D:\!_ФЛ\!_Отчеты и обработки\2 Обработки\ОбменС_ОФД\File_for_test\client.pfx",1234),Новый СертификатыУдостоверяющихЦентровФайл("D:\!_ФЛ\!_Отчеты и обработки\2 Обработки\ОбменС_ОФД\File_for_test\carcert.pem")); у меня на этой строке через попытку исключение , то есть дальше движения нет Чего не вижу | |||
| 40
    
        Cyberhawk 15.06.18✎ 15:37 | 
        СП в помощь, типы параметров     | |||
| 41
    
        Aradel3d 15.06.18✎ 15:56 | 
        (39) Пароль в кавычках! "1234"
 Кстати покажите как Вы реализовали X-Signature в заголовке? | |||
| 42
    
        Джон 15.06.18✎ 16:10 | 
        соединение по SSl прошло только так:
 ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаФайл("D:\!_ФЛ\!_Отчеты и обработки\2 Обработки\ОбменС_ОФД\File_for_test\client.pfx","1234"),Неопределено); то есть без указания доверяющего центра, и если эти самые все сертификаты инсталлировать в ОС , то можно применять так: ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто), Новый СертификатыУдостоверяющихЦентровWindows()); А теперь к заголовку : ЗаголовокЗапроса.Вставить("X-Signature", BASE64Значение(та сама строка) которая сконвертирована из файла private_key.xml через https://superdry.apphb.com/tools/online-rsa-key-converter Это так для пробы, но не прокатило - при передаче запроса ошибка, да и это был бы просто вариант для одного запроса, а надо вот через этот самы файл-ключ генерить подпись для каждого запроса | |||
| 43
    
        Aradel3d 15.06.18✎ 16:16 | 
        (42) Должно быть что-то типа:
 МенеджерКриптографии = Новый МенеджерКриптографии("Microsoft Base Cryptographic Provider v1.0", "", 1); МенеджерКриптографии.АлгоритмХеширования = "SHA-256"; Signature = Base64Строка(МенеджерКриптографии.Зашифровать(СтрокаJSON,Новый СертификатКриптографии("C:/.../private_key.pem"))); На мой взгляд. Но строка МенеджерКриптографии.АлгоритмХеширования = "SHA-256"; дает ошибку "Неизвестный алгоритм криптографии." А если не указывать алгоритм хеширования, то валится на Зашифровать, с ошибкой: "Ошибка при создании контекста сертификата." | |||
| 44
    
        Джон 15.06.18✎ 16:23 | 
        Да, тоже к этому подошел, и опять в сторону ушел,  а есть вариант запуска скрипта , то есть чтение файла с ключом для подписи , это как вопрос?Или такой вариант вообще  и близко не подходит
 Криптография - это явно ближе | |||
| 45
    
        Aradel3d 15.06.18✎ 16:33 | 
        Если у меня не выйдет с менеджером криптографии я буду ставить OpenSSL и командной строкой шифровать/подписывать текстовый файл с джейсоном, затем читать его и совать в Х-Сигнатуру.     | |||
| 46
    
        Aradel3d 15.06.18✎ 16:36 | 
        Проблема 1: какой модуль шифрования указать в Менеджере.
 "Microsoft Base Cryptographic Provider v1.0" и "Microsoft Enhanced RSA and AES Cryptographic Provider" выдают ошибку "Неизвестный алгоритм криптографии." на "SHA-256". Я даже не знаю правильно с - или без... чисто по скудной инфе на форумах. Проблема 2: почему private_key.pem дает ошибку "Ошибка при создании контекста сертификата." Предположу, что потому что сертификат использует один модуль криптографии, а менеджер в 1С другой. | |||
| 47
    
        Джон 15.06.18✎ 16:46 | 
        При передаче данных запроса передаешь строку JSON  а не файл, плюс добавляешь заголовок,  а значит речь не идет о шифровке в целом всего файла, 
 Возможно это выполняется через Хеширование данных, где Хеш = Новый ХешированиеДанных(ХешФункция.SHA256); Хеш.ДобавитьФайл(ФайлСКлючом); а затем при обработке строки еще плюсом добавляется строка через ХЕШ, и уже итоговая через кодировк BASE64(Строка) в виде подписи? | |||
| 48
    
        Aradel3d 15.06.18✎ 16:49 | 
        (47) Из ХешированиеДанных(ХешФункция.SHA256);  ты получишь только сумму, а зачем тебе сумма?
 ТП прислала консольную строку OpenSSL: openssl dgst -sha256 data.txt > hash openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature Т.е. они загоняют именно файл, а потом видимо из него дергают содержимое, в своем php. И если Менеджер криптографии не взлетит, надо будет воспроизводить их действия... | |||
| 49
    
        Джон 18.06.18✎ 10:34 | 
        Если какие-либо хорошие вести с полей. Уже полная путаница- какой вариант применять, одно ясно судя по описаниям с инета - все скудно и методом ошибок и проб, удалось победить АлгоритмХеширования,  а вот АлгоримПодписи возможно тоже нужно использовать     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |