BITERP / PinkRabbitMQ

Внешняя Native API компонента для взаимодействия с RabbitMQ из 1С
MIT License
264 stars 107 forks source link

Проблемы подключения по SSL, подключения в Linux, компиляции проекта #42

Closed akopylov-rdv closed 3 years ago

akopylov-rdv commented 3 years ago

Столкнулся с рядом проблем при попытке использования компоненты:

  1. В windows (Win10x64, 1C:8.3.17x32), не работает защищенное соединение, при вызове метода connect компонента возвращает ошибку (get last error): Timeout. Ошибка вылетает мгновенно, без ожидания. PinkRabbitMQ_timout_error Не защищенное соединение - работает.
  2. В linux не получилось подключиться к серверу RabbitMQ не по SSL/не без SSL. Linux x64 (Ubuntu 20 и 18), платформа 1C x64 (8.3.16, 8.3.17). Пакеты libssl libjsoncpp libevent установлены, но не исключена проблема с версиями пакетов.
    • На актуальной сборке выпадает с ошибкой во время подключения компоненты PinkRabbitMQ_installed_linux_packages
    • На релизах 1.8, 1.9 при вызове метода connect() с ошибкой: RabbitMQ channel is not in usable state. Сетевые проблемы исключены, т.к. с использованием модуля pika (python) получается подключиться по защищенному и незащищенному протоколам. PinkRabbitMQ_not_usable_error
  3. Не компилируется актуальный проект в репозитории (по инструкции):
    • Если компилировать только исходники из его репозитория, то не находились хедеры из компоненты poco
    • Скачал исходники ampqccp и poco свежие, они собрались без ошибок, перелинковал на эти пересобранные библиотеки, но при сборке компоненты появились ошибка уровня кода: про состав параметров методов. Похоже, что-то изменилось во внешних проектах.
ripreal commented 3 years ago

@akopylov-rdv Можно привести 1с-ый код для установления соединения? Какой порт используется?

ipalenov commented 3 years ago

@akopylov-rdv В linux распакуйте компоненту и выполните команду ldd PinkRabbitMQLinuxLin64.so.

akopylov-rdv commented 3 years ago

@akopylov-rdv Можно привести 1с-ый код для установления соединения? Какой порт используется?

@ripreal Порты используются нестандартные 4273, 4274 c SSL image Используемый код в обработке ИнтеграцияRabbitMQ rabbitmq-kaa.cf.zip

akopylov-rdv commented 3 years ago

@akopylov-rdv В linux распакуйте компоненту и выполните команду ldd PinkRabbitMQLinuxLin64.so.

@ipalenov image

ripreal commented 3 years ago

@akopylov-rdv Лучше вмест ообработки напишите как вызываете метод Connect в компоненте? Какие передаете параметры?

akopylov-rdv commented 3 years ago

@akopylov-rdv Лучше вмест ообработки напишите как вызываете метод Connect в компоненте? Какие передаете параметры?

В случае с windows

Begemoth2 commented 3 years ago

@akopylov-rdv Лучше вмест ообработки напишите как вызываете метод Connect в компоненте? Какие передаете параметры?

В случае с windows

  • если Порт = 4274 и ЗащищенноеСоединение = Истина, то соединение НЕ проходит - Ошибка: Timeout

Ну по этому коду нам сложно понять в чем проблема :-)

Мы сейчас используем эту версию компоненты c защищенным соединением с кроликом на https://www.cloudamqp.com/, проблем вроде нет. Код в 1С примерно такой же как у вас.

Попробуйте сделать бесплатный инстанс на https://www.cloudamqp.com/ и подключиться с защищенным соединением к нему (обратите внимание, что там другой порт) Попробуйте подключиться к вашему кролику по защищенному соединению не через компоненту, а через какую-либо стороннюю программу (чтобы убедиться что защищенное соединение в принципе у вас в кролике работает, порт открыт, нет проблем с сертификатами)

akopylov-rdv commented 3 years ago

@Begemoth2

  1. Через другую программу подключаюсь без проблем (Python Pika)
  2. А какой-код ещё хотите увидеть?) Там только один метод, странно ожидать чего-то больше, если проблема в подключении
  3. Компонента под Linux вообще у меня никак не заработает, даже по незащищенному, и даже не подключается как компонента (см. выше). Если бы подключилась по незащищенному каналу, это уже было бы здорово, можно было бы через защищенный тоннель протащить.
  4. https://www.cloudamqp.com/ - проверю вернусь с обратной связью
ripreal commented 3 years ago

@akopylov-rdv А версия компоненты 1.9. бекз защищенного соединения у Вас работает на линуксе?

akopylov-rdv commented 3 years ago

@ripreal

На релизах 1.8, 1.9 при вызове метода connect() с ошибкой: RabbitMQ channel is not in usable state. Сетевые проблемы исключены, т.к. с использованием модуля pika (python) получается подключиться по защищенному и незащищенному протоколам.

На 1.8 и 1.9 компонента подключается, вызов метода connect() подвисает на секунд 10 и падает с ошибкой: RabbitMQ channel is not in usable state. В компоненте 1.9 нет ещё параметра ssl.

