3 Installazione e Configurazione di OpenSSL

3.1 Installazione su piattaforme Unix

Per installare OpenSSL, è necessario possedere:

3.1.1 Quick Start

Se si desidera semplicemente installare in modo standard, allora dovrebbero bastare i seguenti passi:

(Se qualcuno di questi passi fallisce, vedere la sezione Installazione in Dettaglio ). In questo modo verrà costruito ed installato OpenSSL nella locazione di default, che (per ragioni storiche) è posizionata in /usr/local/ssl. Se si desidera installare OpenSSL altrove, allora si può eseguire config nel modo seguente:

Ad esempio, per installare OpenSSL nella directory /usr/local/openssl si esegua:

3.1.2 Opzioni di Configurazione

Il comando ./config (o ./Configure) possiede diverse opzioni di configurazione che servono a personalizzare la costruzione di OpenSSL. Tali opzioni sono mostrate nella Tabella 3.1 seguente.

Opzione

Descrizione

--prefix=DIR

Esegue l'installazione in DIR/bin, DIR/lib, DIR/include/openssl. I file per la configurazione usati da OpenSSL saranno posti in DIR/ssl o nella directory specificata dall'opzione --openssldir.

--openssldir=DIR

Directory per i file di OpenSSL. Se non viene specificato un prefisso, i files di libreria ed i binari saranno anch'essi installati in questa directory.

rsaref

Effettua la costruzione usando il RSADSI's RSAREF toolkit (assumendo che librsaref.a si trova nel percorso di ricerca delle librerie).

no-threads

Non tenta di costruire con supporto per applicazioni multi-thread

threads

Costruisce col supporto per applicazioni multi-thread. Cio' di solito richiede alcune opzioni addizionali system-dependent! Per maggior dettaglio, vedi "Note sul multi-threading".

no-asm

Non usa codice assembler.

386

