-----Message initial----- @: Joel Carnat <j...@carnat.net>; Cc: misc@openbsd.org; De: Philip Guenther <guent...@gmail.com> Envoyi: dim. 14-11-2010 02:25 Sujet: Re: ldapd and self-signed certificate > On Sat, Nov 13, 2010 at 12:02 PM, Joel Carnat <j...@carnat.net> wrote: > > I want to use LDAP to store postfix, apache and dovecot users. > > This sounds a quite simple need so I plan to use the native ldapd. > ... > > Then I created a self-signed certificate in /etc/ldap/ using directions from > > starttls(8). > > The ldapd starts and listens to ldap and ldaps ports. > > But when I run: # ldapmodify -x -H ldaps://ldapd.tumfatig.local -D > > "cn=admin,dc=tumfatig,dc=local" -W -f /tmp/tumfatig > > I get: "additional info: error:14090086:SSL > > routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" > > The ldapd (in debug mode) says: "SSL library error: ssl_session_accept: > > error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca" > > > > Can I use ldapd with self-signed certificate ? > > Did I miss a step ? > > There are two aspects to verifying a cert: > 1) does it have a valid signature? > 2) is the CA that signed this trustable at all? > > The point of this is to know whether you can trust the contents of the > cert so that you're protected from Man-in-the-Middle attacks. If you > accepted any self-signed cert then anyone could generate a cert that > claimed to be your server, then splice your TCP connection and snoop > and modify all your data. > > So, you need some way to know which certs to trust; that's where #1 > and #2 come in. #1 validates that this cert can be traced back to a > particular CA, while #2 is where you decide whether that CA is okay. > #1 is done automatically by the OpenSSL code; #2 is done by putting > all the CAs you want to trust in location(s) that OpenSSL checks. > > For a self-signed cert, step #1 is basically trivial, while #2 is done > by either putting a link to the cert in /etc/ssl/certs/ with a name > that's derived from a hash of the cert's subject, or adding the cert > itself to /etc/ssl/cert.pem. The latter is easy but you may find it > cluttered. To do the former, do something like: > cert_file=/absolute/path/to/the/cert.pem > ln -s $cert_file /etc/ssl/certs/`openssl x509 -noout -in > $cert_file -subject_hash`.0 > > Note that /etc/ssl/cert* are the default trust paths for practically > all openssl-based apps, so a cert added there will be trusted for lots > of things. If you don't like that idea then you'll need to look at > how to set the CA paths for the apps you want to trust that cert. > That's fairly specific to the involved app. starttls(8) describes the > settings for sendmail, ldap.conf(5) describes it for the OpenLDAP > libldap and clients, etc. > > > Philip Guenther >
Thank you for this detailed explanation. For the moment, I just testing things in a "closed" environment. This is why I used self-signed certificates. In a "real" environment, I would go with certificates signed by publicly known CA. I did try creating /etc/ssl/certs and linking my self-signed certificates as you describe. But that doesn't seem to work neither. I also took one of my certificates, signed by a publicly know CA but I still got the same message... I checked the certificate and it contains the path to the CA. But I still get the "tlsv1 alert unknown ca" error :( Joel Carnat