Tabla de Contenidos
Mutual Authentication Using Apache and a Web Client)
What Is Client Certificate Authentication?
Client certificate authentication refers to a certificate used to authenticate clients in SSL.
How to Do Apache Client Certificate Authentication
All that is taking place here beyond standard SSL is that the server will also authenticate the client that is requesting access.
Requirements for Authentication
First, some assumptions must be made to get this up and running. You will need to have the following:
An Apache instance that has mod\_ssl enabled. Verification: run the following
apachectl –M ssl
You should see something like this:
ssl_module (shared)
If you don’t have this then you will need to get this enabled in order to continue.
Proper access. To:
- Apache
- OpenSSL
- The certs that you will create and install
Generate the Certificate
Generate the certificate for the self signed CA.
openssl req -newkey rsa:2048 -nodes -keyform PEM \ -keyout selfsigned-ca.key -x509 -days 3650 \ -outform PEM -out selfsigned-ca.crt
New items: selfsigned-ca.key selfsigned-ca.crt
The CA has now been created
Create the SSL server’s private key.
openssl genrsa -out selfsigned.key 2048
New items: selfsigned.key
Create the Apache server CSR.
openssl req -new -key selfsigned.key -out selfsigned.csr
New items: selfsigned.csr
Sign the Apache server CSR.
openssl x509 -req -in selfsigned.csr -CA selfsigned-ca.crt \ -CAkey selfsigned-ca.key -set_serial 100 -days 365 \ -outform PEM -out selfsigned.crt
New items: selfsigned.crt The cert is good for 10 years.
Configure Apache
Now, looking at this from the Apache SSL point of view, what we have below is sufficient for one-way or standard SSL communications.
Apache configuration
Place your certificate and key generated from above into the location below.
If you need to place it somewhere else, be sure to modify the path for the two SSL directives below.
Either way, change those two directives in your httpd configuration in Path/to/apache/conf/extra/httpd-ssl.conf or in your vhost configuration if that is where you are enabling use of SSL.
SSLCertificateFile “/etc/pki/tls/rselfsigned.crt” SSLCertificateKeyFile “/etc/pki/tls/selfsigned.key”
This is sufficient for one-way SSL communications.
Make Sure SSL Works
Let’s check Apache and make sure SSL is working properly:
Ensure that the SSL-enabled Apache instance works. Verification: run the following
Openssl s_client –connect host.domain.com:443
You should see:
CONNECTED
And a bunch of other text and a BEGIN CERTIFICATE block. If you do, all is well.
If this does not work, then you must get SSL in working order before you can continue.
At this point SSL is functioning properly on the Apache web server.
Begin Mutual Authentication
In your SSL configuration file (the local selected above) add the following:
- SSLVerifyClient
- SSLVerifyDepth 10
- SSLCACertificateFile /path/to/cert/selfsigned-ca.crt
Once again, follow the documented steps below:
Generate the client’s private key.
openssl genrsa -out selfsigned-cli.key 2048
New items: \* selfsigned-cli.key
Create the client CSR.
openssl req -new -key selfsigned-cli.key -out selfsigned-cli.csr
New items: \* selfsigned-cli.csr
Sign the client CSR.
openssl x509 -req -in selfsigned-cli.csr -CA selfsigned-ca.crt \ -CAkey selfsigned-ca.key -set_serial 101 -days 365 \ -outform PEM -out selfsigned-cli.crt
New items: \* selfsigned-cli.crt
Bundle the client’s certificate and client’s key into a p12 pack.
openssl pkcs12 -export -inkey selfsigned-cli.key \ -in selfsigned-cli.crt -out selfsigned-cli.p12
New items: selfsigned-cli.p12
Test the Apache Certificate Authentication
Restart Apache with: apachectl restart.
Attempt to access it via https. You will be prevented from doing so without the client side certificate you just created because Apache is looking for it in the exchange.
Add the new certificate bundle (selfsigned-cli.p12) to your keychain on your workstation. Now, in your browser access the https URL once again. You will simply select it from the list.
After picking the certificate, VIOLA\! I now have access via mutual authentication.