Configurazione del Keyserver PGP

Non ci soffermeremo sull’installazione dei pacchetti e del software di base, incluso il sistema operativo. Una volta installato il server OpenLDAP, dovremmo agire sul file di configurazione slapd.conf. Nell’esempio di seguito, manterremo inalterato lo scheletro del file di configurazione così come appare in Fedora, ma ne modificheremo le sezioni di inclusione di file di schema, il database che conterrà i dati LDAP e le Access Control List (ACL). Prima di procedere, è necessario scaricare lo schema che utilizzeremo nel server LDAP dal seguente link: pgp-keyserver.schema.

Il file pgp-keyserver.schema va copiato nella directory dove già si trovano gli schema files (/etc/openldap/schema) e successivamente incluso nel file di configurazione slapd.conf come segue:

include         /etc/openldap/schema/pgp-keyserver.schema 

Il passo successivo è impostare in slapd.conf il database del server LDAP, il suffisso dello schema LDAP e l’account di Management del server LDAP. Ad esempio, ammettiamo di avere il dominio “azienda.it”, definiremo il suffisso di LDAP come “dc=azienda, dc=it” e come account di management “cn=Manager,dc=azienda,dc=it” con password “password”:

database	bdb 
suffix	"dc=azienda,dc=it" 
rootdn	"cn=Manager,dc=azienda,dc=it" 
rootpw	password

La password specificata in “rootpw” e’ stata inserita in chiaro. In un ambiente di produzione è suggeribile usare una password protetta, che va generata con il comando slappasswd. L’output di questo comando (es: {SSHA}xxxxxxxxxx) va inserito nel campo “rootpw”. Inseriamo quindi gli indici appositi per il keyserver PGP come dall’esempio successivo:

index pgpCertID,pgpKeyID,pgpKeyType,pgpUserID,pgpKeyCreateTime sub,eq 
index pgpSignerID,pgpSubKeyID,pgpKeySize,pgpKeyExpireTime sub,eq 
index pgpDisabled,pgpRevoked eq 

Qualora sia già disponibile un LDAP con un database esistente, queste stesse vanno aggiunte a quelle indicate nel file di configurazione. Come accennato in precedenza, è suggeribile proteggere il database da scritture anonime impostando della ACL. Di default, infatti, un utente qualsiasi -senza registrarsi- può mandare le chiavi PGP. In un’azienda sarebbe preferibile controllare chi possa inviare le chiavi PGP nel keyserver. Un esempio potrebbe essere abilitare tutti gli utenti che abbiamo inserito nella Organizational Unit (OU) “Users”:

access to dn.subtree="ou=PGP Keys,dc=azienda,dc=it" 
	by dn.regex="cn=([^,]+),ou=Users,dc=azienda,dc=it" write 
	by * read 

Un altro esempio potrebbe essere l’abilitazione del Directory Manager o la persona che svolge la funzione di Security Officer ad inserire e modificare le chiavi:

access to dn.subtree="ou=PGP Keys,dc=azienda,dc=it" 
	by dn="cn=Manager,dc=azienda,dc=it" write
	by dn=”cn=Security Officer, ou=Users, dc=azienda, dc=it” write
	by * read

Ovviamente le Access Control List vanno adattate alle esigenze della propria azienda e non esiste una “ricetta magica” che vale per tutti. Continuando nel nostro setup, dobbiamo inizializare il database di OpenLDAP prima di avviare il server stesso. Utilizzeremo il comando slapadd che permette di inserire dati direttamente nel database berkley senza passare dal server. Di solito si inseriscono almeno due entries: una che caratterizza il Base DN (dc=azienda, dc=it) e una che caratterizza il Manager del database. Nell’esempio sottostante si riferiscono alle prime due entries. Le seconde due, invece, sono relative al keyserver PGP. Rispettivamente la prima è l’Organizational Unit che ospiterà le chiavi PGP, la seconda serve ai client GPG/PGP per ottenere informazioni sul keyserver stesso. Per comodità creeremo un file di appoggio /tmp/init.ldif che conterrà lo scheletro del database:

