Running your own SIP registrar

My last post described the best way I've found to set up a secure P2P authenticated VoIP call on your Android handset. I endorsed the Ekiga free SIP service to be your registrar for your unique SIP address. Since the registrar is the central database to look up other users, there is a case to bring this service into your control, rather than to depend on a third party.

This is not a trivial task, since it requires server infrastructure and an esoteric configuration process. It also requires routine maintenance and security updates to ensure the registrar is available when any user (including yourself) wants to contact another.

There are three major applications that offer a SIP registration service. They vary in complexity and user community. They also have a wide variation of ZRTP support. Since ZRTP is a P2P authentication protocol, a middle man like these applications does not have to get in the way, it just has to pass along the correct signalling information so the peers can move onto the encryption key exchange.

Asterisk

Asterisk is the most mature application for SIP services, though it is far more complicated than the others. It has a GPL license and a large user community. There is an industry conference dedicated to service providers and developers. Asterisk also carries a dual license to legally use it with commercial support and distribution. It has been built to run on a wide range of hardware, from huge multi-core server systems to tiny embedded computers.

Asterisk requires a patch to support ZRTP (note: this is more than a patch, weighing in at 9.9MB it is more like an upgrade to the application, including a binary modification to the proprietary build). This is because Asterisk can also handle media, such as a RTP stream, which is where the ZRTP key exchange happens. It's not that Asterisk doesn't support ZRTP, it's that Asterisk mangles the ZRTP information before it can get to the peers. Unpatched, this means an encryption key exchange is not possible.

Freeswitch

Freeswitch is similar to Asterisk in functionality, but only carries an MPL license so it may be redistributed commercially without purchasing commercial support. It has a large user community and also has an industry conference for operators and developers.

Much like Asterisk, Freeswitch handles media so it requires a modification to the source tree to support ZRTP. The process differs in that the source code to call ZRTP functions is present in the code base, but if you don't compile it with the option to link to Phillip Zimmermann's libzrtp, these functions will be ignored.

Each process to enable ZRTP for these two applications present a licensing quagmire, so I chose to stop looking into Freeswitch and Asterisk until the library for ZRTP support may be freely distributed along with the rest of the source code. The Freeswitch community is in the negotiation process with Mr. Zimmermann to include this library.

GNU Sipwitch

GNU Sipwitch is a much newer project therefore has fewer features then the other two applications. It also has a GPL license. Two points! In our case, less features is better since all we need is a SIP registration service. Sipwitch solves this problem well, though I'll describe some trouble I had in practice later.

Because of its simplicity, I chose Sipwitch as my registration service. The documentation is sparse, and it took me a few days of trial and error, coupled with my past experience debugging the SIP protocol to figure out how to alter the default configuration to allow registered users to call each other.

I'm holding off on a tutorial in this article since I'm in the process of debugging a media transport error between two calls made with Sipwitch. Expect a simple process to set up a server in a cloud environment with Sipwitch in the coming week.


Written on 2012-01-17 07:36:48 UTC

Back

comments powered by Disqus

I am a hacker and systems architect specializing in data analytics and human computer interfaces.



Photos

Music

lazzarello's Profile Page

  • Login