TLS and LDAP over SSL (ldaps)
Modifying /etc/openldap/ldap.conf
Modify / append the TLS-settings:
#--- SSL/TLS setting ---# TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP TLS_CACERT /etc/ssl/certs/ca_cert.pem TLS_CERT /etc/ssl/certs/station7_cert.pem TLS_KEY /etc/ssl/private/station7_key.pem TLS_REQCERT demand
Modifying /etc/openldap/slapd.conf
Modify / append the TLS-settings:
#--- SSL/TLS setting ---#
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP
TLSCertificateFile /etc/ssl/certs/station7_cert.pem
TLSCertificateKeyFile /etc/ssl/private/station7_key.pem
TLSCACertificateFile /etc/ssl/certs/ca_cert.pem
TLSVerifyClient never
SSL for OpenLDAP - ldaps
Open /etc/init.d/ldap and search for the line SLAPD_URLS
SLAPD_URLS="ldap:///"
Add „ldaps“
# 2007-06-28, chhaas: # SLAPD_URLS="ldap:///" # 2007-06-28, chhaas: SLAPD_URLS="ldap:/// ldaps:///"
After all the above modifications to the OpenLDAP-configuration, restart the ldap daemon and watch carefully the output in /var/log/messages !
Testing
ldaps
Use a portscanner like „nmap“:
station7:/ # nmap localhost | grep ldap 389/tcp open ldap 636/tcp open ldapssl
→ ldaps is running at port 636
openssl s_client -connect localhost:636 -showcerts -state -CAfile /etc/ssl/certs/ca_cert.pem station7:/ # openssl s_client -connect localhost:636 -showcerts -state -CAfile /etc/ssl/certs/ca_cert.pem CONNECTED(00000004) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=1 /C=DE/ST=BW/L=Stuttgart/O=Example Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com verify return:1 depth=0 /C=DE/ST=BW/L=Stuttgart/O=Example Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com verify return:1 SSL_connect:SSLv3 read server certificate A SSL_connect:SSLv3 read server done A SSL_connect:SSLv3 write client key exchange A SSL_connect:SSLv3 write change cipher spec A SSL_connect:SSLv3 write finished A SSL_connect:SSLv3 flush data SSL_connect:SSLv3 read finished A --- Certificate chain 0 s:/C=DE/ST=BW/L=Stuttgart/O=Example Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com i:/C=DE/ST=BW/L=Stuttgart/O=Example Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com -----BEGIN CERTIFICATE----- [... snipped out ...] -----END CERTIFICATE----- --- Server certificate subject=/C=DE/ST=BW/L=Stuttgart/O=Example Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com issuer=/C=DE/ST=BW/L=Stuttgart/O=UExample Inc./OU=IuK/CN=station7.example.com/emailAddress=hostmaster@example.com --- No client certificate CA names sent --- SSL handshake has read 1193 bytes and written 340 bytes --- New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA Session-ID: 98D61CE93C7A72E40E977BD5BD1CCC3E83D72AF2EDB8D82B24BA27E51903C161 Session-ID-ctx: Master-Key: D42BCC6BC82A0C2DC163CE07B190C1F145D238B8764A10201B63918D9CADD49447611030C96E68EAA109EE1B8AEBEF05 Key-Arg : None Start Time: 1184081560 Timeout : 300 (sec) Verify return code: 0 (ok) ---
The command will hang after the final return code output. This is normal. „Control-c“ will end the command.
The line „No client certificate CA names sent“ is indicative of a server side SSL set up. If client authentication had been configured, the OpenSSL command and output would resemble this:
OpenSSL Output Using Client Authentication
ldaps is a SSL-encrypted LDAP-connection. Try ZZ here to force TLS:
station7:/etc/init.d # ldapsearch -H ldaps://station7.example.com -x -ZZ ldap_start_tls: Operations error (1) additional info: TLS already started
This tells you, that the connection is already encrypted. Now execute the command without the „ZZ“:
station7:/etc/init.d # ldapsearch -H ldaps://station7.example.com -x
If it executes successfully the ldaps is working!
More information can be found at: http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
and: http://www.openldap.org/faq/data/cache/185.html
← index