dn: dc=azienda,dc=it 
objectClass: dcObject 
objectClass: organization 
o: azienda
dc: azienda

dn: cn=Manager,dc=azienda,dc=it 
objectClass: organizationalRole 
cn: Manager 

dn: ou=PGP Keys,dc=azienda,dc=it
objectclass: organizationalUnit 
ou: PGP Keys 

dn: cn=PGPServerInfo,ou=PGP Keys,dc=azienda,dc=it
cn: PGPServerInfo 
objectclass: pgpserverinfo 
pgpSoftware: OpenLDAP 
pgpVersion: 2.2.29 
pgpBaseKeyspaceDN: ou=PGP Keys,dc=azienda,dc=it

A questo punto possiamo inizializzare il database con il comando slapadd -l /tmp/init.ldif. Il comando slapcat ci sarà utile per visualizzare le entries che abbiamo immesso e controllarne la correttezza. Possiamo avviare il servizio LDAP con il comando service ldap start. Guardiamo i messaggi di syslog nel file /var/log/messages per vedere se il servizio sia stato inizializzato correttamente. A questo proviamo il nostro nuvo server ldap, ad esempio con la query LDAP:

$ ldapsearch -h keyserver -b "dc=azienda,dc=it" -s sub -x -W -D "cn=Manager,dc=azienda,dc=it" objectclass=* 

Il risultato del comando visualizza il contenuto dell’intero database di slapd (objectClass=*), comando che ci potrà essere di aiuto in caso di troubleshooting. Il parametro -h determina il nome dell’host, -b il Base DN, -s indica lo scopo della ricerca (in questo caso è subtree, ovvero in tutta l’alberatura LDAP), -x è un autenticazione di tipo base, -W (maiuscolo!) indica che deve essere richiesta la password e infine -D indica l’utente con cui effettuare il collegamento

Invio delle chiavi PGP/GPG

Possiamo già provare a inviare le nostre chiavi PGP attraverso la riga di comando. Negli esempi successivi utilizzeremo il programma GnuPG, ma per differenti implementazioni di PGP è necessario consultare il manuale del proprio vendor. Da un utente proveremo quindi ad effettuare il comando:

$ gpg --keyserver ldap://keyserver --keyserver-option verbose \
--keyserver-option "binddn=cn=Manager,dc=azienda,dc=it"  \
--keyserver-option bindpw=password \
--send-keys ABCD1234

Il comando precedente indica di inviare la chiave PGP con l’identificativo “ABCD1234” collegandosi al keyserver LDAP “keyserver” utilizzando le credenziali LDAP di “cn=Manager,dc=azienda,dc=it” e la password password.

L’utilizzo della riga di comando potrebbe essere utile per l’invio delle chiavi da parte di una persona di fiducia (il “Security Officer”) che verifica la corrispondenza tra persona fisica e chiavi digitali.

Configurare il client

Una volta inviate le chiavi, possiamo configurare il client in modo che vada ad interagire con il nostro server LDAP in maniera automatica. Sulla riga di comando Linux, è sufficiente inserire le seguenti righe nel file ~/.gnupg/gpg.conf:

keyserver ldap://keyserver 
keyserver-options tls=try 
keyserver-options basedn="cn=PGPServerInfo,ou=PGP Keys,dc=garl,dc=it" 

Da un altro utente, una volta configurato il gpg.conf, possiamo provare a scaricare la chiave che abbiamo appena inviato. Assumendo che abbiamo inviato la chiave del sig. Mario Rossi con e-mail mario.rossi@azienda.it, eseguiremo il seguente comando:

$ gpg --search-keys mario.rossi@azienda.it
gpg: searching for "mario.rossi@azienda.it" from ldap server keyserver 
(1)     Mario Rossi <mario.rossi@azienda.it> 
          1024 bit RSA key ABCD1234, created: 2006-12-16 
