LDAP üzerinden TLS kullanırken ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) ya da TLS: hostname does not match CN in peer certificate gibi hatalar, istemcinin dizin sunucusunun sertifikasını doğrulayamadığını gösterir. İki yöntem vardır: 636 portunda LDAPS ve 389 portunda StartTLS.
İstemci ne kontrol eder?
- Sertifikanın güvenilen bir CA tarafından imzalanmış olması (zincir).
- Bağlanılan ana bilgisayar adının sertifikadaki SAN/CN ile eşleşmesi. IP ile bağlanmak çoğu zaman uyumsuzluk üretir.
- Geçerlilik tarihi ve Server Authentication kullanımı.
Teşhis
openssl s_client -connect ldap.ornek.com:636 -showcerts
openssl s_client -connect ldap.ornek.com:389 -starttls ldap
ldapsearch -H ldaps://ldap.ornek.com -x -b "dc=ornek,dc=com" -D "cn=okuyucu,dc=ornek,dc=com" -W
Çıktıda Verify return code: 0 (ok) arıyorsunuz. 20 veya 21 kodu ara/kök CA'nın eksik olduğunu gösterir.
OpenLDAP istemcisinde CA tanıtma
/etc/openldap/ldap.conf (Debian tabanlıda /etc/ldap/ldap.conf) içine:
TLS_CACERT /etc/ssl/certs/kurum-ca.pem
TLS_REQCERT demand
Uygulama tarafında PHP, Java veya Python kullanıyorsanız her birinin kendi güven deposunu kullandığını unutmayın; örneğin Java için CA'yı keytool ile truststore'a eklemek gerekir.
Kaçınılacak kısayol
TLS_REQCERT never doğrulamayı kapatır ve kimlik bilgilerinizi sahte bir sunucuya gönderme riskini doğurur. Yalnızca kısa süreli test için kullanın.
Sertifikada sunucunun gerçek DNS adının SAN olarak bulunması en sağlam önlemdir. Dahili adlar için kurumsal CA, herkese açık adlar için güvenilir CA kullanın; SSL sertifikaları sayfamıza göz atabilir veya CSR oluşturucuyla isteğinizi hazırlayabilirsiniz.