Usa solo il set di istruzioni di 80386 (il codice di default x86 e' più efficiente, ma richiede almeno un 486).

no-<cipher>

Costruisce senza i Cifrari specificati (bf, cast, des, dh, dsa, hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha). La directory crypto/<cipher> può essere rimossa dopo l'esecuzione di "make depend".

-Dxxx, -lxxx, -Lxxx, -fxxx, -Kxxx

Queste opzioni per sistemi specifici possono essere passate al compilatore per consentire di definire simboli per il preprocessore, librerie specifiche addizionali, directory di librerie o altre opzioni di compilazione.

Tabella 3.1: Opzioni di Configurazione del comando ./config

3.1.3 Installazione in Dettaglio

1a. Configurare OpenSSL automaticamente per il sistema specifico:

Questo comando interroga il sistema operativo (ed il compilatore, se necessario) e configura OpenSSL basandosi sulle risposte ottenute. Per verificare se i rilevamenti vengono fatti correttamente, utilizzare ./config -t. Se si desidera usare un compilatore differente, se si sta eseguendo una compilazione incrociata da un'altra piattaforma o se le risposte di ./config sono sbagliate per qualche altro motivo, andare al passo 1b. Altrimenti proseguire al passo 2. Su alcuni sistemi e' possibile includere informazioni di debugging come segue:

1b. Configurare OpenSSL manualmente
OpenSSL conosce diversi sistemi operativi, combinazioni hardware e compilatori. Per vedere quali vengono supportate, eseguire

Prelevare un nome disponibile nella lista che corrisponde al sistema a disposizione. Per molti sistemi operativi esistono due diverse scelte che permettono di usare o "cc" o "gcc".
Una volta identificato il sistema (e se necessario il compilatore) usare il nome corrispondente come argomento per ./Configure. Per esempio, un utente "linux-elf" dovrebbe eseguire:

Se il sistema desiderato non e' disponibile, e' possibile modificare il programma Configure per aggiungere la configurazione corretta per il vostro sistema. Le configurazioni generiche "cc" e "gcc" lavorano normalmente su sistemi a 32 bit.
Configure crea il file Makefile.ssl da Makefile.org e definisce varie macro in crypto/opensslconf.h (generate da crypto/opensslconf.h.in).

2. Costruire OpenSSL eseguendo:

In tal modo verranno costruite le librerie OpenSSL (libcrypto.a e libssl.a) ed i binari OpenSSL ("openssl"). Le librerie saranno costruite nella top-level directory, mentre i binari saranno posti nella directory "apps".
Se "make" fallisce, si prega di riportare i problemi a <openssl-bugs@openssl.org> (si noti che il messaggio sara' pubblicato in una mailing list pubblica). Si prega di inserire nel messaggio anche l'output di "make report".
Se si e' avuto un errore assembler, tentare prima con l'opzione di configurazione "no-asm".
Su alcuni sistemi, compilando parti di OpenSSL congcc o altri compilatori di sistema si potrebbero avere dei simboli non risolti.

3. Dopo una costruzione con successo, testare le librerie. Eseguire:

Se un test fallisce riprovare rimuovendo tutti i flag di ottimizzazione del compilatore dalla riga CFLAGS di Makefile.ssl ed eseguire "make clean; make". Si prega di inviare eventuali bugs report a <openssl-bugs@openssl.org>, inserendo anche l'output di "make report".

4. Se tutti i test vengono eseguiti correttamente, installare OpenSSL con

Questo creerà la directory di installazione (se non esiste) e poi alcune subdirectory indicate nella Tabella 3.2.

Directory

Descrizione

certs

Inizialmente vuota, e' la directory di default per i files di certificato.

man/man1

Pagine del manuale per il comando 'openssl'.

man/man3

Pagine del manuale per le librerie (molto incomplete).

misc

Vari script.

private

Inizialmente vuota, e' la directrory di default per i files di chiavi private

Tabella 3.2: Subdirectory create nell'installazione

Se non e' stato scelto un prefisso di installazione differente, saranno anche create le subdirectory addizionali mostrate nella Tabella 3.3.

Directory

Descrizione

bin

Contiene i binari di OpenSSl ed alcuni altri programmi di utilita'.

include/openssl

Contiene gli header files necessari per compilare i programmi con libcrypto o libssl.

lib

Contiene i files di libreria di OpenSSL.

Tabella 3.3: Subdirectory addizionali create nell’installazione

Package builders che vogliono configurare le librerie per le locazioni standard, ma hanno il package installato altrove, possono usare

(o specificare "--install_prefix=/tmp/package-root" come opzione di configurazione). Il prefisso specificato sara' aggiunto davanti ad ogni nome di file.

NOTA: Gli header file sono stati attualmente spostati in include/openssl in modo che OpenSSL possa coesistere con altre librerie che usano gli stessi filename. Cio' significa che applicazioni che usano OpenSSL dovrebbero ora usare direttive al preprocessore C della forma

invece di "#include <ssl.h>", che era usato con versioni di libreria precedenti ad OpenSSL 0.9.2b.
Se si desidera installare una nuova versione di OpenSSL su vecchie versioni delle librerie, bisogna eliminare i vecchi header files dalla directory include.

3.1.4 Problemi di compatibilità

1) COMPILARE applicazioni esistenti
Per compilare un'applicazione che usa i vecchi filenames - cioe' "#include <ssl.h>" -, dovrebbe normalmente bastare trovare la definizione di CFLAGS nel Makefile dell'applicazione ed aggiungere un'opzione C come

senza cancellare l'opzione -I esistente, altrimenti gli header files di OpenSSL non potrebbero includerne altri.

2) SCRIVERE applicazioni
Per scrivere un'applicazione che sia capace di gestire sia le nuove che le vecchie directory, in modo che esse possano ancora essere compilate con versioni di OpenSSL precedenti alla 0.9.2b, si proceda come segue:

Con queste aggiunte, gli header file di OpenSSL saranno disponibili con entrambe le varianti di nomi se viene usata una vecchia versione della libreria: le applicazioni possono trovarli sotto nomi come <openssl/foo.h>, mentre gli header file saranno ancora in grado di includerne altri con nomi della forma <foo.h>.

3.1.5 Nota sul multi-threading

Per alcuni sistemi, lo script Configure di OpenSSL sa quali opzioni sono necessarie al compilatore per generare una libreria che sia utilizzabile per applicazioni multi-thread. Su tali sistemi, il supporto al multi-threading è abilitato per default; per disabilitarlo utilizzare l'opzione "no-threads" (ciò non dovrebbe essere mai necessario).
Su altri sistemi, per abilitare il supporto per il multi-threading, bisogna specificare almeno due opzioni: "threads", ed una opzione dipendente dal sistema (ad esempio, su vari sistemi questa seconda opzione è "-D_REENTRANT"). In questo caso, ovviamente, il default è di non supportare il multi-threading (anche se si può usare "no-threads" per evitare un eventuale messaggio di warning da parte dello script Configure).

