Greetings.
I haven't had to administer Apache for about 6 or 7 years now, but recently
jumped back into it to setup a subversion repository for developers. I'm
working on setting up subversion on Apache (Linux) to authenticate via ldaps to
an Active Directory domain controller. Front end subversion client accesses
Apache successfully via https. However, I cannot get Apache to talk ldaps
while verifying the certs. I've been banging my head against this thing for
weeks now, and am beyond frustrated. I've read & researched to no end -
scoured the Internet - found others with a similar issue, but no fix yet. Any
help anyone could provide would be greatly appreciated.
Sincerely,
Dave
RHEL5.3 x86_64
RPMs:
httpd-2.2.3-45
mod_ssl-2.2.3-45
openssl-0.9.8e-12
openldap-2.3.43-12
subversion-1.6.11-7
mod_dav_svn-1.6.11-7
Active Directory - Windows Server 2003
Was already in httpd.conf:
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Added to ssl.conf:
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect file:/dev/urandom 1024
SSLCipherSuite SSLv3:+HIGH:+MEDIUM
SSLCertificateFile /etc/pki/tls/http/apache_server_cert.pem
SSLCertificateKeyFile /etc/pki/tls/apache_server_key.pem
SSLCACertificateFile /etc/pki/CA/domain_controller_CA_cert.pem
SSLVerifyClient require
SSLVerifyDepth 1
SSLOptions +StrictRequire
The following httpd.conf configuration works for authenticating via ldaps
without verifying the certificates:
##############################
# Subversion config
LDAPVerifyServerCert off
<Location /repos>
DAV svn
SVNPath /opt/local/svn/repos
SSLRequireSSL
Order deny,allow
Deny from All
AuthName "Subversion Repository"
AuthType Basic
AuthBasicProvider ldap
Satisfy any
Require ldap-group CN=Subversion,CN=Users,DC=domain,DC=com
AuthLDAPURL
"ldaps://domain_controller.domain.com:636/CN=Users,DC=domain,DC=com?sAMAccountName?sub?(objectClass=*)"
SSL
AuthLDAPBindDN "CN=Apache,CN=Users,DC=domain,DC=com"
AuthLDAPBindPassword "password"
</Location>
CustomLog logs/svn_log "%t %u %{SVN-ACTION}e" env=SVN-ACTION
##############################
However, changing LDAPVerifyServerCert to "on" and adding LDAPTrustedGlobalCert
pointing to CA cert (shown below) to verify the certificates gives me a 500
error in the subversion client (Tortoise), and the below error in
ssl_error_log. I also tried adding a second LDAPTrustedGlobalCert pointing to
apache_server cert, to no avail.
httpd.conf:
##############################
# Subversion config
LDAPTrustedGlobalCert CA_BASE64 /etc/pki/CA/domain_controller_CA_cert.pem
LDAPTrustedGlobalCert CERT_BASE64 /etc/pki/tls/http/apache_server_cert.pem
##### Tried with and without this line
LDAPVerifyServerCert on
<Location /repos>
DAV svn
SVNPath /opt/local/svn/repos
SSLRequireSSL
Order deny,allow
Deny from All
AuthName "Subversion Repository"
AuthType Basic
AuthBasicProvider ldap
Satisfy any
Require ldap-group CN=Subversion,CN=Users,DC=domain,DC=com
AuthLDAPURL
"ldaps://domain_controller.domain.com:636/CN=Users,DC=domain,DC=com?sAMAccountName?sub?(objectClass=*)"
SSL
AuthLDAPBindDN "CN=Apache,CN=Users,DC=domain,DC=com"
AuthLDAPBindPassword "password"
</Location>
CustomLog logs/svn_log "%t %u %{SVN-ACTION}e" env=SVN-ACTION
##############################
ssl_error_log:
[Wed May 04 17:31:42 2011] [warn] [client 192.168.151.74] [27453] auth_ldap
authenticate: user subversion_test authentication failed; URI /repos [LDAP:
ldap_simple_bind_s() failed][Can't contact LDAP server]
I run "openssl s_client -CApath /etc/pki/CA/ -connect
domain_controller.domain.com:636" and receive "Verify return code: 0 (ok)", so
it appears the SSL handshake is fine outside of Apache:
CONNECTED(00000003)
depth=1 /DC=com/DC=domain/CN=domain_controller
verify return:1
depth=0 /C=US/ST=State/L=City/O=Org/OU=OrgUnit/CN=domain_controller.domain.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=State/L=City/O=Org/OU=OrgUnit/CN=domain_controller.domain.com
i:/DC=com/DC=domain/CN=domain_controller
---
Server certificate
-----BEGIN CERTIFICATE-----
...
...
-----END CERTIFICATE-----
subject=/C=US/ST=State/L=City/O=Org/OU=OrgUnit/CN=domain_controller.domain.com
issuer=/DC=com/DC=domain/CN=domain_controller
---
Acceptable client certificate CA names
/DC=com/DC=domain/CN=DOMAIN ##### <--- not sure why its
returning CN=DOMAIN and not CN=domain_controller
... ##### <---
the rest are standard CAs (Verisign, etc)
...
...
---
SSL handshake has read 4776 bytes and written 443 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1 ##### <--- also not
sure why its stating TLSv1 protocol instead of SSL.
Cipher : RC4-MD5
Session-ID: .........................................
Session-ID-ctx:
Master-Key: .........................................
Key-Arg : None
Krb5 Principal: None
Start Time: 1304534983
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
read:errno=0