Esperienza di una infrastruttura PKI con OpenSSL |
|
|
Questa esercitazione è contenuta nel tarball (40KB) dove sono presenti tutti i file per la costruzione e configurazione dell'esperimento. Dopo aver settato correttamente l'ambiente Netkit lancia lo script:
user@realhost$ ./lab start
Nel file system delle macchine virtuali da noi usate ci sono già
tutti i pacchetti necessari. Nel caso di una macchina reale occorre
invece installare il pacchetto openssl e anche il
pacchetto wipe per la cancellazione affidabile
dei files dai mezzi magnetici (nel nostro caso virtuale non serve
anche perchè funziona solo se il supporto è magnetico).
La descrizione della struttura a livello di filesystem usata da openssl è la seguente:
/etc/ssl/openssl.cnf master configuration file ./demoCA main CA directory ./demoCA/cacert.pem CA certificate ./demoCA/private/cakey.pem CA private key ./demoCA/serial CA serial number file ./demoCA/serial.old CA serial number backup file ./demoCA/index.txt CA text database file ./demoCA/index.txt.old CA text database backup file ./demoCA/certs certificate output file
Sono state fatte due leggere modifiche nei file di configurazione:
/usr/lib/ssl/misc/CA.pl
sono stati portati a 3650 il numero di giorni di validità
del certificato della CA./etc/ssl/openssl.cnf
come segue:
# /etc/ssl/openssl.cnf countryName = Country Name countryName_default = IT stateOrProvinceName = State or Province Name stateOrProvinceName_default = Italy localityName = Locality Name localityName_default = Mestre-Venezia 0.organizationName = Organization Name 0.organizationName_default = MIUR organizationalUnitName = Organizational Unit Name organizationalUnitName_default = R&D
In seguito generiamo i certificati e le chiavi per la nostra
Certification Authority (CA) con il comando (password umts4tic):
root@PKI# /usr/lib/ssl/misc/CA.pl -newca
rispondendo come segue alle domande:
Country Name [IT]: State or Province Name [Italy]: Locality Name [Mestre-Venezia]: Organization Name [MIUR]: Organizational Unit Name [R&D]: Common Name []:ca.istituto.it Email Address []:ca@istituto.it
Per vedere i dettagli del certificato appena generato:
root@PKI# openssl x509 -noout -text -in ./demoCA/cacert.pem
Per vedere i dettagli della chiave appena generata:
root@PKI# openssl rsa -noout -text -in ./demoCA/private/cakey.pem
Tutti i dati verranno salvati all'interno della directory
demoCA che viene automaticamente costruita all'interno della
directory corrente. La passwd della CA è umts4tic.
Passiamo ora a generare i certificati e le chiavi per coprire il nostro fabbisogno. Ogni identità che vuole/deve generare la propria coppia di chiavi ha l'obbligo di custodire la chiave primaria in un luogo sicuro e può memorizzarla ad esempio in una smart card. La CA non si renderà depositoria delle chiavi private degli utenti e metterà massima cura nella conservazione della propria chiave privata utilizzata per certificare i propri utenti.
Un utente che vuole generare una coppia di chiavi utilizzando OpenSSL deve dare i seguenti comandi:
$ /usr/lib/ssl/misc/CA.pl -newreq
Eventualmente per decodificare la richiesta di certificato appena generata:
$ openssl req -text -noout > newreq.pem
Ora si consegna il certificato alla CA che lo firmerà:
root@PKI# /usr/lib/ssl/misc/CA.pl -sign
Troveremo il certificato firmato nel file newcert.pem.
In seguito sarà compito della CA mettere a disposizione i certificati
da lei firmati così come la lista dei certificati revocati.
Nel caso in cui volessimo costruire la richiesta di certificato
senza usare lo script CA.pl occorrerebbe prima generare
le chiavi e poi il certificato secondo i seguenti comandi:
$ openssl genrsa -des3 -out user.key 1024 $ openssl req -new -key user.key -out user.csr $ cat user.key user.csr > newreq.pem
I certificati sono tutti protetti da password e quindi se sono usati all'interno di servizi WEB causano la richiesta, allo startup del servizio, della digitazione della password. Per ovviare a questo problema è possibile rimuovere la cifratura del certificato con il comando:
$ openssl rsa < newreq.pem > newkey.pem
Revoca |
|
Per revocare un certificato:
root@PKI# openssl ca -revoke cert.pem
per generare la lista dei certificati revocati:
root@PKI# openssl ca -gencrl -out file.crl
per vederne i dettagli:
root@PKI# openssl crl -noout -text -in file.crl
Esportazione per Browser/MUA |
|
Per trasformare un certificato in un file importabile da un browser:
$ openssl pkcs12 -export -in demoCA/newcerts/01.pem \
-inkey demoCA/private/01.pem \
-certfile demoCA/cacert.pem \
-name "OpenCA Digital Certificate" -out mycert.p12
Cancellazione database |
|
Nel caso reale dovremmo cancellare i dati dal supporto magnetico con:
root@PKI# wipe -r demoCA *.pem
e terminare la sessione sull'host PKI.
I certificati del dominio "istituto.it" |
|
Questa esercitazione è usata anche come base per le altre
esercitazioni che hanno bisogno di certificati digitali. In questa
sezione indichiamo i parametri per la costruzione dei seguenti
certificati all'interno del dominio istituto.it:
server (Common Name: server.istituto.it,
Email Address: server@istituto.it)rserver (Common Name: rserver.istituto.it,
Email Address: rserver@istituto.it)client (Common Name: client.istituto.it,
Email Address: client@istituto.it)
dove le password dei certificati sono rispettivamente i nomi
(non FQDN) degli host stessi.
Nel file CA-istituto.it.tgz è stata salvata
la directory demoCA che contiene il database. Se
dobbiamo/vogliamo costruire altri certificati nel dominio basta
aprire il file e procedere nel costruire i certificati e a
firmarli. Il certificato della CA ha scadenza l'8 Aprile 2015
e gli altri hanno scadenza il 9 Aprile 2008 (lunga vita a Netkit4TIC!).
|
|
Sandro Doro (email me)