Sent: Tue Jun 12 2012 12:08:52 GMT-0400 (EDT)
From: Patrick Hemmer <openldap@stormcloud9.net>
To: openldap-technical@openldap.org
Subject: TLS issues when setting olcTLSCACertificateFile to the CA
bundle
Whenever I set olcTLSCACertificateFile to
/etc/pki/tls/certs/ca-bundle.crt LDAP clients get cert errors
connecting to the server. But it works fine when I point
olcTLSCACertificateFile at the actual server cert instead of the
CA bundle.
With olcTLSCACertificateFile pointed at
/etc/pki/tls/certs/ca-bundle.crt:
CLIENT:
# LDAPTLS_CACERT=/etc/pki/tls/certs/ca-bundle.crt ldapsearch -H
'ldap://fqdn.to.my.server'
-ZZ -x -b '' -s base '+'
ldap_start_tls: Connect error (-11)
additional info: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
(unable to get local issuer certificate)
SERVER (from "slapd -d conns"):
TLS: can't accept: error:14094418:SSL
routines:SSL3_READ_BYTES:tlsv1 alert unknown ca.
Why is this happening. olcTLSCACertificateFile is supposed to
control the certificates that OpenLDAP will recognize, not
affect the certificate it gives to clients (right?).
This is OpenLDAP 2.4.31
-Patrick
So I found the cause of this issue. What is happening is that I have
the chain cert bundled in with the server's cert. Apparently the
chain cert MUST be placed in the file referenced by
olcTLSCACertificateFile.
However this now introduces a problem. We are requiring client
certificates for all connections, and we are using our own CA cert
to sign the client certs, and then telling OpenLDAP to trust only
our CA. However by having to add the chain cert to the CAs that
OpenLDAP will recognize, other clients signed with that chain cert
can now connect, not just clients signed with our CA.
OpenLDAP does not appear to have any method for specifying that a
cert file should only be used as the chain cert of the server's
certificate. While browsing around trying to understand exactly what
was going on, I found other projects like apache httpd have
configuration parameters (
SSLCertificateChainFile) to specify chain cert files for exactly
this reason. Is there any particular reason OpenLDAP does not have
this capability?