Showing posts with label SSLVerifyClient. Show all posts
Showing posts with label SSLVerifyClient. Show all posts

Thursday, March 12, 2015

Autenticazione Apache con la carta sanitaria Regione Toscana

E' stata una tribolazione: andare a tentoni richiede del tempo.

Utilizzare questo script https://gist.github.com/3v1n0/e371f58162795e0635f2 che fa quanto scritto nei commenti:
Get Italian government Certification Authority certificates from used by
by various National Service SmartCards (Carta Nazionale dei Servizi- CNS) 

mkdir /var/tmp/certs
./parse-gov-certs.py --output-folder /var/tmp/certs

Qui ci saranno vari certificati di Certification Authority di vari enti italiani usati per firmare i certificati di varie smart card, fra cui quelli utili al nostro scopo.

cd /var/tmp/certs
cat Regione_Toscana_-_CA_Cittadini_Servizi_di_Certificazione_* >> /etc/pki/tls/certs/ca-CNS-bundle.crt

In Apache, aprire il file ssl.conf (per esempio) e nel virtualhost opportuno mettere:

<VirtualHost _default_:443>
...

SSLCACertificateFile /etc/pki/tls/certs/ca-CNS-bundle.crt
...

</VirtualHost>

Non sono riuscito a far funzionare la direttiva SSLCACertificatePath, ovvero indicare una directory dove mettere i certificati scaricati con lo script Python.

E per richiedere la verifica del certificato del client (quindi il browser chiede il PIN della carta e passa il cerificato al server), mettere sempre all'interno della definizione del virtual host, o in qualche direttiva Location o Directory:

SSLVerifyClient require
SSLOptions +ExportCertData +StdEnvVars
SSLVerifyDepth 4


Questa è certamente una configurazione di base.
Il client viene autorizzato semplicemente se il certificato che presenta è stato firmato da una di queste CA. 
E' possibile autorizzare le carte in base a specifici attributi definiti con le direttive SSLRequire, e probabilmente configurare una CRL (Certificate Revocation List).