Il sito dedicato all'informatica ideato da Iasparra Francesco
openssl req Gestione delle richieste di certificazione. openssl ca Gestione relativa all'autorità di certificazione. openssl crl Gestione del certificato delle revoche. openssl genrsa Generazione di parametri RSA. openssl rsa Conversione del formato di una chiave privata o di un certificato. openssl x509 Gestione dei dati dei certificati X.509.
Ottenere le rispettive guide dei comandi:
openssl req -h > guida.txt openssl crl -h >> guida.txt openssl ca -h >> guida.txt openssl genrsa -h >> guida.txt openssl x509 -h >> guida.txt
Alcune opzioni frequenti nei comandi:
-in file Definisce un file in ingresso adatto al contesto. -out file Definisce un file in uscita adatto al contesto. -noout Non emette il risultato. -text Emette le informazioni in forma di testo leggibile. -hash Emette il codice di controllo relativo al contesto. -inform formato Specifica il formato dei dati in ingresso. -outform formato Specifica il formato dei dati in uscita.
Verificare un certificato:
openssl verify cert.pem
Verificare la corrispondenza tra certificato / chiave privata / CSR:
openssl x509 -noout -modulus -in certificate.crt | openssl md5 openssl rsa -noout -modulus -in privateKey.key | openssl md5 openssl req -noout -modulus -in CSR.csr | openssl md5
Il file openssl.cnf, che si trova nella directory /etc/ssl/ contiene la configurazione di openssl.
E' 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.
Per la configurazione della CA e' contenuta nella sezione [ ca ] che 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 ].
Esempio:[ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = ./demoCA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# The private key RANDFILE = $dir/private/.rand # private random number file
E' 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.
Creazione
La creazione di un'autorità di certificazione autonoma, ovvero di un'autorità principale (root), che non abbia ottenuto a sua volta un certificato da un'autorità di livello superiore, deve realizzare la sua chiave privata e il suo certificato auto-firmato. Diversamente, se dipendesse dalla certificazione di un'altra autorità, dovrebbe predisporre la propria richiesta, sottoporla all'autorità superiore da cui dovrebbe ottenere il certificato.
openssl genrsa -des3 -out ./demoCA/private/cakey.pem openssl req -new -x509 -days 730 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
Il certificato appena creato, in quanto tale, va conservato anche nella directory destinata a contenere la copia di quelli rilasciati in futuro in qualità di autorità di certificazione.
Dal pezzo di configurazione mostrato in precedenza, la directory in questione è ./demoCA/certs/. Questi file devono avere un nome che inizia con il loro numero di serie; dal momento che il numero del certificato dell'autorità stessa è il numero zero, il file deve chiamarsi obbligatoriamente ./demoCA/certs/00.pem:
cp ./demoCA/cacert.pem ./demoCA/certs/00.pem
Inoltre, i file in quella directory devono essere abbinati, ognuno, a un collegamento simbolico che esprime il codice di controllo del file stesso, più l'estensione .0:
cd ./demoCA/certs[Invio] ln -s 00.pem `openssl x509 -hash -noout -in 00.pem`.0