akopylov-rdv commented 3 years ago

@Begemoth2 @ripreal С облачным ребитом и виндовой компонентой тоже самое, без SSL - работает, c SSL - нет, ошибка та же: timeout

https://user-images.githubusercontent.com/52494681/107620588-fd2ccb00-6c65-11eb-8122-b7027ab9d344.mp4

akopylov-rdv commented 3 years ago

Для ошибки таймаута, слишком быстро ответ происходит, может где-то нужно параметр таймаут > 0 указать

ripreal commented 3 years ago

Возможно у Вас кривая сборка 1.10. Вот собрал тестовую конфу с одной кнопкой Connect и подключением к облачному раббиту через amqps. Она у меня работает. https://yadi.sk/d/Vxu51Aoqos9OCw Проверяйте.

akopylov-rdv commented 3 years ago

@ripreal Работает подключение SSL под windows с x64 платформой, похоже проблема с компонентой для x32 разрядной платформы. К НЕоблачному ребиту получилось подключиться с SSL после того как в конфиге закомментировал проверку SSL цепочки сертификатов:

ssl_options.verify = verify_peer

Возможно, что-то не так работает с хранилищем сертификатов

Под Linux компонента не подключается (ПодключитьВнешнююКомпоненту). image

Begemoth2 commented 3 years ago

Работает подключение SSL под windows с x64 платформой, похоже проблема с компонентой для x32 разрядной платформы.

Спасибо за информацию. Проверим у себя на x86, если найдем ошибку исправим (но не раньше завтра)

К НЕоблачному ребиту получилось подключиться с SSL после того как в конфиге закомментировал проверку SSL цепочки сертификатов:

ssl_options.verify = verify_peer

А где именно закомментировали эту строчку? Т.е. правильно я понимаю, что это какое-то стороннее приложение на openssl, которое с проверкой сертификатов не работало с вашим внутреннем кроликом, а без проверки работало?

Правильно я понимаю, что вам в проверка подлинности сертификата в компоненте нужна, по этому нужно найти место/способ как зарегистрировать его в виндовс так, чтобы его видела компонента (также, как видит для облачного кролика)?

Под Linux компонента не подключается (ПодключитьВнешнююКомпоненту).

Для линукса пока расследовать не планируем, т.к. в данный момент не планируем использовать данную версию компоненты для Линукс. Скорее всего проблема с зависимостями, т.е. нужно попробовать собрать все зависимости статически внутрь компоненты.

akopylov-rdv commented 3 years ago

@Begemoth2 Планируем использовать компоненту только под Linux. Если не будет работать SSL, то можно найти временные решения, до тех пор, пока не станет работать.

А где именно закомментировали эту строчку? В конфиге rabbitmq

Begemoth2 commented 3 years ago

@akopylov-rdv

  1. Мы проверили работу с ssl на x86 под windows (т.е. взяли 32битную платформу под 64 битной windows). У нас проблемы не воспроизвелась
  2. Мы уточним документацию по компоненте, сейчас
    • компонента не передает сой сертификат в RabbitMQ при подключении по ssl, соответственно на сервере RabbitMQ нужно выставить настройки, чтобы не требовать проверку клиентского сертификата
    • компонента проверяет серверный сертификат по данным операционной системы, где работает т.е. только уточним документацию, пока ничего тут дорабатывать не планируем
  3. По работе в Linux попробуем за ограниченное время разобраться, если получится - исправим, если не получится, напишем в ограничения
Begemoth2 commented 3 years ago

@akopylov-rdv Мы немного поразбирались с линуксом, причина проблемы в том, что в 1с лежит своя версия libstdc++. версии 6.7. И все библиотеки, юзающие фичи из версий выше, грузиться не будут. Т.е. если мы собираем нашу либу под libstdc++ 6.7, то она грузится, но системная openssl.so не грузится, ибо она собрана под системную libstdc++

Т.е. нормальным решением проблемы будет собрать компоненту со статическими библиотеками (т.е. все библиотеки нужных версий засунуть в компоненту), но пока мы это делать не планируем.

Есть способ обхода, если у вас используется ubuntu16/debian8 то вы можете сами попробовать собрать компоненту по инструкции из readme, т.к. в этих ОС системная libstdc++ ниже 6.7, то должно собраться и работать (но мы не уверены, сами не проверяли)

Begemoth2 commented 3 years ago

@akopylov-rdv Мы собрали релиз компоненты для линукса (все библиотеки встроили внутрь компоненты) https://share.bit-erp.ru/public/file/szZvAWe-sUWVROBFbS-lQg/PinkRabbitMQ_v1.10_7.zip Прошу проверить, работает ли у вас и написать

akopylov-rdv commented 3 years ago

@Begemoth2
Компонента v1.10.7 подключается:

Буду пробовать работать с компонентой. Это задачу можно закрывать, если будут ещё вопросы, то отдельно напишу.

Спасибо!

ipalenov commented 3 years ago

@akopylov-rdv Скажите, имеется ли у Вас возможность протестировать компоненту, собранную на GutHub Actions? https://github.com/BITERP/PinkRabbitMQ/suites/2709752247/artifacts/59728198