Вход | Регистрация


1С:Предприятие ::

Метки: 

HTTP запрос Post и подпись

Я
   Aradel3d
 
15.06.18 - 09:00
Привет!
Есть защищенное HTTP соединение, в котором я прописываю СертификатКлиентаФайл (.pem) и (.key) который подставляю в качестве пароля, а также СертификатыУдостоверяющихЦентровФайл (тоже .pem). Все три сертификата переданы нашим партнером. Но как выяснилось, отправляемый POST запрос, нужно еще подписывать "private_key.xml сконвертированным в pem". В pem я сконвертировал, а вот как дальше не соображу. Подскажите пожалуйста...?
 
  Рекламное место пустует
   Aradel3d
 
1 - 15.06.18 - 09:04
Может речь о МенеджерКриптографии и подписывать надо строку которую я передаю в запросе?
   Cyberhawk
 
2 - 15.06.18 - 09:06
ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл(ПутьККлиентскомуСертификату, ПарольККлиентскомуСертификату));
   Cyberhawk
 
3 - 15.06.18 - 09:06
И указываешь его в конструкторе ХТТП-соединения
   Cyberhawk
 
4 - 15.06.18 - 09:08
Никакого понятия "подписать запрос" в объектной модели 1С нет.
Возможно, тебе нужно добавить в него какой-нибудь заголовок, но это уже исключительно прикладным АПИ поставщика сервиса определяется.
   Aradel3d
 
5 - 15.06.18 - 09:12
(2) SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("C:/.../client.pem","C:/.../client.key"),Новый СертификатыУдостоверяющихЦентровФайл("C:/.../cacert.pem"));

Это уже сделано. Но ТП партнера пишет что "Запрос нужно подписать ключем private_key" т.е. это четвертый файл который они передали нам.

Получается 1с так не умеет? Я кстати попробовал МенеджерКриптографии, вылетает с ошибкой, что подписывать можно только файлы. Но при этом в HTTP запросы мне нужно в тело передавать строку. Получается МенеджерКриптографии отпадает...
   Cyberhawk
 
6 - 15.06.18 - 09:34
"ТП партнера пишет что "Запрос нужно подписать ключем private_key" т.е. это четвертый файл который они передали нам"// У них и спрашивай, что это означает.

Для начала через какую-нибудь стороннюю проверялку добейся, чтоб работал с твоими сертификатами
   Cyberhawk
 
7 - 15.06.18 - 09:35
И твой код это дичь какая-то, у тебя пароль это путь к файлу key что ли? Лол
   Aradel3d
 
8 - 15.06.18 - 09:37
(7) )) сейчас тоже заметил, заменил на содержимое .key - не прокатило...
   Cyberhawk
 
9 - 15.06.18 - 09:42
Ты узнай у ТП, пусть выдадут тебе сервис для теста, который не требует "подписывать запрос"
   Cyberhawk
 
10 - 15.06.18 - 09:43
Но который работает через ХТТПС, с клиентским сертификатом и паролем от него
 
 
   Aradel3d
 
11 - 15.06.18 - 09:45
(10) Верно. Как думаешь, пароль в виде содержимого .pem это ок? А то есть сомнения. По хорошему первым этапом тестов нужно чтоб от нас любые сертификаты принимались, далее понять работает ли клиентский сертификат и его пароль KEY и последний этап попытки завести с signature в заголовке например, на мой взгляд.
   Aradel3d
 
12 - 15.06.18 - 09:46
(11) * пароль в виде содержимого .key файла
   Cyberhawk
 
13 - 15.06.18 - 09:47
"пароль в виде содержимого .pem это ок?" // Может key? Тебе виднее, где там твой присланный пароль от этого сертификата.
Через браузер-то работает? Он тоже умеет запрашивать файл сертификата и показывает окошко для ввода пароля.
   dezss
 
14 - 15.06.18 - 09:54
(8) а ты этот файл хоть открывал?
смотрел, что в нем?
   Aradel3d
 
15 - 15.06.18 - 10:03
(14) конечно, когда я увидел что пароль это жестко строка, открыл файл, взял данные между -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- и перенес в качестве строки в поле для пароля.

(13) нет, ничего не открывает, но ТП говорит, что "Это ок". Сейчас находимся на этапе ожидания отключения проверок клиентских сертификатов. Держу в курсе))
   Cyberhawk
 
16 - 15.06.18 - 10:06
(15) "взял данные между -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- и перенес в качестве строки в поле для пароля" // Нет, это не пароль, это скорее всего двоичные данные клиентского сертификата
   Aradel3d
 
17 - 15.06.18 - 10:09
(16) client.crt, client.key - Клиентский сертификат и его секретная часть сгенерированная на основе client_ca.crt (пароль 1234) вот что пишут php-шники из ТП. Тогда вопрос, как подцепить "секретную часть" в 1С?
   Cyberhawk
 
18 - 15.06.18 - 10:09
Ты еще огласи платформу, а то ХТТПС в веб-/хттп-сервисах с сертификатами работает только на 8.3.9+ (режим совместимости неважен), на более ранних будешь ловить геморрой в виде непонятных ошибок, над которыми можно долго зависать и геморроиться безконечно
   Aradel3d
 