Keys 1-1 of 1 for "mario.rossi@azienda.it".  Enter number(s), N)ext, or Q)uit > 1 
gpg: requesting key ABCD1234 from ldap server keyserver 
gpg: key ABCD1234: public key "Mario Rossi <mario.rossi@azienda.it>" imported 
gpg: Total number processed: 1 
gpg:               imported: 1  (RSA: 1)

Et voilà, il nostro nuovo keyserver è pronto. Adesso possiamo configurare Thunderbird o Microsoft Outlook con l’apposito plugin per poter utlizzare la crittografia delle e-mail, o utilizzare altri applicativi -come l’estensione per Windows Explorer- per criptare i files su disco. Vediamo qualche esempio su come configurare il nostro nuovo Keyserver su GNOME, Thunderbird e Windows (con WinPT). GNOME incorpora un’applicazione di gestione chiavi PGP e SSH, cui nome è Seahorse. Se installata, si presenta nel menù sotto “Accessories->Password and Ecnryption Keys”. Per configurare il nostro keyserver usare “Edit->Preferences” e nel tab “Key Servers” inserire il nuovo keyserver con il pulsante “Add” e poi selezionare “LDAP Key Server”, inserire il nome host (nel nostro caso “keyserver”) e la porta, ovvero 389 come in figura.

Thunderbird

Per configurare Thunderbird, è necessario scaricare il plugin Enigmail dal sito http://enigmail.mozdev.org ed installarlo come un normale add-on di Thunderbird. Questo add-on funziona sia con Linux, Windows, Mac e molte altre piattaforme, rappresentando un ottimo tool per la posta elettronica. Dal menù “OpenPGP->Preferences” selezioniamo la checkbox “Display Expert Settings”. Questa opzione abiliterà ulteriori tabs, tra cui anche il tab “Keyserver”. Inseriamo quindi il nostro server LDAP nella forma “ldap://keyserver” come da figura.

Possiamo ora provare a ricercare una chiave dal menù “OpenPGP->Key Management” e poi selezionando “Keyserver->Search for keys”. Un esempio di risultato di ricerca è presente in figura

Microsoft Windows e Outlook

L’ultimo esempio che voglio proporvi è quello reallizzato con gpg4win, un’ottima distribuzione di GPG per Windows, ma che ha una particolarità. Anche se il programma GPG per l’ambiente Windows funziona come l’analogo programma per Linux, l’applicativo WinPT -che funge da keymanager- non riesce a riconoscere in modo corretto le entries PGP nel nostro LDAP. E’ necessario aggiungere una entry in più nel nostro LDAP in caso si voglia interagire con l’ambiente WinPT. Utilizzeremo la stessa tecnica usata per inizializzare il server ldap, ovvero usando il comando slapadd. Fermiamo il servizio ldap con service ldap stop e creiamo un file temporaneo, es: /tmp/winpt.ldif. Lo popoliamo come segue:

dn: cn=PGPServerInfo,dc=azienda,dc=it
cn: PGPServerInfo 
objectclass: pgpserverinfo 
pgpSoftware: OpenLDAP 
pgpVersion: 2.2.29 
pgpBaseKeyspaceDN: ou=PGP Keys,dc=azienda,dc=it

Come potrete notare, si tratta dell’ultima entry immessa durante l’inizializzazione del database, senza l’Organizational Unit. Questo perchè WinPT fa la ricerca dell’objectclass pgpserverinfo solamente nel suffix (nel nostro caso dc=azienda,dc=it) e non effettua una ricerca nei sottoalberi di LDAP. Si inserisce nel database con il comando slapadd -l /tmp/winpt.ldif. Riavviamo il servizio LDAP con service ldap start e a questo punto possiamo configurare WinPT. Doppio click sull’icona nel tray di WinPT e selezionare la voce di Menù keyserver. Nella finestra di dialogo, tasto destro nell’elenco dei server e selezionare “Add”, “LDAP Keyserver”, hostname del keyserver (nel nostro caso keyserver) e porta 389. Il risultato è in figura.