YXA

written on Monday, October 22, 2012

Продовжую поглядати на різні реалізації SIP сервера. Ходити з відром добра навколо телекому та пропустити побризкати ним на ерланг було неправильно.

Один із критеріїв вибору технології — наскільки вона жива, чи розвивається, чи є в неї ком'юніті. Востаннє, коли я дивився на проект yxa, він був ніхуя не живий, залежав від древньої версії ерланга і взагалі не вселяв.

Те, що проект залежить від старої версії рантайму — не погано само по собі, але це індикатор того, що активна розробка не ведеться, продукт не використовується в продакшені купою людей (а значить не протестований), і бігти за багфіксами буде ні до кого. Коротше ой.

Нещодавно помітив, що версію ерланга в YXA апнули до актуальної RB1501, і з'явився привід подивитись, шо там твориться.

ssl:seed

Напилив конфіг, запустив incomingproxy — валиться. Трейс показує де проблема, але я не настільки розумію ерланг, щоб зрозуміти чому так відбувається. Бачу, шо вилітає на виклику функції ssl:seed. Методом безсистемного пошуку з'ясовую, шо функція взагалі давно deprecated, а в новому RB15 її просто випилили. Типу ой.

Викидаю ssl:seed, продовжую тикати далі. Окей, звичайні клієнти можуть під'єднатися, пройти аутентифікацію по статичній табличці.

ssl:peercert

Наступний етап — взяти свій секретний клієнт з увімкненим 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. Все одно падаємо, але вже далі.

WTF

Взагалі можна було продовжити, але тут я помітив страшне: код програми парсить SSL сертифікати. Сам. Магічною магією, яку я не то шо не можу осилити своїм мозком, але хочу щоб це краще зробили якісь розумні дядьки, які бачать структуру сертифіката не перший раз у житті.

Мені взагалі потрібні з цього сертифіката CN або DN, щоб зрозуміти хто це такий розумний до мене прийшов і чому я маю йому вірити.

Починаю дивитися як зроблено в інших місцях — у rabbitmq пекла менше, але теж якийсь розбір бінарника прямо в коді. У стандартній бібліотеці ерланга якось глухо з цього приводу.

Взагалі дуже дивний такий телеком, де треба руками колупатися в сертифікатах. Недоуміваю.

Слово експерту

Надамо слово панові Трескіну (@mtreskin), як експерту по застосуванню няшного ерланжика на просторах окупованої москалями Сайберії:

Maxim Treskin: yxa — це пиздець, тащемта. Його робили тоді, коли культури писання на ерланзі не було, там тонни легасі, гівно і жопа

This entry was tagged