19 - 15.06.18 - 10:10
*client.crt был сконвертирован в .pem. Платформа 8.3.10.2561
   Cyberhawk
 
20 - 15.06.18 - 10:12
Рекомендую (на твоем месте) почитать чего-нибудь в гугле, чтобы понимать, чего там и как взаимодействует
   Aradel3d
 
21 - 15.06.18 - 10:13
(20) я параллельно это делаю:)
   dezss
 
22 - 15.06.18 - 10:15
(17) ну вот...при генерации ты пароль какой-то вводил для доступа к ключу, его пихай во второй параметр Новый СертификатКлиентаФайл(Путь,Пароль).
А может это волшебное "1234" и есть пароль.
   Cyberhawk
 
23 - 15.06.18 - 10:15
Скорее всего твои ребятки на той стороне не о "подписи запроса" толкуют, а о подписи передаваемых в этом запросе данных
   Aradel3d
 
24 - 15.06.18 - 10:16
(22) нет, увы, я все попробовал
   Aradel3d
 
25 - 15.06.18 - 10:16
(23) данные строка json
   Cyberhawk
 
26 - 15.06.18 - 10:17
(25) Это неважно, в этой строке и будет текстовое представление зашифрованных тем твоим четвертым ключом данных. Я так думаю.
   Cyberhawk
 
27 - 15.06.18 - 10:18
Обычно у нормальных ребят (и сам так всегда делаю) есть операция веб-/хттп-сервиса "Hello" без всяких параметров, которая возвращает ответ. Это дает понимание, что ХТТПС-связь (на уровне клиентского сертификата и его пароля) установлена
   Cyberhawk
 
28 - 15.06.18 - 10:19
Если ХТТПС (ССЛ) соединение установлено, то никакой ХТТП-запрос (ПОСТ там, ГЕТ и т.д.) "подписать" отдельно нельзя. Так что (6) и сношай мозг им.
   Aradel3d
 
29 - 15.06.18 - 10:21
(27) у этих ребят есть "Hello" но прикол в том, что оно возвращается даже без сертификатов)))
   Cyberhawk
 
30 - 15.06.18 - 10:50
Ну может это не прикол, а так и задумано.
Возможно эти все твои сертификаты и не нужны для ХТТПС-соединения? А нужны для подписи самих передаваемых данных?
   Cyberhawk
 
31 - 15.06.18 - 10:51
Тебе явно надо с ними "по понятиям" поговорить (в прямом смысле)
   Aradel3d
 
32 - 15.06.18 - 11:15
(31) Выяснилось, что под подписью запроса они подразумевали именно x-signature в заголовке запроса. С этим разобрались, но прикол в том, что проверку сертификатов при соединении ssl они отрубить не могут. Запросил у них какую-нибудь проверялку сертификатов на php или еще что-то в этом духе, чтоб понять соединение работает с ними или нет, может и не в 1с дело...
   Cyberhawk
 
33 - 15.06.18 - 11:49
"проверку сертификатов при соединении ssl они отрубить не могут" // Ну так это и не нужно. Браузером прекрасно проверяется.
 
 
   Aradel3d
 
34 - 15.06.18 - 14:23
Дело было в Private key. К client.pem шел client.key который нужен, чтоб воспользоваться клиентским сертификатом. Но в 1С его подцепить не удалось. Поэтому был запрошен сертификат без ключа client.pfx и он заработал. При этом он защищен паролем (тем самым "1234").

Новый СертификатКлиентаФайл("C:/.../client.pfx","1234")

Вот так вот все здорово закончилось.
   Cyberhawk
 
35 - 15.06.18 - 14:46
"был запрошен сертификат без ключа client.pfx и он заработал" // Ну это сертификат с паролем, ага. Но только ты и сам его по идее мог сделать, странно что тебя не послали
   Aradel3d
 
36 - 15.06.18 - 14:50
1с-ники и php-шники, друзба!
   Cyberhawk
 
37 - 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"));

у меня на этой строке через попытку исключение , то есть дальше движения нет

Чего не вижу
   Cyberhawk
 
40 - 15.06.18 - 15:37
СП в помощь, типы параметров
   Aradel3d
 
41 - 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 Это так для пробы, но не прокатило - при передаче запроса ошибка,  да и это был бы просто вариант для одного запроса, а надо вот через этот самы файл-ключ генерить подпись для каждого запроса
   Aradel3d
 
43 - 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
Да, тоже к этому подошел, и опять в сторону ушел,  а есть вариант запуска скрипта , то есть чтение файла с ключом для подписи , это как вопрос?Или такой вариант вообще  и близко не подходит

Криптография  - это явно ближе
   Aradel3d
 
45 - 15.06.18 - 16:33
Если у меня не выйдет с менеджером криптографии я буду ставить OpenSSL и командной строкой шифровать/подписывать текстовый файл с джейсоном, затем читать его и совать в Х-Сигнатуру.
   Aradel3d
 
46 - 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(Строка) в виде подписи?
   Aradel3d
 
48 - 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
Если какие-либо хорошие вести с полей. Уже полная путаница- какой вариант применять, одно ясно судя по описаниям с инета - все скудно и методом ошибок и проб, удалось победить АлгоритмХеширования,  а вот АлгоримПодписи возможно тоже нужно использовать
 
 



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует