sslhappy-ca | dovecot-clientcert | thunderbird | apache-clientcert | firefox
tested with Apache 2.4
We are assuming you’ve created your own Certification Authority on e.g. dc1.example.local
.
Submit certificate requests (CSRs) to that CA for:
Note. we truly need to enable HTTPS on the server itself, as it seems to be a requirement for the PKI client authentication to pass through.
Send those to the server and workatation(s) e.g. for the server
scp /etc/ssl/ubuntu63.example.local.crt ubuntu63:/etc/ssl/ scp /etc/ssl/private/ubuntu63.example.local.key ubuntu63:/etc/ssl/private/
Enable HTTPS
a2enmod ssl a2enmod headers vi /etc/apache2/apache2.conf <VirtualHost *:443> Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" SSLEngine on SSLProtocol all -TLSv1 -SSLv2 -SSLv3 SSLHonorCipherOrder off SSLCipherSuite "ECDHE:DHE:kGOST:!aNULL:!eNULL:!RC4:!MD5:!3DES:!AES128" SSLCertificateFile /etc/ssl/ubuntu63.example.local.crt SSLCertificateKeyFile /etc/ssl/private/ubuntu63.example.local.key #SSLCertificateChainFile /etc/httpd/ssl/issuer-concat-cert.crt ServerAdmin pbraun@nethence.com ServerName ubuntu63.example.local LogLevel warn DocumentRoot /var/www/html </VirtualHost> systemctl restart apache2
Note. the apache daemon now needs the passphrase for restarting, as it needs to unlock the private key for ubuntu63.example.local
.
We can now reach the page normally and through TLS, as the client-side certificate verification is not enabled yet: http://ubuntu63.example.local/.
Now enabling client-side certificate check on the Apache service
on the CA host
scp /etc/ssl/cacert.pem ubuntu63:/etc/ssl/
on ubuntu63
vi /etc/apache2/apache2.conf #in the vhost SSLCACertificateFile /etc/ssl/cacert.pem <Location /protected> SSLOptions +StdEnvVars SSLVerifyClient require </Location> systemctl restart apache2
As a result, when trying to load the /protected
folder without any client specific certificate, the http client e.g. Firefox shows
Error code: SSL_ERROR_HANDSHAKE_FAILURE_ALERT
And the logs on the server shows
[Tue Mar 13 22:21:05.573195 2018] [ssl:error] [pid 17401:tid 139778410333952] [client x.x.x.x:45252] AH02261: Re-negotiation handshake failed [Tue Mar 13 22:21:05.573258 2018] [ssl:error] [pid 17401:tid 139778410333952] SSL Library Error: error:140890C7:SSL routines:ssl3_get_client_certificate: peer did not return a certificate -- No CAs known to server for verification?
Warning: one must take good care to disable the service on port 80. Enabling client certificate check on port 443 and keeping port 80 open would not serve any purpose in our goal. Instead of closing the port 80 on the firewalls and web daemon, I rather prefer to setup redirects. Therefore, users that do like to type urls manually into their browser will be able to reach the TLS-enabled service with no hassle nor pain.
Now proceed with a web client setup e.g. with Firefox.
Configuring Apache for SSL Client Certificate Authentication https://stuff-things.net/2015/09/28/configuring-apache-for-ssl-client-certificate-authentication/