СЕРВИСНЫЙ КОНЦЕНТРАТОР РОСФИНМОНИТОРИНГА, не могу подключиться к тестовым методам

1. DimDiemon 79 06.03.23 16:09 Сейчас в теме
В ЛК заявку на подключение давали, тестовые методы на логин подключили.
Пробую подключаться, код выполняется в файловой базе, то есть на клиенте, обычное приложение:
Попытка
		ЗащищенноеСоед = Новый ЗащищенноеСоединениеOpenSSL(
			Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
	        Новый СертификатыУдостоверяющихЦентровWindows());
		Соединение = Новый HTTPСоединение("portal.fedsfm.ru", , , , , , ЗащищенноеСоед);
	Исключение                             
		ТекстОш = ОписаниеОшибки();
		Сообщить("Не получилось установить соединение:" + Символы.ПС + ТекстОш);
		Возврат;
	КонецПопытки;
	
	СтруктураЗапроса = Новый Структура;
	СтруктураЗапроса.Вставить("userName", "ХХХ");
	СтруктураЗапроса.Вставить("password", "ХХХ");
	ТелоЗапроса = ПолучитьJSONИзСтруктуры(СтруктураЗапроса);
	
	ОтветСервера   = Неопределено; 
	ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
	ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
	ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаЗапроса);
	ЗаписьТекста.Записать(ТелоЗапроса);
	ЗаписьТекста.Закрыть();
	
	ХТЗаголовки = Новый Соответствие;
	ХТЗаголовки.Вставить("Content-Type", "application/json");
			
	Попытка                          
		ХТЗапрос = Новый HTTPЗапрос("/services/fedsfm-service/test-contur/authenticate", ХТЗаголовки);
		ХТЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
		Соединение.ОтправитьДляОбработки(ХТЗапрос, ИмяФайлаОтвета);
	Исключение
		ТекстОш = ОписаниеОшибки();
		Сообщить("Не получилось отправить запрос:" + Символы.ПС + ТекстОш);
		Возврат;
	КонецПопытки;
	
	ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
	
	Если ФайлОтвета.Существует() Тогда
		ТекстОтвета = Новый ТекстовыйДокумент();
		ТекстОтвета.Прочитать(ИмяФайлаОтвета);
		Если ТекстОтвета.КоличествоСтрок()>0 Тогда
			ТекстОтвета.Показать();	
		Иначе
			Сообщить("Получение данных с сервера: Получен пустой ответ сервера."); 	
		КонецЕсли;	
	Иначе	
		Сообщить("Получение данных с сервера: Ответ сервера не получен."); 
	КонецЕсли;	
	
	Попытка УдалитьФайлы(КаталогВременныхФайлов(), ИмяФайлаОтвета); Исключение КонецПопытки;
	Попытка УдалитьФайлы(КаталогВременныхФайлов(), ИмяФайлаЗапроса); Исключение КонецПопытки;
Показать


Рабочее место настроено, в браузеое по сертификату захожу без проблем.
В ответ приходит 404 - файл не найден или перемещён.
Если указать порт 8081, то вообще отправка для обработки не работает: Ошибка работы с Интернет: Failure when receiving data from the peer

Кто сталкивался с подобным, как решали?
Найденные решения
18. DimDiemon 79 13.03.23 12:10 Сейчас в теме
(1)Проблема решена. Суть в том что 1С в принципе не умеет в защищенное соединение по ГОСТ. Во всяком случае, заставить её так работать не получилось на платформе 8.3.22
Для установки соединения использована программа Stunnel от КриптоПРО - обязательно брать именно их сборку, стандартный STunnel так же в ГОСТ не умеет. Доступна на этой странице:
Stunnel
Ставим его на машину, где настроено рабочее место РФМ, для пользователя от которого запускается служба должна быть доступна из хранилища вся цепочка сертификатов для РФМ от личного до Минцифры.
Настраиваем конфу, примерно так:
output = C:\stunnel\stunnel-log.txt
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7

[stunnel.mbki]
client = yes
accept = 127.0.0.1:8383
connect = portal.fedsfm.ru:8081
cert = C:\stunnel\open.cer
verify = 2


open.cer - это сертификат открытого ключа личного сертификата для доступа в ЛК РФМ.
Стартуем службу.
После этого, код в 1С будет выглядеть примерно так:
Соединение = Новый HTTPСоединение("127.0.0.1", 8383);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("userName", "ХХХ");
СтруктураЗапроса.Вставить("password", "ХХХ!");
ТелоЗапроса = ПолучитьJSONИзСтруктуры(СтруктураЗапроса);
	
ХТЗаголовки = Новый Соответствие;
ХТЗаголовки.Вставить("Content-Type", "application/json");
			                       
