OpenLDAP, dizin hizmetleri için yaygın olarak kullanılan açık kaynaklı bir protokoldür. Kullanıcı kimlik doğrulama, adres defterleri ve çeşitli uygulamalar için merkezi bir veri depolama alanı olarak hizmet verir. Ancak, varsayılan olarak OpenLDAP bağlantıları şifrelenmez ve bu da hassas verilerin ağ üzerinde düz metin olarak iletilmesine yol açabilir. Bu durum, kimlik bilgileri, kişisel veriler ve diğer gizli bilgilerin kötü niyetli kişiler tarafından ele geçirilmesi riskini taşır.
Bu rehberde, OpenLDAP bağlantılarını STARTTLS kullanarak nasıl şifreleyeceğinizi adım adım açıklayacağız. STARTTLS, mevcut düz metin bağlantısı üzerinden bir TLS (Transport Layer Security) şifreleme katmanı başlatarak iletişimi güvenli hale getiren bir mekanizmadır. Bu sayede, güvenlikten ödün vermeden OpenLDAP’ın standart bağlantı noktası olan 389’u kullanmaya devam edebilirsiniz.
STARTTLS Nedir ve Neden Kullanılır?
STARTTLS (Start Transport Layer Security), bir iletişim protokolünün başlangıçta şifresiz olarak başlamasına, ancak daha sonra bir komut gönderilerek iletişimi TLS/SSL ile şifrelemesine olanak tanıyan bir protokoldür. LDAP bağlamında, istemci ilk olarak sunucuya standart (şifresiz) bir bağlantı kurar. Ardından, istemci sunucuya bir STARTTLS işlemi başlatmasını söyler. Sunucu bu talebi kabul ettiğinde, iletişim TLS/SSL üzerinden şifrelenir ve tüm veri alışverişi güvenli bir kanal üzerinden yapılır.
STARTTLS kullanmanın başlıca nedenleri şunlardır:
- Veri Gizliliği: Ağ üzerinden iletilen tüm verilerin (kullanıcı adları, parolalar, dizin sorguları vb.) şifrelenmesini sağlar, böylece yetkisiz kişilerin verilere erişmesini engeller.
- Veri Bütünlüğü: İletilen verilerin değiştirilmediğini veya bozulmadığını garanti eder.
- Kimlik Doğrulama: İstemcinin sunucunun veya sunucunun istemcinin kimliğini doğrulamasını sağlar (karşılıklı kimlik doğrulama yapılandırılmışsa), böylece “ortadaki adam” (man-in-the-middle) saldırılarını önler.
- Standart Bağlantı Noktası: LDAP’ın standart 389 portunu kullanmaya devam etmenizi sağlar. Bu, güvenlik duvarı yapılandırmalarını ve ağ mimarisini basitleştirebilir, çünkü LDAPS (LDAP over SSL) için kullanılan 636 portunu açmanıza gerek kalmaz.
TLS/SSL Sertifikalarını Hazırlama
STARTTLS’i etkinleştirmek için bir TLS/SSL sertifikasına ve özel anahtara ihtiyacınız vardır. Bu sertifikalar, sunucunun kimliğini doğrulamak ve şifreli bir kanal oluşturmak için kullanılır. Üretim ortamlarında genellikle bir Sertifika Yetkilisi (CA) tarafından imzalanmış sertifikalar kullanılırken, test veya dahili ortamlar için kendinden imzalı (self-signed) sertifikalar kullanabilirsiniz.
Kendinden İmzalı Sertifika Oluşturma (Örnek)
Bu örnekte, OpenSSL kullanarak kendinden imzalı bir sertifika ve özel anahtar oluşturacağız. Bu adımları OpenLDAP sunucunuzda gerçekleştirmeniz gerekmektedir.
Sertifikalar için bir dizin oluşturun (eğer yoksa)
sudo mkdir -p /etc/ssl/ldap
cd /etc/ssl/ldap
2048-bit özel anahtar oluşturma
sudo openssl genrsa -out ldap_server.key 2048
Özel anahtarın izinlerini kısıtlama (sadece root okuyabilir)
sudo chmod 400 ldap_server.key
Kendinden imzalı sertifika oluşturma (365 gün geçerli)
COMMON NAME (CN) kısmına OpenLDAP sunucunuzun FQDN'ini (örn: ldap.example.com) girin
sudo openssl req -new -x509 -key ldap_server.key -out ldap_server.crt -days 365
Sertifika dosyasının izinlerini ayarlama (root okuyabilir, diğerleri okuyabilir)
sudo chmod 644 ldap_server.crt
Yukarıdaki komutlar sonucunda iki önemli dosyanız olacak:
ldap_server.key: Sunucunuzun özel anahtarı. Bu dosyanın kesinlikle gizli kalması ve yalnızca root tarafından okunabilir olması gerekir.ldap_server.crt: Sunucunuzun genel sertifikası. Bu dosya istemcilere dağıtılacak ve genel olarak okunabilir olmalıdır.
Eğer bir CA tarafından imzalanmış sertifika kullanıyorsanız, CA’nızdan aldığınız sertifika dosyasını (genellikle .crt veya .pem uzantılı) ve özel anahtar dosyasını (genellikle .key uzantılı) kullanacaksınız. Ayrıca, CA sertifikasını (ca.crt) da edinmeniz gerekecektir.
OpenLDAP Sunucusunu STARTTLS İçin Yapılandırma
Modern OpenLDAP kurulumları genellikle cn=config dinamik yapılandırma sistemini kullanır. Bu bölümde, ldif dosyaları kullanarak OpenLDAP sunucusunu STARTTLS için nasıl yapılandıracağımızı göstereceğiz.
cn=config Üzerinden Yapılandırma
Öncelikle, TLS/SSL yapılandırmasını içeren bir ldif dosyası oluşturalım. Bu dosya, sertifika ve anahtar dosyalarımızın yollarını OpenLDAP’a bildirecektir. Sertifika yetkilisi (CA) sertifikanız varsa, olcTLSCACertificateFile parametresini de eklemeniz gerekecektir.
add_tls.ldif adında bir dosya oluşturun:
dn: cn=config
changetype: modify
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/ldap/ldap_server.crt
-
add: olcTLSKeyFile
olcTLSKeyFile: /etc/ssl/ldap/ldap_server.key
Eğer bir CA tarafından imzalanmış sertifika kullanıyorsanız, CA sertifikasının yolunu da ekleyin:
#-
#add: olcTLSCACertificateFile
#olcTLSCACertificateFile: /etc/ssl/ldap/ca.crt
Bu ldif dosyasını OpenLDAP yapılandırmasına uygulamak için aşağıdaki komutu kullanın. Bu komut, sunucunun yerel UNIX soketi üzerinden kimlik doğrulaması yapmasını sağlar (-Y EXTERNAL -H ldapi:///).
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f add_tls.ldif
Komut başarıyla çalışırsa, herhangi bir çıktı vermeyebilir veya “modifying entry “cn=config”” gibi bir mesaj görebilirsiniz. Hata alırsanız, dosya yollarını ve izinleri kontrol edin.
Yapılandırmanın doğru bir şekilde uygulandığını doğrulamak için aşağıdaki komutu kullanabilirsiniz:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" -LLL -Q "(objectClass=olcGlobal)" olcTLSCertificateFile olcTLSKeyFile olcTLSCACertificateFile
Bu komut, cn=config altındaki global yapılandırma nesnesinden TLS ile ilgili parametreleri listelemelidir.
OpenLDAP Servisini Yeniden Başlatma
Yapılandırma değişikliklerinin etkili olması için OpenLDAP servisini yeniden başlatmanız gerekir:
sudo systemctl restart slapd
Veya bazı sistemlerde:
sudo service slapd restart
Servisin durumunu kontrol etmek için:
sudo systemctl status slapd
Herhangi bir hata olup olmadığını görmek için günlükleri (/var/log/syslog, /var/log/auth.log veya journalctl -xe) kontrol edin.
OpenLDAP İstemcilerini STARTTLS Kullanacak Şekilde Yapılandırma
Sunucu tarafı yapılandırması tamamlandıktan sonra, istemcilerin de STARTTLS kullanarak bağlanacak şekilde yapılandırılması gerekir. Bu, genellikle istemci sistemlerdeki /etc/ldap/ldap.conf veya /etc/openldap/ldap.conf dosyasında veya uygulamaların kendi yapılandırma dosyalarında yapılır.
Genel İstemci Yapılandırması (ldap.conf)
/etc/ldap/ldap.conf dosyasına aşağıdaki satırları ekleyin veya güncelleyin:
Sunucu adresini ve portunu belirtin (isteğe bağlı, uygulamaya göre değişir)
URI ldap://ldap.example.com:389
STARTTLS kullanmasını zorla
TLS_STARTTLS yes
Sunucu sertifikasını doğrulamak için CA sertifikasının yolu
Eğer kendinden imzalı sertifika kullanıyorsanız, sunucu sertifikasını CA olarak belirtin
TLS_CACERT /etc/ssl/ldap/ldap_server.crt
Sertifika doğrulama gereksinimleri:
never: Sertifikaları doğrulama (güvenli değil!)
allow: Sertifika doğrulama hatası olsa bile devam et
demand: Sertifika doğrulama zorunlu (önerilen)
TLS_REQCERT demand
Önemli Not: Eğer CA tarafından imzalanmış bir sertifika kullanıyorsanız, TLS_CACERT satırına CA sertifikasının yolunu (örn: /etc/ssl/certs/ca-certificates.crt veya kendi CA’nızın sertifikası) yazmanız gerekir. Kendinden imzalı sertifika kullanıyorsanız, sunucuya ait ldap_server.crt dosyasını CA olarak belirtmek, istemcinin sunucu sertifikasına güvenmesini sağlar.
Bağlantıyı Test Etme
ldapsearch komutunu kullanarak STARTTLS bağlantısını test edebilirsiniz. -Z parametresi STARTTLS’i etkinleştirir, -ZZ ise STARTTLS’i zorunlu kılar ve başarısız olursa bağlantıyı keser.
STARTTLS kullanarak bir arama yapın
ldapsearch -H ldap://ldap.example.com -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com" -Z "(uid=testuser)"
STARTTLS'i zorunlu kılarak bir arama yapın
ldapsearch -H ldap://ldap.example.com -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com" -ZZ "(uid=testuser)"
Eğer bağlantı başarılı olursa, LDAP dizinindeki sonuçları görmelisiniz. Herhangi bir hata alırsanız (örneğin, “ldap_start_tls: Connect error (-11)” veya “TLS: hostname does not match CN in peer certificate”), sunucu sertifikasının Common Name (CN) alanının istemcinin bağlandığı sunucu adıyla eşleştiğinden ve istemci tarafında CA sertifikasının doğru yapılandırıldığından emin olun.
Sorun Giderme ve En İyi Uygulamalar
Yaygın Sorunlar ve Çözümleri
- Sertifika veya Anahtar Dosyası İzinleri: Özel anahtar dosyasının (
.key) yalnızcaroottarafından okunabilir olduğundan (chmod 400) ve sertifika dosyasının (.crt) herkes tarafından okunabilir olduğundan (chmod 644) emin olun. Yanlış izinlerslapd‘nin başlamamasına neden olabilir. - Dosya Yolları:
ldifdosyasındakiolcTLSCertificateFileveolcTLSKeyFileyollarının doğru olduğundan emin olun. - Common Name (CN) Uyuşmazlığı: Sertifikanın Common Name (CN) alanı, istemcinin bağlanmak için kullandığı hostname ile tam olarak eşleşmelidir. Eğer istemci bir IP adresi ile bağlanıyorsa, sertifikada bu IP adresinin bir Subject Alternative Name (SAN) olarak bulunması gerekebilir.
- CA Sertifikası Eksikliği/Yanlışlığı: İstemci tarafında
TLS_CACERTveyaTLS_CACERTDIRdoğru CA sertifikasına işaret etmelidir. Kendinden imzalı sertifikalar için, sunucunun kendi sertifikası CA olarak belirtilmelidir. - Güvenlik Duvarı: OpenLDAP’ın 389 (veya kullandığınız diğer portlar) portunun güvenlik duvarında açık olduğundan emin olun.
- slapd Hata Ayıklama: Sorunları teşhis etmek için
slapd‘yi hata ayıklama modunda çalıştırabilirsiniz:sudo systemctl stop slapd sudo slapd -d -1Bu, detaylı günlük çıktıları sağlayarak sorunun nerede olduğunu anlamanıza yardımcı olacaktır. Çıktıyı inceledikten sonra
Ctrl+Cile durdurupsudo systemctl start slapdile normal servisi başlatmayı unutmayın.
En İyi Uygulamalar
- Üretim Ortamında CA-İmzalı Sertifikalar: Güvenilir bir Sertifika Yetkilisi (Let’s Encrypt, DigiCert vb.) tarafından imzalanmış sertifikaları kullanın. Bu, istemcilerin sunucuya otomatik olarak güvenmesini sağlar ve yönetim yükünü azaltır.
- Sertifika Sürelerini Takip Edin: Sertifikalarınızın son kullanma tarihlerini izleyin ve süresi dolmadan yenileyin. Süresi dolmuş bir sertifika bağlantı hatalarına neden olur.
- Güçlü Şifreleme Algoritmaları: OpenLDAP’ın güçlü TLS şifreleme algoritmalarını kullanacak şekilde yapılandırıldığından emin olun. Bu, genellikle
olcTLSCipherSuitegibi parametrelerle ayarlanır (bu rehberde değinilmemiştir, ancak araştırılmaya değerdir). - TLS_REQCERT demand: İstemci yapılandırmasında
TLS_REQCERT demandkullanın. Bu, istemcinin sunucu sertifikasını mutlaka doğrulamasını gerektirir ve güvenlik zafiyetlerini önler. - Günlükleri İzleyin: OpenLDAP sunucusunun ve sistemin günlüklerini düzenli olarak kontrol edin. TLS bağlantı hataları veya diğer güvenlik uyarıları burada görünecektir.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, OpenLDAP bağlantılarını STARTTLS kullanarak nasıl şifreleyeceğinizi adım adım öğrendiniz. Sertifikaların hazırlanmasından sunucu ve istemci yapılandırmasına kadar tüm süreçleri ele aldık. STARTTLS’i etkinleştirerek, LDAP dizininizdeki hassas verilerin ağ üzerinden güvenli bir şekilde iletilmesini sağlamış olursunuz, bu da genel sistem güvenliğiniz için kritik bir adımdır.
Sıkça Sorulan Sorular (SSS)
S1: Kendinden imzalı sertifikalar üretim ortamı için uygun mu?
C1: Hayır, genellikle uygun değildir. Kendinden imzalı sertifikalar, istemcilerin sunucuya otomatik olarak güvenmesini sağlamaz ve her istemcinin bu sertifikayı manuel olarak güvenilir olarak eklemesini gerektirir. Bu durum, yönetim yükünü artırır ve güvenlik açıklarına yol açabilir. Üretim ortamlarında, güvenilir bir Sertifika Yetkilisi (CA) tarafından imzalanmış sertifikalar kullanılmalıdır.
S2: STARTTLS başarısız olursa ne olur?
C2: Eğer STARTTLS işlemi başarısız olursa (örneğin, sunucu sertifikası doğrulanamazsa veya sunucu STARTTLS’i desteklemiyorsa), bağlantı şifresiz olarak devam edebilir (eğer istemci yapılandırması buna izin veriyorsa) veya tamamen kesilebilir (eğer istemci TLS_REQCERT demand veya -ZZ gibi katı bir yapılandırmaya sahipse). En iyi uygulama, STARTTLS başarısız olduğunda bağlantının kesilmesini sağlamaktır.
S3: ldaps:// ile ldap:// + STARTTLS arasındaki fark nedir?
C3: ldaps:// (LDAP over SSL), bağlantının başlangıcından itibaren TLS/SSL üzerinden şifrelendiği özel bir LDAP bağlantı biçimidir ve genellikle 636 numaralı portu kullanır. ldap:// + STARTTLS ise, bağlantının standart 389 portundan düz metin olarak başlamasına, ancak daha sonra bir komutla TLS/SSL’ye yükseltilmesine olanak tanır. Her ikisi de aynı seviyede güvenlik sağlar, ancak farklı başlangıç mekanizmalarına sahiptir. STARTTLS, mevcut altyapıyı değiştirmeden şifreleme eklemek için daha esnek bir yol sunar.
S4: STARTTLS’in performansa etkisi var mıdır?
C4: Evet, şifreleme/şifre çözme işlemleri nedeniyle bir miktar performans ek yükü olabilir. Ancak modern CPU’lar ve optimize edilmiş TLS kütüphaneleri sayesinde bu etki genellikle düşüktür ve çoğu durumda göz ardı edilebilir. Güvenlik faydaları, bu küçük performans maliyetini fazlasıyla telafi eder.