written on Monday, October 22, 2012
Продолжаю посматривать на разные реализации SIP сервера. Ходить с ведром добра вокруг телекома и пропустить побрызгать им на эрланг было не правильно.
Один из критериев выбора технологии - насколько она живая, развивается ли она, если у нее коммюнити. Последний раз, когда я смотрел на проект yxa , он был нифига не живой, зависел от древней версии эрланга и вообще не внушал.
То что проект зависит от старой версии рантайма - не плохо само по себе, но это индикатор того, что активная разработка не ведется, продукт не используется в продакшене кучей людей (а значит не оттестирован) и бежать за багфиксами будет не к кому. Вобщем ой.
Недавно заметил, что версию ерланга в YXA апнули до актуальной RB1501 и возник повод посмотреть, что там творится.
Напилил конфиг, запутил incomingproxy - валится. Трейс показывает где проблема, но я не настолько понимаю ерланг, чтобы понять, почему так происходит. Вижу, что вылетает на вызове функции ssl:seed. Методом бессистемного поиска, выясняю, что функция вобщемто давно deprecated, а в новом RB15 ее просто выпилили. Типа ой.
Выкидываю ssl:seed, продолжаю тыкать дальше. Окей, у обычных клиентов получается приконектиться, пройти аутентификацию по статической табличке.
Следующий этап - взять свой секретный клиент с включенным SSL и клиентскими сертификатами и попробовать подключиться. На дефолтных настройках все вроде как работает - хендшейк проходит, шифрованный трафик туда-суда бегает.
Но это все неправда, потомучто в логах написано такое:
TCP connection: Could not get SSL subject information for connection from 192.168.1.2:63231 : no_peercert (ignoring)
Игноринг - это не ок. Иду в конфиг, включаю verify_peer и перепроверяю. Теперь на сервере вылетает поток соединения. Он почему-то думает, что ssl:peercert возвращает структурку (record в терминологии ерланга) Certificate, а функция возвращает список байт.
Окей, пишим патчик, который дергает public_key:pkix_decode_cert и декодит из потока сознания нужный record. Все равно падаем, но уже дальше.
Вобщемто можно было продолжить дальше, но тут я заметил страшное: код приложения парсит SSL сертификаты. Сам. Магической магигей, которую я не то чтобы не могу осилить своим мозгом, но хочу, чтобы лучше это сделали какие-то умные дяди, которые видят структуру сертификата не первый раз в жизни.
Мне вобщемто нужны из этого сертификата CN или DN, чтобы понять, кто это такой умный ко мне пришел и почему я ему должен верить.
Начинаю смотреть, как сделано в других местах - в rabbitmq ада меньше, но тоже какой-то разбор бинарника прям в коде. В стандартной библиотеке ерланга как-то глухо по этому поводу.
Вобщем очень странный такой телеком, в котором надо ручками ковыряться в сертификатах. Недоумеваю
Предоставим слово пану Трескину (@mtreskin), как эксперту по применению няшного ерланжика на просторах оккупированой москалями Сайберии:
Maxim Treskin: yxa — это пиздос, тащемта. его делали тогда, когда культуры писания на ерланге не было там тонны легаси, говно и жопа