|
1С/Linux/ Подпись(шифрование) данных передаваемых Post Запросом. | ☑ | ||
---|---|---|---|---|
0
drey1912
16.09.19
✎
18:50
|
Доброго времени суток!
Есть такая проблема: Есть некая API, для передачи данных в которую требуется подписывать тело запроса при помощи сгенерированного privatekey.pem. Потом кодировать это всё в base64 и вставлять в заголовок запроса X-Request-Signature. Система Ubuntu 16.04. "тело запроса складываете в файл, командой openssl подписываете файл - получаете бинарник подписи, его в base64 и в заголовок."(с) Это цитата ТП клиента. В целом всё понятно, непонятно как это сделать средствами 1С! Есть такая тема: HTTP запрос Post и подпись Ее изучение не дало ответа как подписать этот файл... Подскажите, может сталкивались? |
|||
1
novichok79
16.09.19
✎
19:02
|
что-то типа такого
СертификатКлиента = Неопределено; Если Настройки.ИспользоватьСертификат И ЗначениеЗаполнено(ТипСертификата) Тогда ИмяФайлаСертификата = ПолучитьИмяВременногоФайла(ТипСертификата); Настройки.ДанныеСертификата.Записать(ИмяФайлаСертификата); СертификатКлиента = Новый СертификатКлиентаФайл(ИмяФайлаСертификата, Настройки.ПарольСертификата); Попытка УдалитьФайлы(ИмяФайлаСертификата); Исключение Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(Словарь.КорневоеСобытие(), УровеньЖурналаРегистрации.Ошибка, , , Комментарий); КонецПопытки; КонецЕсли; Если Настройки.СпособАутентификации = Перечисления.СпособыАутентификации.ОбычнаяПроверка Тогда Логин = Настройки.Логин; Пароль = Настройки.Пароль; Иначе Логин = Неопределено; Пароль = Неопределено; КонецЕсли; ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, Новый СертификатыУдостоверяющихЦентровОС); Соединение = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль, , 30, ЗащищенноеСоединение); Запрос = Новый HTTPЗапрос(ПутьНаСервере); Запрос.УстановитьТелоИзСтроки(ДанныеОповещения); |
|||
2
novichok79
16.09.19
✎
19:05
|
по поводу base64, вроде так можно было. без гугла.
СтрокаBase = Base64Строка(ТвоиДвоичныеДанные); |
|||
3
Скиурус
16.09.19
✎
19:06
|
Да как ТП клиента написали, так и сделай. Запиши тело запроса в файл на диске, вызови КомандойСистемы openssl, потом прочитай полученный бинарник, закодируй его с помощью Base64Строка и отправь
|
|||
4
drey1912
16.09.19
✎
19:10
|
(2) Эм, мне надо мои двоичные данные подписать для начала. Потом уже в base64. (3) Это не разовая акция, а по 500 запросов в день примерно и соответственно 500 подписей, а ты как я понимаю предлагаешь подписать файл через консоль?
Если нет, то подскажи как из под 1с выполнять консольные команды Linux, не работал раньше на этой системе...( |
|||
5
drey1912
16.09.19
✎
19:11
|
(1) Спасибо, эту часть я давно сделал)
|
|||
6
drey1912
16.09.19
✎
19:14
|
(3) Затупил, а КомандаСистемы() под линухом тоже работает?
|
|||
7
Скиурус
16.09.19
✎
19:20
|
(6) Конечно
|
|||
8
drey1912
16.09.19
✎
19:36
|
(7) И действительно, ушел экспериментировать, спасибо!
|
|||
9
drey1912
17.09.19
✎
15:05
|
В итоге воспользовался ЗапуститьПриложение() т.к. КомандаСистемы() не работает НаСервере.
|
|||
10
drey1912
17.09.19
✎
15:17
|
openssl dgst -passin pass:пароль -sign путь_к_pem_файлу -out 'путь_к_подписанному файлу/TestSig.txt' -md5 'путь_к_файлу_с_текстом_зпроса/TestReq.txt'
1. для подписи понадобится пароль, задается после dgst. 2. Путь к фалу .pem 3. путь к подписанному файлу, тут тоже всё ясно, куда укажите там и создаст. 4. путь к файлу с текстом запроса: создаем временный файл, пишем в него текст запроса, указываем путь к нему в команде. Удаляем временный файл(не забываем)) 5. Если в пути есть директории с пробелом допустим "Рабочий стол", то такой путь целиком нужно брать в одинарные кавычки! |
|||
11
drey1912
19.09.19
✎
14:25
|
P.P.S. Если после подписания файла и кодировки его в base64 он не проходит валидацию подписи, то проверьте не затесались ли в файл(с запросом, который подписывали) символы: \r\n или BOM. Почистите файл от них перед подписанием)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |