[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
SUMMARY Re: client certificates -- howto?
After finishing up the summary I have a few questions:
1) Why isnt ldapwhoami converting "0.9.2342.19200300.100.1.1" to "uid"?
2) Why is the SSF 0?
3) Is there a .ldaprc directive to use the sasl EXTERNAL mech all the
time?
This is a summary of how I created a working client certificate. I
already had server certs working - and this requred setting up a CA for
myself. My directory is setup such that 'uid' is used in the DN. If
yours isnt, I doubt that this will work for you:
I first created a minimal openssl configuration file to teach openssl
about the concept of 'uid':
>>>>>>>>>>>>>>>>
oid_section = new_oids
[ new_oids ]
uid=0.9.2342.19200300.100.1.1
[ req ]
default_bits = 1024
default_keyfile = user.key
distinguished_name = req_distinguished_name
string_mask = nombstr
req_extensions = v3_req
[ req_distinguished_name ]
uid = user id
uid_max = 20
[ v3_req ]
nsCertType = client,email
basicConstraints = critical,CA:false
<<<<<<<<<<<<<<<<<
(it is likely that not all of that is necessary)
I called it 'user-cert.conf'
I generated the private key:
$ openssl genrsa -out USERNAME.key 1024
and then created a 'certificate signing request'
$ openssl req -new -config user-cert.conf -key USERNAME.key \
-out USERNAME.csr
(all one line)
(how to set up a CA is actualy documented elsewhere)
Now, in the role of the Certificate Authority God I had to make some
changes to the 'openssl.cnf' file:
- in the "[ new_oids ]" section added the line:
uid=0.9.2342.19200300.100.1.1
- in both the policy_match and policy_anything sections I change
all the existing lies to 'optional' and added:
uid = supplied
- processed the request with the following command:
# openssl ca -config openssl.cnf -out ~USERNAME/certs/USERNAME.crt \
-infiles ~USERNAME/certs/USERNAME.csr
I then returned to being a mear mortal to continue.
- convert the .crt format certificate to something that openldap likes:
$ openssl x509 -inform PEM -outform DER -in USERNAME.crt \
-out USERNAME.crt.der
I created a minimal ldif file to update my LDAP user object:
>>>>>>
dn: uid=USERNAME,ou=staff,ou=people,o=chebucto,c=ca
changetype: modify
replace: userCertificate;binary
userCertificate;binary:< file:///home/USERNAME/certs/USERNAME.crt.der
<<<<<<<<
- ran the update:
$ ldapmodify -Z -f ldif
The only change I had to make to slapd.conf were to include the
following lines :
>>>>
TLSVerifyClient try
sasl-regexp
uid=(.*)
ldap:///o=chebucto,c=ca??sub?(uid=$1)
>>>
restarted slapd for these to take effect.
I updated my ~/.ldaprc to setup the keys/cert pair so I can actualy use
this... Added the lines:
>>>>>>
TLS_REQCERT demand
TLS_CERT /home/USERNAME/certs/USERNAME.crt
TLS_KEY /home/USERNAME/certs/USERNAME.key
>>>>>
And sucuess:
$ ldapwhoami -Y EXTERNAL -Z
SASL/EXTERNAL authentication started
SASL username: 0.9.2342.19200300.100.1.1=jeffw
SASL SSF: 0
dn:uid=jeffw,ou=staff,ou=people,o=chebucto,c=ca
{end howto}