Apache - Create and validate client certificates
Creating client certificates
- Create the client key:
# openssl genrsa -des3 -out garex.key 1024 - Create the client request:
# openssl req -new -key garex.KEY -out garex.CSR
In the common name (CN) fill in your own name, for example "Martin Allert". For organisational unit you can fill in a department. - Sign the client certificate request and generate the certificate:
# openssl ca -in garex.CSR -cert ../../CA/garexCA.CRT -keyfile \
../../CA/garexCA.KEY -out garex.CRT - Verify all data has been filled in correctly:
# openssl x509 -in garex.CRT -text
Validating client certificates
How can I authenticate clients based on certificates if I know all my clients?
If you know all your users (i.e. you have a closed group of users), such as with an intranet, you can use a plain certificate authentication. The only thing you need to do is sign a client certificate with your own CA certificate ca.crt and then verify the client against the certificate.
httpd.conf:
# a client certificate that signs directly is required
# must be in ca.crt with CA certificate
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.crt
How can I authenticate my clients for a certain URL based on certificates, but give anonymous clients to the rest of the server?
To realise this use the per-directory reconfiguration property of http://httpd.apache.org/docs/2.0/mod/mod_ssl.html
httpd.conf:
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
SSLCheck
Our SSLCheck will examine your website's root and intermediate certificates for correctness and report any potential issues