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