Testing single certificates with Apache

Goal: Using Apache httpd to accept connections if the client’s leaf (end-entity) certificate is among a list of specified leaf certificates.

Ideally, I would be able to concatenate a limited number of client leaf certificates in SSLCACertificateFile and Apache would simply test if the connecting client is using one of the specified client certificates.

In one of Thomas Pornin’s answers he notes the following:

The server will need to validate the client certificate with regards to some trusted CA; you use SSLCACertificateFile or SSLCACertificatePath to configure these CA. It is possible to put a specific client certificate there directly, too (that’s called “direct trust”).

This seems to indicate that you can configure an Apache server to trust a specific certificate and not all certificates signed by the parent certificates. That is, if we have a chain: root -> A -> B -> leaf , then “direct trust” will only trust the leaf and not all leaf certificates signed by root.

I haven’t currently been successful in implementing this. If I set SSLVerifyClient require then placing only the leaf certficiate in SSLCACertificateFile results in the error unable to get local issuer certificate. SSLVerifyClient require essentially means that SSLCACertificateFile must include the certificate’s entire chain. If SSLVerifyClient optional_no_ca, then no validation happens at all. A client has the option of attaching a certificate but it is not validated against SSLCACertificateFile.

Continue reading Testing single certificates with Apache