SSL può operare sia con client anonimi che supportono i protocolli e i ciphers specificati tramite le direttive SSLProtocol e SSLCipherSuite oppure autenticare il client tramite i certificati rilasciati dalle varie Certification Authority.
Per abilitare questa funzione occorre specificare al server (a livello di server configuration oppure per virtualhost) il path dove risiede l'elenco dei singoli certificati rilasciati da una CA tramite la direttiva SSLCACertificatePath:
SSLCACertificatePath /usr/local/apache/conf/ssl/cacerts
In alternativa c'è la possibilità di concatenare tutti i certificati in un unico file e specificare il path del file tramite la direttiva SSLCACertificateFile:
SSLCACertificateFile /usr/local/apache/conf/ssl/cacerts.crt
Infine occorre specificare il tipo di matching da eseguire sul client tramite la direttiva SSLVerifyClient la quale ha solo 4 opzioni:
none: Non viene richiesto nessun certificato e viene ignorato qualora il client ne fosse fornito. Settaggio di default.
optional: Non è richiesto nessun certificato, ma ne viene eseguito comunque un check per verificarne l'esistenza. (non è supportata da tutti i browser)
optional_no_ca: Non viene richiesto un certificato, ma se è presente viene accettato.
require: Viene richiesto un certificato valido.
Per esempio:
SSLVerifyClient require
E' possibile che un certificato di un client non sia stato rilasciato da una CA che il server riconosce come tale, ma a sua volta certificato da una seconda CA riconosciuta, quindi è come se ci fosse un intermediario che certifichi il client. E' possibile lato server decidere se accettare o meno questi tipi di certificati e se accettarli dando il numero massimo di intermediari, questo è possibile tramite la direttiva SSLVerifyDepth che come argomento si aspetta il numero max di intermediari per rendere valido il certificato.
L'impostazione di default, non accetta certificati che non sono stati rilasciati direttamente da un CA riconosciuta:
SSLVerifyDepth 1
Come è possibile aggiungere nuovi cerificati è possibile toglierli tramite le direttive SSLCARevocationFileeSSLCARevocationFile.
Autenticazione utenti tramite la certificazione dei client
E' possibile utilizzare i certificati per i client per effettuare un'autenticazione utente.
- Disabilitare la basic Authentification gestita dal modulo mod_auth:
SSLOptions +FakeBasicAuth
- Creazione di un semplice file con la lista dei client e delle relative password criptate, il nome viene dedotto dal certificato. Per estrarre la riga da inserire nel password file eseguire il seguente comando:
[neo@dido neo]$ openssl x509 -noout -subject -in certificate.crt
[neo@dido neo]$ /C=IT/L=MI/O=coresis/OU=OpenskillsTeam/CN=www.openskills.info:[password cryptata]
Il risultato del comando dovrà essere inserito nel password file.
Installazione e configurazione di openssl e mod_ssl, Creazione di chiavi e certificati.