Waste Paper

June 10, 2010

Read Client Certificate on Java Mutual HTTPS

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 bahasan mengenai HTTPS Mutual Authentication baik dengan menggunakan apache maupun tomcat di posting sebelumnya, pembahasan hanya sebatas konfigurasi pada Web Server, namun belum sampai kepada bagaimana Application Server dapat “mengenali” sertifikat client. Kali ini akan dibahas bagaimana cara Application Server yang menggunakan java membaca sertifikat client yang berkomunikasi dengannya melalui HTTPS Mutual Authentication.

Pertama yang harus dipastikan adalah konfigurasi web server yang mewajibkan agar komunikasi antar client-server harus dengan menggunakan sertifikat:

port=”8443″ enableLookups=”true”
acceptCount=”100″ connectionTimeout=”20000″
useURIValidationHack=”false” disableUploadTimeout=”true”
scheme=”https” secure=”true” SSLEnabled=”true”
keystoreFile=”[path]/server.jks” keystorePass=”keystore pass”
truststoreFile=”[path]/truststore.jks” truststorePass=”truststore pass”
clientAuth=”true” sslProtocol=”TLS”/>

Selanjutnya adalah capture sertifikat dengan mengambil atribut yang ada pada HttpServletRequest dengan cara berikut:

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 < certChain.length; i++) {
               System.out.println (“Client Certificate [" + i + "] = “ + certChain[i].toString());
          }
     }
}

Pada baris pertama req.getAttribute("javax.servlet.request.cipher_suite") digunakan untuk melakukan pengecekan Cipher Suite yang digunakan, kode ini akan menghasilkan nilai null 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 req.getAttribute("javax.servlet.request.X509Certificate") yang akan memberikan keluaran berupa array of X509Certificate, that’s all :-)

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.

Advertisement

Theme: Shocking Blue Green. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.