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 — це пиздець, тащемта. Його робили тоді, коли культури писання на ерланзі не було, там тонни легасі, гівно і жопа