ХТЗапрос = Новый HTTPЗапрос("services/fedsfm-service/test-contur/authenticate", ХТЗаголовки);
ХТЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(ХТЗапрос);
Показать


Здесь в ответе будет токен. А в последующих запросах этот токе надо вставлять в заголовок.
В инструкции у них сказано, что ключ заголовка должен быть «Authenticate» - это не правда, так не работает.
А вот так нормально:
ХТЗаголовки = Новый Соответствие;
//ХТЗаголовки.Вставить("Authenticate", "Bearer " + Токен);
ХТЗаголовки.Вставить("Authorization", "Bearer " + Токен);
muskul; Zmygor; Kerubim; +3 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. starik-2005 3033 07.03.23 10:05 Сейчас в теме
(1)
Соединение.ОтправитьДляОбработки(ХТЗапрос, ...
Аффтор, у тебя какой версии 1С-то?
Ответ = Соединение.ОтправитьДляОбработки(ХТЗапрос);
Если Ответ.КодОтвета = 200 Тогда
  Текст = Ответ.ПолучитьТелоКакСтрку();
КонецЕсли;
5. DimDiemon 79 07.03.23 10:21 Сейчас в теме
Платформа 8.3.12
принципиальной разницы нет, ответ всё равно 404:
Прикрепленные файлы:
6. starik-2005 3033 07.03.23 10:29 Сейчас в теме
(5) Вы, смотрю, даже ошибку скопипастили, а как же телеги учителей, что "вам потом через сто лет пригодиться думать своей головой" )))

Ну а что в заголовках, что в тексте ответа?

Ну и текст запроса тоже установите из строки, а не в файл пишите.
9. DimDiemon 79 07.03.23 10:42 Сейчас в теме
7. starik-2005 3033 07.03.23 10:32 Сейчас в теме
(5) У меня по Вашему УРЛу тоже 404 выходит.
10. DimDiemon 79 07.03.23 10:44 Сейчас в теме
(7)Подключение только по сертификату. Вопрос не в правильности кода, а что именно нужно сделать, чтобы подключиться к РФМ. Вопрос именно к людям, которые уже налаживали связь через РЕСТ АПИ к ним.
ТП от РФМ утверждает что у них всё ровно, значит у меня то то сделано не так, предполагаю, что вопрос настроек подключения, но что именно?
11. starik-2005 3033 07.03.23 11:19 Сейчас в теме
(10) Смотрели статью из (8)?
12. DimDiemon 79 07.03.23 12:06 Сейчас в теме
(11)
Смотрел, сертификаты пляшут нормально. Без них сразу отбойник по SSL
Пробовал сертификат как файл подключать в защищенное соединение - та же петрушка.

У меня пока два варианта:
1. Сертификат к запросу надо как то по другому подключать. В инструкции сказано:
При вызове любого метода сервиса для установления защищенного по ГОСТ https-соединения необходимо передавать сведения о сертификате инициатора запроса
Как это сделать иными способами кроме как через объект ЗащищенноеСоединениеOpenSSL я не знаю. Есть варианты?
2. В инструкции опечатка в методе или я не туда стучусь. Написано следующее:
Адрес https://portal.fedsfm.ru:8081/Services/fedsfm-service
Метод Назначение

Код: test-contur/authenticate
Наименование: Авторизация Тестовый метод возвращает JSON Web Token (JWT-токен) сессии (авторизации)
13. starik-2005 3033 07.03.23 13:16 Сейчас в теме
(10)
ТП от РФМ утверждает что у них всё ровно
Я зашел по их ссылкам - там все сломалось, походу. По крайней мере у меня в браузере ошибка вываливается достаточно большая и красивая.
16. DimDiemon 79 07.03.23 14:53 Сейчас в теме
(13) У сервиса РФМ асинхронный режим. В этом дело.
17. DimDiemon 79 07.03.23 15:42 Сейчас в теме
(16)Не в этом дело. На асинхронной отправке запроса та же ошибка:
Прикрепленные файлы:
15. DimDiemon 79 07.03.23 14:01 Сейчас в теме
(14)
Был там. Программа для банков. Покупать чтобы попробовать - такое себе...
Да и задача у меня - грузить списки в 1С, а значит всё равно из 1С подключение делать.
8. starik-2005 3033 07.03.23 10:35 Сейчас в теме
(5) https://sync1c.ru/1c-82-https - может эта статься тут как-то при делах...
18. DimDiemon 79 13.03.23 12:10 Сейчас в теме
(1)Проблема решена. Суть в том что 1С в принципе не умеет в защищенное соединение по ГОСТ. Во всяком случае, заставить её так работать не получилось на платформе 8.3.22
Для установки соединения использована программа Stunnel от КриптоПРО - обязательно брать именно их сборку, стандартный STunnel так же в ГОСТ не умеет. Доступна на этой странице:
Stunnel
Ставим его на машину, где настроено рабочее место РФМ, для пользователя от которого запускается служба должна быть доступна из хранилища вся цепочка сертификатов для РФМ от личного до Минцифры.
Настраиваем конфу, примерно так:
output = C:\stunnel\stunnel-log.txt
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7