3.2 Configurazione

La configurazione di OpenSSL si attua normalmente attraverso il file openssl.cnf, che potrebbe trovarsi collocato nella directory /etc/ssl/.
Osservandone il contenuto, si intuisce che il simbolo # serve a introdurre un commento, fino alla fine della riga relativa; inoltre si comprende che le righe vuote e quelle bianche vengono ignorate come i commenti; infine, si vede che le direttive del file sono degli assegnamenti a variabili, che se necessario si espandono con il prefisso $, e che le direttive sono raggruppate in sezioni individuabili da un titolo tra parentesi quadre.
È importante osservare che le sezioni sono organizzate in modo gerarchico, a partire dai nomi dei comandi di OpenSSL.
In pratica, per il comando

si prende in considerazione la sezione [ req ], che poi può a sua volta richiamare altre sottosezioni.
Dal momento che è già stato mostrato in che modo si ottiene una richiesta di certificato, attraverso il comando openssl req, vale la pena di dare un'occhiata a un estratto della configurazione relativa, mostrata in Figura 3.1, per comprendere un po' meglio come leggere questo file.

È importante osservare che alcune variabili vengono assegnate con il nome di una sottosezione; in questo caso si tratta in particolare di distinguished_name a cui viene attribuita la sottosezione [ req_distinguished_name ], all'interno della quale vengono definite le informazioni che sono richieste in fase di costruzione del certificato.
Nelle prossime sezioni verrà mostrato come simulare la gestione di un'autorità di certificazione attraverso OpenSSL.
Il file di configurazione standard dovrebbe essere neutro rispetto a questo problema, incorporando una sezione [ ca ] particolare, utile per fare delle prove, come mostrato nella Figura 3.2:

È importante osservare che la sezione [ ca ] contiene una sola direttiva, default_ca, con la quale si specifica la sottosezione da prendere in considerazione.
In questo caso, la sottosezione è denominata [ CA_default ], e viene mostrata solo in parte. Si intende che, volendo fare le cose sul serio, è sufficiente ricopiare la sottosezione [ CA_default ], anche più volte, attribuendole nomi differenti, ed eventualmente modificare la direttiva default_ca in modo da selezionare la sottosezione preferita.
Per il momento è bene osservare che con la direttiva dir viene definita una variabile, che poi viene presa in considerazione di nuovo, espandendola con l'aggiunta del prefisso $ ($dir), nei valori da assegnare ad altre variabili.
Questa variabile serve a definire la directory di partenza a partire dalla quale vanno collocati una serie di file che riguardano l'amministrazione dell'autorità di certificazione.
Inizialmente, viene indicata una directory che appare volutamente improbabile, ./demoCA/, proprio per fare capire che prima di lavorare sul serio, occorre pensarci bene e mettere mano alla configurazione.
Comunque, per le simulazioni che si vogliono mostrare, vale la pena di creare le directory ./demoCA/certs/, ./demoCA/newcerts/, ./demoCA/crl/ e ./demoCA/private/, o altre directory equivalenti in base alla propria configurazione effettiva.

3.2.1 Policy dell'autorità di certificazione

Nella sezione che descrive il funzionamento del comando openssl ca, deve apparire anche l'indicazione del tipo di policy che l'autorità di certificazione intende attuare per rilasciare i certificati.
Naturalmente, quello che può essere definito qui è solo qualche aspetto che riguarda la definizione del nome distintivo del titolare.
Quello che segue è un altro estratto del file di configurazione in cui si vede l'assegnamento del nome di una sottosezione alla variabile policy, come mostrato nella Figura 3.3.

In questo caso, la sottosezione [ policy_match ] specifica che i campi del paese, della regione, e dell'organizzazione, devono corrispondere con gli stessi dati del certificato della stessa autorità di certificazione.
In pratica, questo servirebbe a limitare l'accesso all'autorità soltanto a chi appartiene alla stessa area e anche alla stessa organizzazione (ciò fa pensare a un'autorità di certificazione aziendale, competente solo nell'ambito della propria azienda).
Per il resto, solo il campo CN deve essere fornito, mentre gli altri sono facoltativi.
Sotto alla sottosezione appena descritta, appare anche un'altra sottosezione simile, con il nome [ policy_anything ], in cui verrebbe concesso quasi tutto, a parte l'obbligo di fornire il CN.