Skip to content

Commit b8deeec

Browse files
committed
Merge pull request #162 from ruby-ldap/openldap-ssl
Integration test TLS connection
2 parents 18fcec2 + 9cf169e commit b8deeec

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

script/install-openldap

+66-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ set -x
55
BASE_PATH="$( cd `dirname $0`/../test/fixtures/openldap && pwd )"
66
SEED_PATH="$( cd `dirname $0`/../test/fixtures && pwd )"
77

8-
dpkg -s slapd time ldap-utils ||\
9-
DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --force-yes slapd time ldap-utils
8+
dpkg -s slapd time ldap-utils gnutls-bin ssl-cert > /dev/null ||\
9+
DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --force-yes slapd time ldap-utils gnutls-bin ssl-cert
1010

1111
sudo /etc/init.d/slapd stop
1212

@@ -45,3 +45,67 @@ sudo /etc/init.d/slapd start
4545
-f $SEED_PATH/seed.ldif
4646

4747
sudo rm -rf $TMPDIR
48+
49+
# SSL
50+
51+
sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
52+
53+
sudo sh -c "cat > /etc/ssl/ca.info <<EOF
54+
cn = rubyldap
55+
ca
56+
cert_signing_key
57+
EOF"
58+
59+
# Create the self-signed CA certificate:
60+
sudo certtool --generate-self-signed \
61+
--load-privkey /etc/ssl/private/cakey.pem \
62+
--template /etc/ssl/ca.info \
63+
--outfile /etc/ssl/certs/cacert.pem
64+
65+
# Make a private key for the server:
66+
sudo certtool --generate-privkey \
67+
--bits 1024 \
68+
--outfile /etc/ssl/private/ldap01_slapd_key.pem
69+
70+
sudo sh -c "cat > /etc/ssl/ldap01.info <<EOF
71+
organization = Example Company
72+
cn = ldap01.example.com
73+
tls_www_server
74+
encryption_key
75+
signing_key
76+
expiration_days = 3650
77+
EOF"
78+
79+
# Create the server certificate
80+
sudo certtool --generate-certificate \
81+
--load-privkey /etc/ssl/private/ldap01_slapd_key.pem \
82+
--load-ca-certificate /etc/ssl/certs/cacert.pem \
83+
--load-ca-privkey /etc/ssl/private/cakey.pem \
84+
--template /etc/ssl/ldap01.info \
85+
--outfile /etc/ssl/certs/ldap01_slapd_cert.pem
86+
87+
sudo ldapmodify -Y EXTERNAL -H ldapi:/// <<EOF | true
88+
dn: cn=config
89+
add: olcTLSCACertificateFile
90+
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
91+
-
92+
add: olcTLSCertificateFile
93+
olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem
94+
-
95+
add: olcTLSCertificateKeyFile
96+
olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem
97+
EOF
98+
99+
# LDAP over TLS/SSL (ldaps://) is deprecated in favour of StartTLS. The latter
100+
# refers to an existing LDAP session (listening on TCP port 389) becoming
101+
# protected by TLS/SSL whereas LDAPS, like HTTPS, is a distinct
102+
# encrypted-from-the-start protocol that operates over TCP port 636. But we
103+
# enable it for testing here.
104+
sudo sed -i -e 's|^SLAPD_SERVICES="\(.*\)"|SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"|' /etc/default/slapd
105+
106+
sudo adduser openldap ssl-cert
107+
sudo chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem
108+
sudo chmod g+r /etc/ssl/private/ldap01_slapd_key.pem
109+
sudo chmod o-r /etc/ssl/private/ldap01_slapd_key.pem
110+
111+
sudo service slapd restart

test/integration/test_bind.rb

+5
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,9 @@ def test_bind_anonymous_fail
1919
def test_bind_fail
2020
refute @ldap.bind(method: :simple, username: "uid=user1,ou=People,dc=rubyldap,dc=com", password: "not my password"), @ldap.get_operation_result.inspect
2121
end
22+
23+
def test_bind_tls
24+
@ldap.encryption(method: :start_tls, tls_options: OpenSSL::SSL::SSLContext::DEFAULT_PARAMS)
25+
assert @ldap.bind(method: :simple, username: "uid=user1,ou=People,dc=rubyldap,dc=com", password: "passworD1"), @ldap.get_operation_result.inspect
26+
end
2227
end

0 commit comments

Comments
 (0)