28 Mayıs 2010 Cuma

Kendime Not: Openfire Ldap Server Singing Problemi

Openfire Server'ini Active Directory Simple LDAP Authentication mekanizması ile problemsiz bir şekilde çalıştıranlar yaptıkları Ldap Server Signing değişikliği ile Spark IM'lerine elvada dediler. Ldap Server Signing özelliğinin zorunlu kıldığı Digest-MD5 authentication mekanizmasını son versiyonunda bile desteklemeyen Jive Software destek forumlarında bu problemle çıkan onlarca soruyuda cevapsız bırakıyor.

Sorunu yine geçmişte uğraştığım Reverse engineering tekniklerine borçlu olarak çözümlemeyi başarabildim ve iğrenç anlatımımla sizlerle paylaşıyorum:

OpenFire ile Windows 2008 Server R2 Ldap Signing Problemi

Problem: Openfire kurulumu LDAP authentication aşamasını geçemiyor, kurulum tamamlanamıyor.

Sebep: Openfire’ın son sürümü dahil (Mayıs 2010 itibari ile 3.6.4) digest-md5 ve auth-int mekanizmalarını desteklenmediğinden Ldap Sign özelliğini kullanan Windows Server ailesi işletim sistemleri ile Ldap authentication başarılı bir şekilde sağlanamıyor.

Çözüm:
1) Openfire’ın kaynak kod dosyaları http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_src_3_6_4.zip adresinden indirelerek uygun bir dizine açılır.

2) Kaynak dosyalarla proje bazlı çalışabilmek ve editing yapabilmek için http://www.eclipse.org/downloads/ adresinden Eclipse IDE’si indirilir

3) src\java\org\jivesoftware\openfire\ldap dizinde yer alan LdapManager.java ve LdapAuthProvider.java Eclipse altında düzenlemek üzere açılır.

4) LdapManager.java dosyası içinde yer alan “env.put(Context.SECURITY_AUTHENTICATION, "simple");” satırları “env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5");” olarak değiştirilir ve hemen alt satırına “env.put("javax.security.sasl.qop", "auth-int")”; eklenir. LdapManager.java altında bu şekilde değiştirilmesi gereken 3 yer vardır.

5) Buraya kadar yapılan aşamalarda Ldap Authentication başarılı bir şekilde sağlanır ancak OpenFire’in kullanıcı denetleme mekanizması halen simple methodu ile distinguished query yaparak çalıştığından bunu iptal etmeliyiz. Bunuda LdapAuthProvider.java dosyasında authenticate() adlı methodun manager.checkAuthentication(string, string) fonksiyonuna geçilen paramtreyi değiştirerek sağlarız.

6) Tüm bu işlemlerden sonra değişiklikleri kaydediyoruz ve derleme adımına geçiyoruz. Derleme yapabilmek için Java Se 1.5 Runtime ve Ant 1.6 veya 1.7 sürümüne ihtiyacımız var.

7) Doğru bir derleme yapabilmek için öncelikle JAVA_HOME ve ANT_HOME değişkenlerini işletim sistemimizin Ortam Değişkenleri (Environment Variables) alanına tanımlamamız lazım.

8) Derleme işlemine başlayabilmek için openfire’ın kaynak kodlarının yer aldığı klasördeki build adlı dizine command prompt penceresi ile geçmemiz gerekiyor:

9) Artık derleme işlemine geçebiliriz. Bunun için build.xml dosyasının bulunduğu dizinde ant komutunu vermemiz yeterlidir. Başarılı bir derleme işleminden sonra almanız gereken sonuç resimdeki gibidir:

10) Derleme işleminden sonra %openfire_src%\work\lib dizini altında oluşan openfire.jar dosyasını authentication sağlayamadığımız orjinal OpenFire kurulum dosyasılarını barındıran dizinedeki openfire.jar ile değiştiriyoruz

Bol dertsiz günler

12 Mayıs 2010 Çarşamba

Bu düzen otururmu?

5 ay'ı aşkın süredir aktif sanal iletişim hayatım sekteye uğramış durumda. En büyük sebebi iş yerimdeki yeni pozisyonum ve getirdiği aşırı iş yükü. Göreve gelmemle birlikte daha ortama alışma ve yapıyı tanıma fırsatım olmadan büyük bir projenin yükü sırtıma bindi. Havacılık sektörü gibi 7/24 hizmet etme mecburiyeti bulunan bir organizasyonun IT yapısını yenilemek ve canlı tutmak gerçekten zor ve yorucu bir iş. Ekip arkadaşlarımla birlikte yeri geldiğinde geceleri yatağımızdan kaldırılarak problem çözmek de artık alışkanlık haline geldi.

Tabi bu kadar iş yükü bir çok yeni ve taze bilgiye de sahip olmama neden oldu. Özellikle en son 7 sene önce kullanıcısı olduğum Linux platformunun şimdilerde Enterprise yönetimi seviyesindeki çözümleri ve problemlerine iyice aşina oldum. Hobi olarak uğraştığım bir çok bilgi koluda (reversing, kernel debugging, code analyzing..) işimin bir parçası ve sorunların çözümlerinde yardımcı araçlar oldu. İnsanın bu kadar bilgiyi boşuna öğrenmemiş olduğu hissi gerçekten hoşuna gidiyor.

Fırsat ve zaman buldukça yaşanan gerçek problemler ve iş geliştirmelerinin süreçleri hakkında canlı senaryolar üzerinden bilgilerimi aktarmaya çalışacağım. Şimdilik sağlıcakla.