<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waste Paper</title>
	<atom:link href="http://www.saidfauzul.web.id/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saidfauzul.web.id</link>
	<description>just an ordinary notes</description>
	<lastBuildDate>Sat, 03 Mar 2012 01:36:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Behavioral Characteristics of Good System Engineer</title>
		<link>http://www.saidfauzul.web.id/2012/03/482/</link>
		<comments>http://www.saidfauzul.web.id/2012/03/482/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 01:03:14 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[just writing]]></category>
		<category><![CDATA[chief engineer]]></category>
		<category><![CDATA[gentry lee]]></category>
		<category><![CDATA[jet propulsion laboratory]]></category>
		<category><![CDATA[system engineer characteristic]]></category>
		<category><![CDATA[system engineering]]></category>

		<guid isPermaLink="false">http://www.saidfauzul.web.id/?p=482</guid>
		<description><![CDATA[Gentry Lee Chief Engineer for the Planetary Flight Systems Directorate, Chief Engineer for the Solar System Exploration Directorate of NASA&#8217;s Jet Propulsion Laboratory (JPL), received a B. A., Summa Cum Laude, from the University of Texas at Austin in 1963 and an M. S. from the Massachusetts Institute of Technology in 1964, has been awarded [...]]]></description>
			<content:encoded><![CDATA[<p><img title="behavior system engineer" src="http://www.saidfauzul.web.id/wp-content/uploads/2012/03/behavior-system-engineer.png" alt="" width="557" height="423" /><br />
<strong>Gentry Lee</strong><br />
Chief Engineer for the Planetary Flight Systems Directorate, Chief Engineer for the Solar System Exploration Directorate of NASA&#8217;s Jet Propulsion Laboratory (JPL), received a B. A., Summa Cum Laude, from the University of Texas at Austin in 1963 and an M. S. from the Massachusetts Institute of Technology in 1964, has been awarded the prestigious Harold Masursky Award, presented by the American Astronomical Society&#8217;s Division for Planetary Sciences.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2012/03/482/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk Practice &#8211; Voicemail, Hunting</title>
		<link>http://www.saidfauzul.web.id/2011/08/asterisk-practice-voicemail-hunting/</link>
		<comments>http://www.saidfauzul.web.id/2011/08/asterisk-practice-voicemail-hunting/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 13:45:27 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dial plan hunting asterisk]]></category>
		<category><![CDATA[dial plan voicemail asterisk]]></category>
		<category><![CDATA[konfigurasi hunting asterisk]]></category>
		<category><![CDATA[konfigurasi voicemail asterisk]]></category>
		<category><![CDATA[setting asterisk voicemail]]></category>
		<category><![CDATA[simple voip]]></category>

		<guid isPermaLink="false">http://www.saidfauzul.web.id/?p=475</guid>
		<description><![CDATA[Melanjutkan catatan Asterisk Practice yang beberapa waktu yang lalu saya post, berikut ini adalah beberapa konfigurasi yang bisa digunakan untuk Voicemail dan Hunting. Untuk Voicemail, konfigurasi data account SIP pada file sip.conf sama dengan konfigurasi standar yang saya post sebelumnya, perbedaannya hanya pada konfigurasi dial plan yang terdapat pada file extensions.conf dan tambahan konfigurasi voicemail [...]]]></description>
			<content:encoded><![CDATA[<p>Melanjutkan catatan <a href="http://www.saidfauzul.web.id/2010/11/simple-sipvoip-server-asterisk-practice/">Asterisk Practice</a> yang beberapa waktu yang lalu saya post, berikut ini adalah beberapa konfigurasi yang bisa digunakan untuk Voicemail dan Hunting.</p>
<p>Untuk Voicemail, konfigurasi data account SIP pada file <strong>sip.conf</strong> sama dengan konfigurasi standar yang saya <a href="http://www.saidfauzul.web.id/2010/11/simple-sipvoip-server-asterisk-practice/">post sebelumnya</a>, perbedaannya hanya pada konfigurasi dial plan yang terdapat pada file <strong>extensions.conf</strong> dan tambahan konfigurasi voicemail pada file <strong>voicemail.conf</strong>. Sebagai contoh untuk data account yang sudah ada (di posting sebelumnya), dial plan voicemail yang dapat digunakan adalah sebagai berikut:</p>
<blockquote><p>[voiptest]<br />
Exten => 101,1,Dial(SIP/101,20)<br />
Exten => 101,2,Voicemail(101@voiptest)<br />
Exten => 101,3,PlayBack(vm-goodbye)<br />
Exten => 101,4,Wait(2)<br />
Exten => 101,5,Hangup</p>
<p>Exten => 1101,1,VoiceMailMain(101@voiptest)</p></blockquote>
<p>dimana:<br />
[voiptest] : adalah context yang mengatur semua user yang menggunakan context voiptest pada data account<br />
exten : adalah aturan di asterisk untuk menunjukkan nomor extension<br />
101 : adalah nomor extension yang bisa dihubungi<br />
1-5 : adalah prioritas action<br />
Dial : adalah aplikasi untuk men-dial<br />
SIP : adalah nama protokol yang digunakan dan untuk mengidentifikasi bahwa user berada di file sip.conf<br />
101 setelah SIP : adalah nama context di sip.conf<br />
20 : adalah lamanya berdering saat terjadi pemanggilan oleh user yang lain<br />
Voicemail : adalah aplikasi berikutnya yang dikerjakan jika selama 20 detik panggilan tidak dijawab<br />
101@voiptest : <span id="more-475"></span>adalah identifikasi penyimpanan voicemail yang dapat dipanggil lagi kemudian<br />
PlayBack : adalah aplikasi berikutnya yang dikerjakan setelah fungsi Voicemail<br />
vm-goodbye : adalah pesan goodbye yang sudah tersedia default pada instalasi asterisk<br />
Wait : adalah aplikasi berikutnya yang dikerjakan setelah fungsi PlayBack, berupa wait selama waktu yang ditentukan<br />
2 : adalah lamanya waktu menunggu sebelum mengakhiri koneksi<br />
Hangup : adalah aplikasi untuk mengakhiri koneksi<br />
1101 : adalah nomor extension yang bisa dihubungi, dalam hal ini sebagai extension untuk memanggil pesan voicemail<br />
1 : adalah prioritas action<br />
VoiceMailMail : adalah aplikasi untuk memanggil atau memutar pesan voicemail<br />
101@voiptest : adalah pesan voicemail yang akan dipanggil atau diputar</p>
<p>Setelah itu tambahkan baris berikut pada file voicemail.conf:</p>
<blockquote><p>101 => 101,Voicemail user1,user1@localhost</p></blockquote>
<p>dimana:<br />
101 : adalah nomor extension yang memiliki fitur voicemail<br />
Voicemail : adalah aplikasi voicemail<br />
user1 : adalah user yang menggunakan voicemail<br />
localhost : adalah lokasi voicemail tersimpan</p>
<p>Berikutnya adalah konfigurasi Hunting, sama seperti pada konfigurasi voicemail, kita tidak membutuhkan tambahan untuk konfigurasi data account, yang dibutuhkan untuk untuk hunting adalah konfigurasi pada dial plan-nya saja:</p>
<blockquote><p>[voiptest]<br />
exten => 101,1,Ringing<br />
exten => 101,2,Wait(2)<br />
exten => 101,3,SetVar(AVAIL=101)<br />
exten => 101,4,GotoIf($["${AVAIL}"="105"]?9)<br />
exten => 101,5,Dial(Zap/${AVAIL}|20)<br />
exten => 101,6,GotoIf($["${DIALSTATUS}"="ANSWER"]?9)<br />
exten => 101,7,SetVar(AVAIL=$[${AVAIL}+1])<br />
exten => 101,8,Goto(4)<br />
exten => 101,9,Hangup</p></blockquote>
<p>Nah, khusus untuk konfigurasi hunting ini saya ingin mengucapkan terimakasih kepada seorang kawan yang bernama <strong>M. Susantok</strong>, beliaulah yang membuat konfigurasi ini, mengenai penjelasan dari konfigurasi tersebut, saya sendiri hingga saat ini hanya bisa memahaminya untuk diri saya sendiri, jadi silakan rekans sekalian juga mencoba untuk memahaminya. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2011/08/asterisk-practice-voicemail-hunting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CORBA, Hello World</title>
		<link>http://www.saidfauzul.web.id/2010/12/corba-hello-world/</link>
		<comments>http://www.saidfauzul.web.id/2010/12/corba-hello-world/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 14:45:30 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[aplikasi CORBA sederhana]]></category>
		<category><![CDATA[common object request broker]]></category>
		<category><![CDATA[CORBA]]></category>
		<category><![CDATA[IDL]]></category>
		<category><![CDATA[IDLJ]]></category>
		<category><![CDATA[interface definition language]]></category>
		<category><![CDATA[object management group]]></category>
		<category><![CDATA[OMG]]></category>
		<category><![CDATA[ORB]]></category>
		<category><![CDATA[sample CORBA JAVA]]></category>
		<category><![CDATA[simple JAVA CORBA]]></category>
		<category><![CDATA[system communication]]></category>
		<category><![CDATA[using IDLJ]]></category>

		<guid isPermaLink="false">http://www.saidfauzul.web.id/?p=433</guid>
		<description><![CDATA[CORBA (Common Object Request Broker Architecture) merupakan arsitektur standar untuk sistem terdistribusi berbasis object. CORBA memungkinkan banyak object yang terdistribusi untuk saling berhubungan, singkat kata, CORBA adalah semacam middleware yang dihasilkan oleh sebuah konsorsium yang bernama OMG (Object Management Group). Dari salah satu sumber disebutkan bahwa OMG adalah sebuah konsorsium terbuka yang terdiri dari kurang lebih [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture">CORBA (Common Object Request Broker Architecture)</a> merupakan arsitektur standar untuk sistem terdistribusi berbasis object. CORBA memungkinkan banyak object yang terdistribusi untuk saling berhubungan, singkat kata, CORBA adalah semacam <a href="http://en.wikipedia.org/wiki/Middleware">middleware</a> yang dihasilkan oleh sebuah konsorsium yang bernama <a href="http://www.omg.org">OMG (Object Management Group)</a>. Dari salah satu sumber disebutkan bahwa OMG adalah sebuah konsorsium terbuka yang terdiri dari kurang lebih 700 perusahaan yang bekerja sama untuk mendefinisikan standar komputasi object, dengan demikian object CORBA menjadi dapat ditulis dengan beberapa bahasa pemrograman yang didukung oleh perusahaan-perusahaan tersebut, diantaranya C, C++, Java, Ada atau SmallTalk. Selain itu object CORBA juga dapat berada pada berbagai platform sistem operasi seperti Solaris, Linux, Windows, OpenVMS, HP-UX dan AIX juga beberapa platform lainnya.</p>
<p>Sistem CORBA didesain agar antar sistem dapat saling berinteraksi satu sama lainnya dengan melalui suatu objek bus yang bernama <a href="http://en.wikipedia.org/wiki/Object_request_broker">ORB (Object Request Broker)</a>. Melalui ORB inilah objek–objek yang terletak di local atau di remote pada sistem terdistribusi berbasis CORBA saling berkomunikasi. Berikut ini adalah beberapa bagian utama pendukung CORBA:</p>
<ul>
<li><strong>ORB</strong>, sebagai perantara bagi object untuk saling berhubungan, sebagai responder bagi aplikasi atau ORB lainnya</li>
<li><strong>CORBA Services</strong>, sebagai penyedia layanan CORBA yang berjalan pada level sistem (daemon)</li>
<li><strong>CORBA Facilities</strong>, sebagai penyedia layanan CORBA yang berjalan pada level aplikasi</li>
<li><strong>Bussiness Object</strong>, yaitu obyek utama dalam sistem berbasis object</li>
</ul>
<p>Sebuah sistem berbasis CORBA yang memiliki kemampuan berinteraksi dengan berbagai object yang dibangun diatas platform yang beragam, menggunakan sebuah interface yang dapat dimengerti oleh berbagai platform tersebut, interface tersebut dikenal dengan <a href="http://en.wikipedia.org/wiki/Interface_definition_language">Interface Definition Language (IDL)</a>. IDL dikembangkan untuk menyediakan fungsi khusus, yaitu agar dapat digunakan untuk mendefinisikan antarmuka terhadap layanan yang disediakan oleh sistem terdistribusi tersebut. Disini kita akan mencoba CORBA sederhana dengan menggunakan Java, sebagaimana yang sudah diuraikan diatas, maka langkah pertama yang harus dilakukan adalah dengan membuat IDL-nya terlebih dahulu:</p>
<div><strong>$ vi </strong><strong>Hello.idl</strong></div>
<div>kemudian tuliskan baris berikut:</div>
<pre>
<pre class="brush: java">
module HelloApp {
   interface Hello {
      string sayHello();
      oneway void shutdown();
   };
};
</pre>
</pre>
<div>Selanjutnya adalah melakukan kompilasi file IDL tersebut, dengan Java dapat digunakan program IDLJ yang terdapat dalam distribusi Sun JDK:<span id="more-433"></span></div>
<div><strong>$ idlj -fall Hello.idl</strong></div>
<div><strong><br />
</strong></div>
<div>Setelah proses kompilasi selesai, akan dihasilkan file-file sebagai berikut:</div>
<div>
<div><strong>HelloPOA.java</strong>, adalah class abstract yang menyediakan dasar fungsionalitas server CORBA</div>
<div><strong>_HelloStub.java</strong>, adalah class yang menyediakan fungsionalitas untuk client CORBA</div>
<div><strong>Hello.java</strong>, adalah interface yang menyediakan fungsionalitas dasar obyek CORBA yang terdefinisi dalam file IDL</div>
<div><strong>HelloHelper.java</strong>, adalah class yang berfungsi untuk membaca dan menulis tipe data ke streams CORBA</div>
<div><strong>HelloHolder.java</strong>, adalah class yang memberikan delegasi ke metode dari class Helper untuk melaksanakan membaca dan menulis</div>
<div><strong>HelloOperations.java</strong>, adalah interface yang mengandung metode sayHello() dan shutdown()</div>
<div>Pindahkan file-file tersebut kedalam sebuah folder untuk memudahkan kompilasi berikutnya. Selanjutnya adalah pembuatan class server dan client, dimana pada server terdiri dari dua class yaitu server dan servant yang merupakan implementasi dari interface IDL Hello.java.</div>
</div>
<div><strong>$ vi Server.java</strong></div>
<div>kemudian tuliskan baris berikut:</div>
<div>
<div>
<pre>
<pre class="brush: java">
import HelloApp.*;   // folder hasil kompilasi file IDL
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;

class HelloImpl extends HelloPOA {   // servant

   private ORB orb;

   public void setORB(ORB orb_val) {
      orb = orb_val;
   }

   public String sayHello() {   // implementasi dari method sayHello()
      return &quot;Hello World!&quot;;
   }

   public void shutdown() {   // implementasi dari method shutdown()
      orb.shutdown(false);
   }
}

public class Server {   // server

   public static void main(String args[]) {
      try{
         ORB orb = ORB.init(args, null);   // membuat dan menginisialisasi ORB
         POA rootpoa = POAHelper.narrow(orb.resolve_initial_references(&quot;RootPOA&quot;));
         rootpoa.the_POAManager().activate();   // aktifkan POAManager
         HelloImpl helloImpl = new HelloImpl();   // buat servant dan register-kan ke ORB
         helloImpl.setORB(orb);
         org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);   // referensi obyek dari servant
         Hello href = HelloHelper.narrow(ref);
         org.omg.CORBA.Object objRef = orb.resolve_initial_references(&quot;NameService&quot;);   // service name
         NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
         String name = &quot;Hello&quot;;
         NameComponent path[] = ncRef.to_name( name );
         ncRef.rebind(path, href);
         System.out.println(&quot;Server aktif..&quot;);
         orb.run();   // tunggu permintaan dari client
      } catch (Exception e) {
         System.err.println(&quot;ERROR: &quot; + e);
         e.printStackTrace(System.out);
      }
      System.out.println(&quot;Server nonaktif..&quot;);
   }
}
</pre>
</pre>
</div>
</div>
<div>Kompile dengan perintah:</div>
<div><strong>$ javac Server.java HelloApp/*.java</strong></div>
<div>Selanjutnya adalah pembuatan program client:</div>
<div><strong>$ vi Client.java</strong></div>
<div>dan tuliskan baris berikut:</div>
<div>
<div>
<pre>
<pre class="brush: java">
import HelloApp.*;   // folder hasil kompilasi file IDL
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class Client{

   static Hello helloImpl;

   public static void main(String args[]){
      try{
         ORB orb = ORB.init(args, null);      // inisialisasi ORB
         org.omg.CORBA.Object objRef = orb.resolve_initial_references(&quot;NameService&quot;);      // service name
         NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
         String name = &quot;Hello&quot;;
         helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
         System.out.println(&quot;object server handling : \n&quot; + helloImpl);
         System.out.println(helloImpl.sayHello());
         helloImpl.shutdown();
      } catch (Exception e) {
         System.out.println(&quot;ERROR : &quot; + e) ;
         e.printStackTrace(System.out);
      }
   }
}
</pre>
</pre>
</div>
</div>
<div>Kompile dengan perintah:</div>
<div>
<div><strong>$ javac Client.java</strong></div>
</div>
<div>Saat ini program sudah siap, langkah berikutnya adalah menjalankan program server dengan:</div>
<div><strong>$ orbd -ORBInitialPort 1050 -ORBInitialHost localhost</strong></div>
<div><strong>$ java Server -ORBInitialPort 1050 -ORBInitialHost localhost</strong></div>
<div>Setelah program server jalan dan tampil pesan bahwa server sudah aktif, jalankan program client:</div>
<div>
<div><strong>$ java Client -ORBInitialPort 1050 -ORBInitialHost localhost</strong></div>
</div>
<div>Jika berhasil, maka Anda sudah berhasil membuat aplikasi dengan CORBA.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/12/corba-hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple SIP/Voip Server – Asterisk Practice</title>
		<link>http://www.saidfauzul.web.id/2010/11/simple-sipvoip-server-asterisk-practice/</link>
		<comments>http://www.saidfauzul.web.id/2010/11/simple-sipvoip-server-asterisk-practice/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 21:04:01 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[asterisk dial plan]]></category>
		<category><![CDATA[asterisk practice]]></category>
		<category><![CDATA[conference asterisk]]></category>
		<category><![CDATA[echo test asterisk]]></category>
		<category><![CDATA[konfigurasi asterisk]]></category>
		<category><![CDATA[server voip sederhana]]></category>
		<category><![CDATA[simple voip]]></category>
		<category><![CDATA[sip dengan asterisk]]></category>
		<category><![CDATA[voip asterisk]]></category>

		<guid isPermaLink="false">http://www.saidfauzul.web.id/?p=391</guid>
		<description><![CDATA[Asterisk adalah aplikasi open source PBX (Private Branch Exchange) yang dikembangkan diatas lisensi GPL, yang membuat siapapun yang tertarik untuk mencoba atau mempelajari hal-hal yang berbau Voip Gateway bisa dengan mudah dan murah untuk merealisasikannya, tidak hanya sekedar bisa mempelajari, bahkan implementasinya pun bisa dijual.. hehe.. Meskipun demikian, asterisk juga sudah dilengkapi banyak fitur baik [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.asterisk.org">Asterisk</a> adalah aplikasi open source PBX (Private Branch Exchange) yang dikembangkan diatas lisensi GPL, yang membuat siapapun yang tertarik untuk mencoba atau mempelajari hal-hal yang berbau Voip Gateway bisa dengan mudah dan murah untuk merealisasikannya, tidak hanya sekedar bisa mempelajari, bahkan implementasinya pun bisa dijual.. hehe.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Meskipun demikian, asterisk juga sudah dilengkapi banyak fitur baik standard telephony maupun advance, diantaranya:</p>
<ul>
<li>Caller ID</li>
<li>Call Waiting</li>
<li>3-Way Calling</li>
<li>Dinamic Call Forwarding</li>
<li>Follow Me</li>
<li>Voice Mail</li>
<li>Conference</li>
<li>Interactive Voice Response (IVR)</li>
<li>Automatic Call Distribution (ACD)</li>
<li>Dan masih banyak lagi fitur lainnya..</li>
</ul>
<p>Satu lagi kelebihan asterisk, adalah dia dapat berjalan pada multiplatform sistem operasi termasuk Linux, Mac, BSD dan Sun Solaris. Untuk practice kali ini digunakan PC Desktop biasa dengan Ubuntu 10.10 sebagai sistem operasinya. Untuk instalasi tentunya hanya cukup dengan :</p>
<p><strong># apt-get install asterisk</strong></p>
<p>Setelah instalasi selesai, pastikan 3 paket berikut sudah terinstall dengan baik:</p>
<ol>
<li>asterisk</li>
<li>asterisk-config</li>
<li>asterisk-sounds-main</li>
</ol>
<p>Selanjutnya adalah langkah yang paling menarik, konfigurasi. Namun sebelum memulai konfigurasi, alangkah baiknya untuk mengenali dulu teknologi atau protocol-protocol telephony yang ada seperti <a href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol">SIP</a>, <a href="http://en.wikipedia.org/wiki/H323">H323</a>, <a href="http://en.wikipedia.org/wiki/Iax">IAX</a>, <a href="http://en.wikipedia.org/wiki/MGCP">MGCP</a>, juga termasuk didalamnya layanan PSTN, dll. Pada practice kali ini kita akan menggunakan SIP karna konfigurasinya yang relatif mudah dengan implementasi yang mudah juga. Selain teknologi dan protocol satu hal lagi yang perlu diketahui adalah komponen-komponen dasar dari PBX atau lebih tepatnya IP PBX adalah:<span id="more-391"></span></p>
<p><strong>Data Account</strong></p>
<p>Adalah identitas yang digunakan sebagai extension dalam IP PBX, extension disini bisa berupa nama atau nomer yang merepresentasikan user dari IP PBX. Data Account biasanya dibagi dalam 2 gologngan:</p>
<ol>
<li>Account Extension, adalah data account yang digunakan sebagai extension dalam IP PBX</li>
<li>Account Trunk, adalah data account yang digunakan oleh IP PBX untuk menghubungi IP PBX atau server yang lain</li>
</ol>
<p><strong>Dial Plan</strong></p>
<p>Merupakan aturan dial yang digunakan oleh user untuk menghubungi user lain dalam satu IP-PBX (account extension) atau menghubungi trunk untuk melakukan panggilan ke luar, dan atau sebaliknya.</p>
<p>Kembali kepada konfigurasi, dengan bermodalkan sedikit pemahaman mengenai protocol dan komponen IP PBX yaitu Data Account dan Dial Plan, kita dapat membuat konfigurasi account, dimana file-file konfigurasi tersebut terletak di:</p>
<p><strong># cd /etc/asterisk/</strong></p>
<p>Untuk pembuatan data account dengan menggunakan SIP, file konfigurasinya adalah <strong>sip.conf</strong>, edit file tersebut dengan text editor kemudian tambahkan account dengan menambahkan baris berikut pada bagian bawah file:</p>
<blockquote>
<div id="_mcePaste">[101]</div>
<div id="_mcePaste">type=friend</div>
<div id="_mcePaste">context=voiptest</div>
<div id="_mcePaste">host=dynamic</div>
<div id="_mcePaste">username=user1</div>
<div id="_mcePaste">password=password</div>
</blockquote>
<div>dimana:</div>
<div id="_mcePaste">[101] : adalah context yang menjadi nomer extension untuk melakukan panggilan dan dipanggil</div>
<div id="_mcePaste">type=friend : adalah tipe standar (bisa melakukan panggilan dan dipanggil)</div>
<div id="_mcePaste">context=voiptest : adalah nama context yang akan dikenali pada dial plan</div>
<div id="_mcePaste">host=dynamic : adalah host yang digunakan oleh user, dynamic berarti account dapat digunakan dari host mana saja</div>
<div id="_mcePaste">username=said : adalah username dari user</div>
<div id="_mcePaste">password=password : adalah password yang digunakan oleh user said untuk login</div>
<div>Untuk menambahkan user lain, dapat dengan meng-copy-paste baris diatas kemudian isikan context dan user yg berbeda untuk masing-masing user. Selanjutnya adalah setting dial plain, konfigurasinya terdapat pada file <strong>extensions.conf</strong>, edit dengan text editor dan tambahkan baris berikut di bagian bawah file:</div>
<div>
<blockquote>
<div>[voiptest]</div>
<div>exten =&gt; 101,1,Dial(SIP/101,20)</div>
<div>exten =&gt; 101,2,Hangup</div>
</blockquote>
<div>dimana:</div>
<div>[voiptest] : adalah context yang mengatur semua user yang menggunakan context voiptest pada data account</div>
<div>
<div>exten : adalah aturan di asterisk untuk menunjukkan nomor extension</div>
<div>101 : adalah nomor extension yang bisa dihubungi</div>
<div>1-2 : adalah prioritas action</div>
<div>Dial : adalah aplikasi untuk men-dial</div>
<div>Hangup : adalah aplikasi untuk mengakhiri koneksi</div>
<div>SIP : adalah nama protokol yang digunakan dan untuk mengidentifikasi bahwa user berada di file sip.conf</div>
<div>101 setelah SIP : adalah nama context di sip.conf</div>
<div>20 : adalah lamanya berdering saat terjadi pemanggilan oleh user yang lain</div>
</div>
<div>Dengan kata lain user yang menggunakan extension 101 hanya memiliki dua buah aturan panggilan, yaitu melakukan panggilan dan mengakhiri panggilan. Dengan membuat dua buah data account dan dial plan seperti diatas, misalnya extension 101 dan 102, kemudian restart asterisk:</div>
<div><strong># /etc/init.d/asterisk restart</strong></div>
<div>Maka kedua user tersebut sudah dapat saling melakukan panggilan dengan menggunakan aplikasi softphone yang banyak tersedia di internet secara gratis, seperti:</div>
<div>
<ul>
<li><a href="http://www.qutecom.org/">Qutecom</a></li>
<li><a href="http://www.sjlabs.com/sjp.html">SJPhone</a></li>
<li><a href="http://www.counterpath.com/x-lite.html">X-Lite</a></li>
<li>dll</li>
</ul>
</div>
<p>Sebagai BONUS <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Berikut ini adalah dial plan echo yang dapat digunakan untuk keperluan testing:</p>
<blockquote><p>[voipecho]<br />
exten =&gt; 1000,1,Playback(demo-echotest)<br />
exten =&gt; 1000,2,Echo<br />
exten =&gt; 1000,3,Playback(demo-echodone)</p></blockquote>
<p>Bonus berikutnya adalah dial plan dan konfigurasi yang digunakan untuk conference dengan menggunakan fitur meet me yg bisa dikonfigurasi pada file <strong>meetme.conf</strong></p>
<p><strong># vi extensions.conf</strong></p>
<blockquote><p>[conferencetest]</p>
<p>exten =&gt; 1,1,Meetme(1)</p></blockquote>
<p><strong># vi meetme.conf</strong></p>
<blockquote><p>conf =&gt; 1,123456</p></blockquote>
<p>dimana:</p>
<div>[conferencetest] : adalah nama context</div>
<div>
<div>exten : adalah aturan di asterisk untuk menunjukkan nomor extension</div>
<div>1 : adalah nomor extension yang bisa dihubungi</div>
<div>1 setelah nomor extension : adalah prioritas action</div>
<div>Meetme(1) : adalah configuration number pada file meetme.conf</div>
<div>1 pada meetme.conf : adalah configuration number</div>
<div>123456 pada meetme.conf : adalah pasword untuk masuk ke room conference</div>
</div>
<p>Demikian posting kali ini, semoga lain waktu dapat dilanjutkan dengan konfigurasi Voicemail, Hunting dan NSP atau Nada Sambung Pribadi.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/11/simple-sipvoip-server-asterisk-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTTP Client Side Encryption</title>
		<link>http://www.saidfauzul.web.id/2010/09/http-client-side-encryption/</link>
		<comments>http://www.saidfauzul.web.id/2010/09/http-client-side-encryption/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 13:05:55 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[client side encryption]]></category>
		<category><![CDATA[javascript encryption]]></category>
		<category><![CDATA[key pair generator java]]></category>
		<category><![CDATA[pengamanan form login]]></category>
		<category><![CDATA[rsa in java]]></category>
		<category><![CDATA[rsa in javascript]]></category>
		<category><![CDATA[rsa key pair generator]]></category>
		<category><![CDATA[rsa sederhana]]></category>

		<guid isPermaLink="false">http://www.saidfauzul.web.id/?p=353</guid>
		<description><![CDATA[Begitu banyak website yang pada hakikatnya melayani data-data penting pengguna, namun masih belum terlindungi dengan HTTPS, sebutlah User ID dan Password, se-tidak penting-nya pun User ID dan Password tersebut, namun tidak sedikit orang yang menggunakan User ID bahkan Password yang sama untuk accountnya di website yang lain. Jika demikian kenyataannya, tentulah para eavesdroppers bisa dengan mudah mencoba-coba [...]]]></description>
			<content:encoded><![CDATA[<p>Begitu banyak website yang pada hakikatnya melayani data-data penting pengguna, namun masih belum terlindungi dengan <a href="http://id.wikipedia.org/wiki/Https">HTTPS</a>, sebutlah User ID dan Password, se-tidak penting-nya pun User ID dan Password tersebut, namun tidak sedikit orang yang menggunakan User ID bahkan Password yang sama untuk accountnya di website yang lain. Jika demikian kenyataannya, tentulah para <a href="http://en.wikipedia.org/wiki/Eavesdropping">eavesdroppers</a> bisa dengan mudah mencoba-coba memasuki account-account yang dimiliki orang tersebut di dunia maya.</p>
<p>Post kali ini saya mencoba meng&#8217;akal&#8217;i hal tersebut dengan penggunaan metode enkripsi disisi klien dengan <a href="http://id.wikipedia.org/wiki/RSA">RSA</a> yang menggunakan <a href="http://id.wikipedia.org/wiki/JavaScript">javascript</a>, teori mengenai RSA bisa dibaca di <a href="http://id.wikipedia.org/wiki/RSA">http://id.wikipedia.org/wiki/RSA</a>. Dengan pemrograman Java, RSA sederhana dapat kita buat dengan menggunakan fungsi modpow(BigInteger exponent, BigInteger modulus) yang ada di class <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html">java.math.BigInteger</a> seperti ini:</p>
<pre>
<pre class="brush: java">
public byte[] encrypt(BigInteger m, BigInteger e, byte[] message){
   BigInteger cipher=new BigInteger(message);
   BigInteger result=cipher.modPow(e,m);
   return result.toByteArray();
}

public  byte[] decrypt(BigInteger m, BigInteger d, byte[] message){
   BigInteger plain=new BigInteger(message);
   BigInteger result=plain.modPow(d,m);
   return result.toByteArray();
}
</pre>
</pre>
<p>dimana m, d dan e bisa kita bangkitkan dengan menggunakan <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/security/SecureRandom.html">java.security.SecureRandom</a> dengan bantuan key pair generator seperti ini :</p>
<div><span id="more-353"></span></div>
<div>
<pre>
<pre class="brush: java">
public static final BigInteger E17=BigInteger.valueOf(17);   // common value
private static final int SIZE=1024;   // key size
private static final int CERTAINTY=80;   //probabilitas BigInteger baru = 1 – 1/2certainty
private static final int HALF=512;   // Half the key size

public RSAKeyPair(SecureRandom sr){
   Thread t=Thread.currentThread();
   boolean doneD=false;
   while(!doneD){
      P=new BigInteger(HALF,CERTAINTY,sr);
      if(t.isInterrupted())
      return;
      Q=new BigInteger(HALF,CERTAINTY,sr);
      if(t.isInterrupted())
      return;
      M=P.multiply(Q);
      while (M.bitLength()!=SIZE){
         if(t.isInterrupted())
            return;
         if(P.compareTo(Q)==-1)
         P=Q;
         Q=new BigInteger(HALF,CERTAINTY,sr);
         M=P.multiply(Q);
      }

      BigInteger p_1=P.subtract(BigInteger.ONE);
      BigInteger q_1=Q.subtract(BigInteger.ONE);
      BigInteger p_1q_1=p_1.multiply(q_1);
      try{
         D=E17.modInverse(p_1q_1);
         doneD=true;
         DP = D.remainder(p_1);
         DQ= D.remainder(q_1);
         QInvP=Q.modInverse(P);
      } catch (ArithmeticException ae){
         doneD=false;
      }
   }
}
</pre>
</pre>
<pre><span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;">Sebelum terlalu jauh dengan RSA menggunakan Java, kembali kepada judul post, key generator diatas dapat dimanfaatkan untuk penggunaan RSA di sisi client, dengan javascript tentunya, tak perlu susah membuat programnya, karena dengan google, kita bisa menemukan beberapa program RSA untuk javascript yang sudah dioptimasi oleh para pakarnya, contoh disini digunakan program buatan <a href="mailto:dave@ohdave.com">Dave Shapiro</a> dari <a href="http://www.ohdave.com/rsa/">http://www.ohdave.com/rsa/</a> yang sudah diedit sedikit dan bisa di-<a href="http://www.saidfauzul.web.id/wp-content/uploads/2010/11/RSA-In-JavaScript.tar.gz">download disini</a>. Pada file index.html, di bagian :</span></pre>
</div>
<div>
<div>
<pre>
<pre class="brush: java">
function createKey() {
   setMaxDigits(130);
   key = new RSAKeyPair(
      &quot;10001&quot;,
      &quot;8e9912….91464fba23d0d965086277a161&quot;,
      &quot;a52619….074eafd036a5eb83359d2a698d3&quot;
   );
}
</pre>
</pre>
</div>
</div>
<div>adalah function yang digunakan untuk membuat RSAKeyPair dimana parameter yang dibutuhkan adalah e, d dan m, yang tentunya bisa kita buat terlebih dahulu di sisi server seperti contoh diatas (untuk server yang menggunakan java) kemudian ditulis ke element html yang dapat dibaca oleh javascript.</div>
<div>Nb:</div>
<div>Variabel d tidak perlu ditulis ke elemen html jika RSA javascript hanya digunakan untuk keperluan enkripsi, karna ini justru jadi menggagalkan tujuan dari enkripsi. Format e, d dan m dalam bentuk hex atau dari class <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html">java.math.BigInteger</a> bisa langsung ditulis dengan E.toString(16), dimana 16 adalah radix yang digunakan untuk bilangan hexadecimal.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/09/http-client-side-encryption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Dial Up Connection Sharing</title>
		<link>http://www.saidfauzul.web.id/2010/06/internet-dial-up-connection-sharing/</link>
		<comments>http://www.saidfauzul.web.id/2010/06/internet-dial-up-connection-sharing/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 09:21:07 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[internet sharing]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[routing ip]]></category>
		<category><![CDATA[sharing dial up connection]]></category>

		<guid isPermaLink="false">http://saidfauzul.wordpress.com/?p=288</guid>
		<description><![CDATA[Ini command dikit tapi suka lupa, jarang kepake kali.. Ditempat yang membuat kita harus menggunakan dial up connection, terkadang kita membutuhkan komputer sekitar kita juga terhubung ke internet. Untuk itu NAT adalah solusi yang mudah untuk digunakan, tentunya dengan menjadikan komputer yang terhubung ke internet sebagai gateway-nya: # iptables -t nat -A POSTROUTING -s [IP [...]]]></description>
			<content:encoded><![CDATA[<p>Ini command dikit tapi suka lupa, jarang kepake kali.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Ditempat yang membuat kita harus menggunakan dial up connection, terkadang kita membutuhkan komputer sekitar kita juga terhubung ke internet. Untuk itu <a href="http://id.wikipedia.org/wiki/Network_address_translation">NAT</a> adalah solusi yang mudah untuk digunakan, tentunya dengan menjadikan komputer yang terhubung ke internet sebagai gateway-nya:</p>
<p><strong># iptables -t nat -A POSTROUTING -s [IP local]/[netmask] -o eth0 -j SNAT &#8211;to [IP internet]</strong></p>
<p>atau bisa dengan begini:<br />
<strong># iptables -t nat -A POSTROUTING -s [IP local]/[netmask] -j MASQUERADE</strong></p>
<p>dan jangan lupa, di-enable dulu forwarding IP-nya:<br />
<strong># echo 1 &gt; /proc/sys/net/ipv4/ip_forward</strong></p>
<p>it&#8217;s so simple.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/06/internet-dial-up-connection-sharing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Read Client Certificate on Java Mutual HTTPS</title>
		<link>http://www.saidfauzul.web.id/2010/06/certificate-client-on-https-mutual/</link>
		<comments>http://www.saidfauzul.web.id/2010/06/certificate-client-on-https-mutual/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:07:59 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[get certificate mutual authentication]]></category>
		<category><![CDATA[get client certificate on mutual auth connection]]></category>
		<category><![CDATA[get x509 certificate from HttpServletRequest]]></category>
		<category><![CDATA[https mutual authentication]]></category>
		<category><![CDATA[mutual authentication certificate]]></category>
		<category><![CDATA[mutual authentication server]]></category>
		<category><![CDATA[read certificate client]]></category>
		<category><![CDATA[securing web communication]]></category>

		<guid isPermaLink="false">http://saidfauzul.wordpress.com/?p=274</guid>
		<description><![CDATA[Seperti yang sudah pernah diungkit sekilas pada posting sebelumnya, server yang menggunakan HTTPS dengan Mutual Authentication seharusnya bisa memanfaatkan data-data yang terdapat pada sertifikat client untuk digunakan oleh server dalam berbagai keperluan, sebut saja pemberian hak akses terhadap client misalnya. Dengan demikian tentunya Application Server harus bisa membaca sertifikat client yang sedang bertransaksi dengannya. Pada [...]]]></description>
			<content:encoded><![CDATA[<p>Seperti yang sudah pernah diungkit sekilas pada posting sebelumnya, server yang menggunakan HTTPS dengan <a href="http://en.wikipedia.org/wiki/Mutual_authentication">Mutual Authentication</a> seharusnya bisa memanfaatkan data-data yang terdapat pada sertifikat client untuk digunakan oleh server dalam berbagai keperluan, sebut saja pemberian hak akses terhadap client misalnya. Dengan demikian tentunya <a href="http://en.wikipedia.org/wiki/Application_server">Application Server</a> harus bisa membaca sertifikat client yang sedang bertransaksi dengannya. Pada bahasan mengenai HTTPS Mutual Authentication baik dengan menggunakan <a href="http://saidfauzul.wordpress.com/2010/03/16/mutual-authentication-server-apache2/">apache</a> maupun <a href="http://saidfauzul.wordpress.com/2010/03/20/mutual-authentication-server-tomcat-6/">tomcat</a> di posting sebelumnya, pembahasan hanya sebatas konfigurasi pada <a href="http://en.wikipedia.org/wiki/Web_server">Web Server</a>, namun belum sampai kepada bagaimana Application Server dapat &#8220;mengenali&#8221; sertifikat client. Kali ini akan dibahas bagaimana cara Application Server yang menggunakan java membaca sertifikat client yang berkomunikasi dengannya melalui HTTPS Mutual Authentication.</p>
<p>Pertama yang harus dipastikan adalah konfigurasi web server yang mewajibkan agar komunikasi antar client-server harus dengan menggunakan sertifikat:</p>
<blockquote><p>port=”8443″ enableLookups=”true”<br />
acceptCount=”100″ connectionTimeout=”20000″<br />
useURIValidationHack=”false” disableUploadTimeout=”true”<br />
scheme=”https” secure=”true” SSLEnabled=”true”<br />
keystoreFile=”[path]/server.jks” keystorePass=”keystore pass”<br />
truststoreFile=”[path]/truststore.jks” truststorePass=”truststore pass”<br />
<strong>clientAuth=”true”</strong> sslProtocol=”TLS”/&gt;</p></blockquote>
<p>Selanjutnya adalah capture sertifikat dengan mengambil atribut yang ada pada <strong>HttpServletRequest</strong><span id="more-274"></span> dengan cara berikut:</p>
<pre>
<pre class="brush: java">
String cipherSuite = (String) req.getAttribute(“javax.servlet.request.cipher_suite”);
if (cipherSuite != null) {
   X509Certificate certChain[] = (X509Certificate[]) req.getAttribute(“javax.servlet.request.X509Certificate”);
   if (certChain != null) {
      for (int i = 0; i &lt; certChain.length; i++)
         System.out.println (&quot;Client Certificate [&quot; + i + &quot;] = &quot; + certChain[i].toString());
   }
}
</pre>
</pre>
<p>Pada baris pertama <code>req.getAttribute("javax.servlet.request.cipher_suite")</code> digunakan untuk melakukan pengecekan <a href="http://en.wikipedia.org/wiki/Cipher_suite">Cipher Suite</a> yang digunakan, kode ini akan menghasilkan nilai <a href="http://en.wikipedia.org/wiki/Null">null</a> bila koneksi yang dilakukan tidak dengan menggunakan HTTPS Mutual Authentication, namun ketika kode ini memberikan keluaran bukan berupa null, maka langkah selanjutnya dapat dilakukan dengan perintah <code>req.getAttribute("javax.servlet.request.X509Certificate")</code> yang akan memberikan keluaran berupa array of <strong>X509Certificate</strong>, that&#8217;s all <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Dengan demikian selain digunakan untuk otentikasi, server bisa saja memanfaatkan data-data yang ada pada sertifikat tersebut untuk digunakan pada keperluan-keperluan lain yang dibutuhkan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/06/certificate-client-on-https-mutual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation Practice EJBCA-3.9.2</title>
		<link>http://www.saidfauzul.web.id/2010/06/installation-practice-ejbca-3-9-2/</link>
		<comments>http://www.saidfauzul.web.id/2010/06/installation-practice-ejbca-3-9-2/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 04:05:20 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[Build EJBCA with JBOSS]]></category>
		<category><![CDATA[EJBCA Installation]]></category>
		<category><![CDATA[EJBCA JBOSS]]></category>
		<category><![CDATA[Running JBOSS Ubuntu]]></category>
		<category><![CDATA[Simple CA]]></category>

		<guid isPermaLink="false">http://saidfauzul.wordpress.com/?p=255</guid>
		<description><![CDATA[Sebenernya EJBCA sudah menyediakan dokumentasi dan manual lengkap mulai dari instalasi, penggunaan, contoh-contoh dll disini, kompleks memang, karna fitur yang ditawarkannya memang begitu banyak. Berikut ini adalah langkah-langkah instalasi EJBCA versi 3.9.2 dengan menggunakan tools ANT versi 1.8 dan JBOSS versi 5.1.0, memang bukan versi yang terbaru untuk saat ini, namun hanya sekedar untuk coba-coba [...]]]></description>
			<content:encoded><![CDATA[<p>Sebenernya EJBCA sudah menyediakan dokumentasi dan manual lengkap mulai dari instalasi, penggunaan, contoh-contoh dll <a href="http://ejbca.sourceforge.net">disini</a>, kompleks memang, karna fitur yang ditawarkannya memang begitu banyak. Berikut ini adalah langkah-langkah instalasi EJBCA versi 3.9.2 dengan menggunakan tools ANT versi 1.8 dan JBOSS versi 5.1.0, memang bukan versi yang terbaru untuk saat ini, namun hanya sekedar untuk coba-coba install, running dan mengetahui apa dan bagaimana <a href="http://id.wikipedia.org/wiki/Certificate_authority">Certification Authority (CA)</a> bekerja, insyaallah cukuplaah.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Yang pertama wajib harus ada pada sistem operasi yang akan digunakan adalah JDK, jelas saja karna EJBCA memang dikembangkan dengan menggunakan java, selain itu harus di set juga security provider untuk <a href="http://www.bouncycastle.org">Bouncycastle</a> sebagaimana yang digunakan oleh EJBCA dan pastikan <a href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/JCERefGuide.html">Java Cryptography Extension (JCE)</a> sudah terinstall pada JRE yang digunakan.</p>
<p>Bouncycastle provider:<br />
Copy-kan library bouncycastle pada direktory extensible library pada JRE, untuk Ubuntu ada di direktori <strong>/usr/lib/jvm/java-6-sun/jre/lib/ext/</strong>, setelah itu edit file <strong>java.security</strong></p>
<p><strong>$ sudo vi /usr/lib/jvm/java-6-sun/jre/lib/security/java.security</strong></p>
<p>dan tambahkan baris ini:</p>
<blockquote><p>security.provider.9=bouncycastle.jce.provider.BouncyCastleProvider</p></blockquote>
<p>Java Cryptography Extention (JCE):<br />
Download jce, dan copy n replace file <strong>local_policy.jar</strong> dan <strong>US_export_policy.jar</strong> ke direktory <strong>/usr/lib/jvm/java-6-sun/jre/lib/security</strong></p>
<p>Selanjutnya adalah setting beberapa path yang dibutuhkan pada saat build dan deploy EJBCA<span id="more-255"></span>, untuk memudahkan setting path dapat dengan menambahkannya pada file <strong>/etc/profile</strong></p>
<p><strong>$ sudo vi /etc/profile</strong></p>
<p>tambahkan baris ini dibagian bawah file:</p>
<blockquote><p>JAVA_HOME=/usr/lib/jvm/java-6-sun<br />
export JAVA_HOME<br />
APPSRV_HOME=/[some path]/jboss-5.1.0.GA<br />
export APPSRV_HOME<br />
JBOSS_HOME=/[some path]/jboss-5.1.0.GA<br />
export JBOSS_HOME<br />
ANT_OPTS=-Xmx256m<br />
export ANT_OPTS</p></blockquote>
<p>Untuk penggunaan JBOSS-5.1 seperti yang digunakan pada contoh ini, diperlukan tambahan library bouncycastle (bcmail-jdk15.jar, bcprov-jdk15.jar, bctsp-jdk15.jar) dan commons-httpclient.jar, yang dapat langsung saja dicopy-kan ke direktori <strong>$JBOSS_HOME/server/default/lib</strong>.</p>
<p>Setelah semuanya siap, lakukan konfigurasi dengan mengedit file *.properties yang dapat dicopy dari *.properties.sample yang sudah disediakan di direktori <strong>EJBCA_HOME/conf</strong>, pada konfigurasi default EJBCA pun sudah dapat langsung dijalankan dengan melakukan kompilasi dari direktori EJBCA_HOME, beberapa properties seperti yang disebutkan diatas dapat kita manfaaatkan untuk melakukan kustomisasi dari fitur-fitur yang sudah disediakan (moga lain waktu ada kesempatan untuk memberikan contoh kustomisasinya.. <img src='http://www.saidfauzul.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), berikut adalah langkah-langkah untuk build dan running EJBCA:</p>
<p><strong>$ cd EJBCA_HOME</strong></p>
<p>Jalankan perintah ant bootstrap untuk build .jar, .war, .ear dll, yang secara otomatis akan langsung mendeploy ke $JBOSS_HOME.</p>
<p><strong>$ ant bootstrap</strong></p>
<p>Setelah bootstrap selesai, coba jalankan EJBCA hasil build tadi, bisa dengan perintah <strong>j2ee:run</strong> dari direktori EJBCA_HOME atau:</p>
<p><strong>$APPSRV_HOME/bin/run.sh</strong></p>
<p>Dengan konfigurasi default, &#8220;seharusnya&#8221; tidak ditemukan error pada EJBCA hingga langkah ini, sehingga dalam kondisi EJBCA sedang running, jalankan perintah ant install untuk menginisiasi CA yang pertama, membuat sertifikat untuk server EJBCA itu sendiri, membuat sertifikat untuk super admin, dll. Perintah ant install ini hanya dapat dilakukan sekali, karna bersifat sebagai inisiator diawal pembentukan CA, ketika CA pertama sudah terbentuk, maka kegagalan akan terjadi jika perintah tersebut dijalankan lagi.</p>
<p><strong>$ ant install</strong></p>
<p>Setelah perintah ant install dijalankan, temukan direktori p12 didalam EJBCA_HOME, disitu terdapat 3 buah file, masing-masing:</p>
<p><strong>superadmin.p12</strong> : adalah sertifikat superadmin dengan format <a href="http://en.wikipedia.org/wiki/PKCS12">PKCS12</a>, import sertifikat ini pada browser untuk mengakses EJBCA Administration yang menggunakan <em>HTTPS Mutual Authentication</em>.<br />
<strong>tomcat.jks</strong> : adalah sertifikat server EJBCA dengan format <a href="http://en.wikipedia.org/wiki/Jks">JKS</a>.<br />
<strong>truststore.jks</strong> : adalah kumpulan dari keystore yang dipercaya, dalam hal ini berisikan sertifikat dari CA (tanpa private key)</p>
<p>Langkah selanjutnya, jalankan perintah ant deploy untuk mendeploy sertifikat-sertifikat dan beberapa konfigurasi yang tadi di-generate saat menjalankan perintah ant install, namun sebelum menjalankan perintah ini, pastikan JBOSS dalam keadaan stop, untuk stop dapat dengan menggunakan <strong>Ctrl+C</strong>.</p>
<p><strong>$ ant deploy</strong></p>
<p>Setelah deploying selesai, jalankan kembali JBOSS dan kita sudah memiliki sistem CA yang running sekarang.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/06/installation-practice-ejbca-3-9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Https Mutual Authentication from Java Client</title>
		<link>http://www.saidfauzul.web.id/2010/04/java-https-mutual-authentication-client/</link>
		<comments>http://www.saidfauzul.web.id/2010/04/java-https-mutual-authentication-client/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 10:58:58 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[https client]]></category>
		<category><![CDATA[https handshake mutual]]></category>
		<category><![CDATA[https mutual atuhentication client]]></category>
		<category><![CDATA[java mutual authentication client]]></category>
		<category><![CDATA[mutual authentication tomcat]]></category>
		<category><![CDATA[securing web communication]]></category>

		<guid isPermaLink="false">http://saidfauzul.wordpress.com/?p=230</guid>
		<description><![CDATA[Masih kelanjutan dari posting-posting sebelumnya, yaitu mengenai https mutual authentication, namun kali ini dari sisi clientnya dengan menggunakan java : public static void httpsOpenConnection () { try { String[][] props = {{&#34;javax.net.ssl.keyStore&#34;, KEYSTORE}, {&#34;javax.net.ssl.keyStorePassword&#34;, KEYSTORE_PASS}, {&#34;javax.net.ssl.trustStore&#34;, TRUSTORE}, {&#34;javax.net.ssl.trustStorePassword&#34;, TRUSTORE_PASS}}; for (int i = 0; i&#60;props.length; i++) System.getProperties().setProperty(props[i][0], props[i][1]); KeyStore ks = KeyStore.getInstance(&#34;PKCS12&#34;); ks.load(new FileInputStream(KEYSTORE), KEYSTORE_PASS.toCharArray()); [...]]]></description>
			<content:encoded><![CDATA[<p>Masih kelanjutan dari <a href="http://saidfauzul.wordpress.com/2010/03/20/mutual-authentication-server-tomcat-6/">posting</a>-<a href="http://saidfauzul.wordpress.com/2010/03/16/mutual-authentication-server-apache2/">posting</a> sebelumnya, yaitu mengenai https mutual authentication, namun kali ini dari sisi clientnya dengan menggunakan java :</p>
<pre>
<pre class="brush: java">
public static void httpsOpenConnection () {
   try {
      String[][] props = {{&quot;javax.net.ssl.keyStore&quot;, KEYSTORE},
               {&quot;javax.net.ssl.keyStorePassword&quot;, KEYSTORE_PASS},
               {&quot;javax.net.ssl.trustStore&quot;, TRUSTORE},
               {&quot;javax.net.ssl.trustStorePassword&quot;, TRUSTORE_PASS}};
      for (int i = 0; i&lt;props.length; i++)
         System.getProperties().setProperty(props[i][0], props[i][1]);
      KeyStore ks = KeyStore.getInstance(&quot;PKCS12&quot;);
      ks.load(new FileInputStream(KEYSTORE), KEYSTORE_PASS.toCharArray());
      KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
      kmf.init(ks, KEYSTORE_PASS.toCharArray());
      KeyStore ksT = KeyStore.getInstance(&quot;JKS&quot;);
      ksT.load(new FileInputStream(TRUSTORE), TRUSTORE_PASS.toCharArray());
      TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
      tmf.init(ksT);
      SSLContext sslContext = SSLContext.getInstance(&quot;TLSv1&quot;);
      sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new java.security.SecureRandom());
      SSLSocketFactory sslsf = sslContext.getSocketFactory();
      SSLSocket sslSocket = (SSLSocket) sslsf.createSocket(HOST, PORT);
      sslSocket.startHandshake();
// String [] arr = sslSocket.getEnabledProtocols();
// for(int i=0;i&lt;arr.length;i++)
// System.out.println(arr[i]);
      URL url = new URL(ENDPOINT);
      HttpsURLConnection.setDefaultSSLSocketFactory(sslsf);
      HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
   } catch (KeyManagementException ex) {
      System.err.println(ex);
   } catch (UnrecoverableKeyException ex) {
      System.err.println(ex);
   } catch (IOException ex) {
      System.err.println(ex);
   } catch (NoSuchAlgorithmException ex) {
      System.err.println(ex);
   } catch (CertificateException ex) {
      System.err.println(ex);
   } catch (KeyStoreException ex) {
      System.err.println(ex);
   }
}
</pre>
</pre>
<p><span id="more-230"></span>Keterangan :</p>
<p>public static String HOST : host server<br />
public static int PORT : port https<br />
public static String KEYSTORE : path keystore (PKCS12/JKS)<br />
public static String KEYSTORE_PASS : password keystore<br />
public static String TRUSTORE : path truststore (PKCS12/JKS)<br />
public static String TRUSTORE_PASS : truststore<br />
public static String ENDPOINT : url yang akan diakses</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/04/java-https-mutual-authentication-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mutual Authentication Server (Tomcat 6)</title>
		<link>http://www.saidfauzul.web.id/2010/03/mutual-authentication-server-tomcat-6/</link>
		<comments>http://www.saidfauzul.web.id/2010/03/mutual-authentication-server-tomcat-6/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 22:38:47 +0000</pubDate>
		<dc:creator>hudzaifah</dc:creator>
				<category><![CDATA[everything i do]]></category>
		<category><![CDATA[https tomcat]]></category>
		<category><![CDATA[mutual authentication server]]></category>
		<category><![CDATA[mutual authentication tomcat]]></category>
		<category><![CDATA[securing web communication]]></category>

		<guid isPermaLink="false">http://saidfauzul.wordpress.com/?p=219</guid>
		<description><![CDATA[Melanjutkan posting sebelumnya, mengenai konfigurasi https mutual authentication server dengan menggunakan Apache2, kali ini konfigurasi yang sama namun dengan menggunakan Tomcat 6. Pada tomcat, kita dapat menyeting Connector dengan mengedit file konfigurasi server.xml, sesuai dengan koneksi yang akan kita gunakan, misalnya http, AJP13 atau yang lainnya, berikut ini adalah setting connector untuk koneksi https dengan [...]]]></description>
			<content:encoded><![CDATA[<p>Melanjutkan posting <a href="http://saidfauzul.wordpress.com/2010/03/16/mutual-authentication-server-apache2/">sebelumnya</a>, mengenai konfigurasi https mutual authentication server dengan menggunakan Apache2, kali ini konfigurasi yang sama namun dengan menggunakan Tomcat 6.</p>
<p>Pada tomcat, kita dapat menyeting <strong>Connector</strong> dengan mengedit file konfigurasi server.xml, sesuai dengan koneksi yang akan kita gunakan, misalnya http, <a href="http://saidfauzul.wordpress.com/2010/02/17/apache-tomcat-and-mod_jk/">AJP13</a> atau yang lainnya, berikut ini adalah setting connector untuk koneksi https dengan mutual authentication :</p>
<blockquote><p>&lt;Connector className=&#8221;org.apache.coyote.tomcat4.CoyoteConnector&#8221;<br />
port=&#8221;8443&#8243; enableLookups=&#8221;true&#8221;<br />
acceptCount=&#8221;100&#8243; connectionTimeout=&#8221;20000&#8243;<br />
useURIValidationHack=&#8221;false&#8221; disableUploadTimeout=&#8221;true&#8221;<br />
scheme=&#8221;https&#8221; secure=&#8221;true&#8221; SSLEnabled=&#8221;true&#8221;<br />
keystoreFile=&#8221;[path]/server.jks&#8221; keystorePass=&#8221;keystore pass&#8221;<br />
truststoreFile=&#8221;[path]/truststore.jks&#8221; truststorePass=&#8221;truststore pass&#8221;<br />
clientAuth=&#8221;true&#8221; sslProtocol=&#8221;TLS&#8221;/&gt;</p></blockquote>
<p>Untuk setting clientAuth, terdapat tiga opsi yang dapat digunakan :</p>
<p style="padding-left:30px;"><strong>true</strong> : all connections through this connector require client  authentication<br />
<strong>want</strong> : the web app will ask for authentication but not require it<br />
<strong>false</strong> : connections do not require client authentication UNLESS the  web app specifies it is required via a security constraint with  CLIENT-CERT chosen</p>
<p><span id="more-219"></span>Berikut keterangan dari option yang dapat digunakan pada konfigurasi SSL :</p>
<table border="1">
<tr>
<td style="text-align:center;"><strong>Attribute</strong></td>
<td style="text-align:center;"><strong>Description</strong></td>
</tr>
<tr>
<td>clientAuth</td>
<td>Set this value to true if you want Tomcat to require<br />
all SSL clients to present a client Certificate in order to use<br />
this socket.  Set this value to want if you want Tomcat<br />
to request a client Certificate, but not fail if one isn&#8217;t presented.<br />
For using clientAuth on a per-user or per-session basis, check out<br />
the tips in<br />
<a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=34643">Bugzilla 34643</a>.</td>
</tr>
<tr>
<td>keystoreFile</td>
<td>Add this attribute if the keystore file you created is not in<br />
the default place that Tomcat expects (a file named<br />
.keystore in the user home directory under<br />
which Tomcat is running).  You can specify an absolute pathname,<br />
or a relative pathname that is resolved against the<br />
$CATALINA_BASE environment variable.</td>
</tr>
<tr>
<td>keystorePass</td>
<td>Add this element if you used a different keystore (and Certificate)<br />
password than the one Tomcat expects (changeit).</td>
</tr>
<tr>
<td>keystoreType</td>
<td>Add this element if using a keystore type other than<br />
JKS.</td>
</tr>
<tr>
<td>sslProtocol</td>
<td>The encryption/decryption protocol to be used on this socket.<br />
It is not recommended to change this value if you are using Sun&#8217;s<br />
JVM.  It is reported that IBM&#8217;s 1.4.1 implementation<br />
of the TLS protocol is not compatible with some popular browsers.<br />
In this case, use the value SSL.</td>
</tr>
<tr>
<td>ciphers</td>
<td>The comma separated list of encryption ciphers that this socket is<br />
allowed to use. By default, the default ciphers for the JVM will be<br />
used. Note that this usually means that the weak export grade ciphers<br />
will be included in the list of available ciphers. The ciphers are<br />
specified using the JSSE cipher naming convention.</td>
</tr>
<tr>
<td>algorithm</td>
<td>The X509 algorithm to use.  This defaults to the Sun<br />
implementation (SunX509).  For IBM JVMs you should use<br />
the value IbmX509.  For other vendors, consult the JVM<br />
documentation for the correct value.</td>
</tr>
<tr>
<td>truststoreFile</td>
<td>The TrustStore file to use to validate client certificates.</td>
</tr>
<tr>
<td>truststorePass</td>
<td>The password to access the TrustStore.  This defaults to the value<br />
of keystorePass.</td>
</tr>
<tr>
<td>truststoreType</td>
<td>Add this element if your are using a different format for the<br />
TrustStore then you are using for the KeyStore.</td>
</tr>
<tr>
<td>keyAlias</td>
<td>Add this element if your have more than one key in the KeyStore.<br />
If the element is not present the first key read in the KeyStore<br />
will be used.</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.saidfauzul.web.id/2010/03/mutual-authentication-server-tomcat-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

