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).
Ottimo, funziona. Ma se volessi avere sul server il codice fiscale del proprietario della tessera?
ReplyDeleteCredo tu debba conoscere i codici fiscali a priori. Magari in un database.
DeleteOppure utilizzare un servizio di autenticazione e autorizzazione della Regione, tipo http://www.regione.toscana.it/-/arpa-infrastruttura-per-l-autenticazione-autorizzazione-e-accesso-ai-servizi
io ho risolto con:
ReplyDeleteScaricate tutti i certificati che devono avere l'estensione .pem in una cartella tipo: "PATH_TO_DIR/CAcerts"
eseguire il comando c_rehash PATH_TO_DIR/CAcerts/
che crea i link simbolici con il nome in hash dei file del certificato
definire nel file conf:
SSLCACertificatePath "PATH_TO_DIR/CAcerts"
SSLCADNRequestPath "PATH_TO_DIR/CAcerts"
NOTE: motico del c_rehash è dovuto alla definizione di SSLCACertificatePath. Come da guida apache:
The files in this directory have to be PEM-encoded and are accessed through hash filenames. So usually you can't just place the Certificate files there: you also have to create symbolic links named hash-value.N. And you should always make sure this directory contains the appropriate symbolic links.
Mi unisco a RedFox: OTTIMO, funziona!
ReplyDeleteTUTORIAL per:
ReplyDelete- Apache 2.4.6
- Red Hat Enterprise Linux 7
- Kernel 3.10.0-514
- CNS rilasciata dalla Regione Lazio
- CNS prodotta da Actalis modello AC 2014
- Card reader marca Ewent modello EW1052
I driver Windows 7 per la CNS sono disponibili qui:
ftp://ftp.finanze.it/pub/sanita/IDP_6.26.14_Windows.zip
Il card reader è supportato nativamente da S.O.
# wget https://gist.github.com/3v1n0/e371f58162795e0635f2/raw/6c8bf242cc26b36db5e4c861dc36b26917566865/parse-gov-certs.py
# nano parse-gov-certs.py
modificare:
DEFAULT_XML_URI = "https://applicazioni.cnipa.gov.it/TSL/IT_TSL_CNS.xml"
DEFAULT_XML_URI = "https://applicazioni.cnipa.gov.it/TSL/_IT_TSL_CNS.xml"
# chmox +x parse-gov-certs.py
# ./parse-gov-certs.py --output-folder /var/tmp/certs
# cat /var/tmp/certs/*Lazio* >> /etc/pki/tls/certs/ca-CNS-bundle.crt
# mkdir /var/www/html/CNS
# nano /etc/httpd/conf.d/ssl.conf
Nella "stanza" aggiungere:
SSLCACertificateFile /etc/pki/tls/certs/ca-CNS-bundle.crt
SSLVerifyClient require
SSLOptions +ExportCertData +StdEnvVars
SSLVerifyDepth 4
# apachectl restart
Blogspot ha tagliato alcune parti del mio commento scambiandole per un tentativo di cross site scripting... Falso positivo!
ReplyDelete