Per installare OpenSSL, è necessario possedere:
Se si desidera semplicemente installare in modo standard, allora dovrebbero bastare i seguenti passi:
$ ./config
$ make
$ make test
$ make install
(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:
$ ./config --prefix=directory_prefisso --openssldir=directory_openssl
Ad esempio, per installare OpenSSL nella directory /usr/local/openssl si esegua:
$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl
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. |
1a. Configurare OpenSSL automaticamente per il sistema specifico:
$ ./config [options]
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:
$ ./config -d [options]
1b. Configurare OpenSSL manualmente
OpenSSL conosce diversi sistemi operativi, combinazioni hardware e compilatori. Per
vedere quali vengono supportate, eseguire
$ ./Configure
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:
$ ./Configure linux-elf [options]
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:
$ make
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:
$ make test
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
$ make install
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 |
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. |
Package builders che vogliono configurare le librerie per le locazioni standard, ma hanno il package installato altrove, possono usare
$ make INSTALL_PREFIX=/tmp/package-root install
(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
#include <openssl/ssl.h>
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.
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
-I/usr/local/ssl/include/openssl
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:
-mkdir incl
cd $(OPENSSLDIR)
#Controlla se la directory esiste realmente
-ln -s `cd $(OPENSSLDIR); pwd`/include incl/openssl
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>.
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).
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
openssl req
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.
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.