[stunnel.mbki]
client = yes
accept = 127.0.0.1:8383
connect = portal.fedsfm.ru:8081
cert = C:\stunnel\open.cer
verify = 2


open.cer - это сертификат открытого ключа личного сертификата для доступа в ЛК РФМ.
Стартуем службу.
После этого, код в 1С будет выглядеть примерно так:
Соединение = Новый HTTPСоединение("127.0.0.1", 8383);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("userName", "ХХХ");
СтруктураЗапроса.Вставить("password", "ХХХ!");
ТелоЗапроса = ПолучитьJSONИзСтруктуры(СтруктураЗапроса);
	
ХТЗаголовки = Новый Соответствие;
ХТЗаголовки.Вставить("Content-Type", "application/json");
			                       
ХТЗапрос = Новый HTTPЗапрос("services/fedsfm-service/test-contur/authenticate", ХТЗаголовки);
ХТЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(ХТЗапрос);
Показать


Здесь в ответе будет токен. А в последующих запросах этот токе надо вставлять в заголовок.
В инструкции у них сказано, что ключ заголовка должен быть «Authenticate» - это не правда, так не работает.
А вот так нормально:
ХТЗаголовки = Новый Соответствие;
//ХТЗаголовки.Вставить("Authenticate", "Bearer " + Токен);
ХТЗаголовки.Вставить("Authorization", "Bearer " + Токен);
muskul; Zmygor; Kerubim; +3 Ответить
19. Zmygor 26.04.23 12:45 Сейчас в теме
(18)
Спасибо за наводку.
Но в моём случае упёрся в 403 в ответе. Не могу понять, что не так.

Лог stunnel выглядит весьма убедительно


Но при вызове сервиса упорно получаю 403.

У Вас какой в итоге получился конфиг (в частности уровень verify)? Возможно есть запись лога успешного соединения?
Какую версию stunnel-msspi используете?
20. DimDiemon 79 26.04.23 14:11 Сейчас в теме
(19) verify = 2.
Стуннель от Крипто про.
Как вариант, 403 - скорее всего, необходимые сертификаты ОС недоступны для пользователя от которого работает служба стуннель.
От имени этого пользователя откройте ЛК РФМ и попробуйте авторизоваться по сертификату. Как только это получится - должно и из 1С.

Либо стуннель некошерный.
21. RocKeR_13 1317 03.05.23 17:18 Сейчас в теме
(18) В cacert.pem пробовали добавлять информацию о корневом сертификате сервиса, на который выполняется запрос (при его отсутствии)? Пробовали сохранить сертификат в файл и в ЗащищенноеСоединениеOpenSSL передавать путь к файлу сертификата? Писал интеграцию с http-сервисом с установкой защищенного соединения с использованием выданного клиентского сертификата - работал вариант с сохранением файла сертификата p12 во временный файл и передачей пути к нему в ЗащищенноеСоединениеOpenSSL. Но не помню, с каким алгоритмом шифрования выпускался сертификат...
22. Zmygor 25.05.23 15:46 Сейчас в теме
(18)

Предлагаю upd к "А вот так нормально:"

Кроме того, что в доке некорректный заголовок для токена авторизации, так и дальше есть "неточности".

Я потерял время из-за собственной невнимательности и корявости доки на скачивании файла реестра экстремистов.
Дока приводит пример запроса:
{
  "id": "9c...............................ed",
}


Т.е. JSON, что очевидно по оформлению.
НО! Если поднять глаза чуть выше, то там обнаружится требование к заголовку ContentType: application/x-www-form-urlencoded.

И вот это не вяжется никак. Параметры x-www-form-urlencoded передаются как Param1=xxxxxx&Param2=yyyyyy и т.д. Но никак не в JSON.
Пока не заметил этот нюанс и не упаковал в тело id=xxxxx вместо json варианта, получал ошибку 500.

Не будьте как я, передавайте сразу верно :)
DimDiemon; +1 Ответить
2. DENSKR 15 06.03.23 18:43 Сейчас в теме
ПолучитьИмяВременногоФайла
3. DimDiemon 79 07.03.23 07:16 Сейчас в теме
Ответ сервиса 404 я же в этот файл получаю нормально, на экране показывает.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)