OpenSSL

Da Andreabont's Wiki.
Versione del 18 lug 2020 alle 09:42 di Andreabont (Discussione | contributi) (= Estrazione con verifica)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Cifratura simmetrica

Per questa operazione usiamo la funzione enc.

  • Il parametro nosalt serve a impedere a openssl di usare un salt per la cifratura, è sconsigliabile toglierlo.
  • Il parametro base64 serve a gestire in output e in input dati codificati in base64.
  • Il parametro k serve a specificare la password di cifratura, se omesso la password sarà chiesta su standard input.
  • I parametri in e out servono a specificare i file di ingresso e di uscita, se omessi openssl leggerà rispettivamente da standard input e da standard output.
  • Il parametro aes-256-cbc indica solo uno degli algoritmi usabili, è possibile avere una lista completa tramite il comando:
openssl list-cipher-algorithms

Cifrare

openssl enc -e -aes-256-cbc [-nosalt] [-base64] [-k <password>] [-in <file>] [-out <file>]

Decifrare

openssl enc -d -aes-256-cbc [-nosalt] [-base64] [-k <password>] [-in <file>] [-out <file>]

Generazione di una coppia di chiavi asimmetriche

Nella crittografia asimmetrica è necessario avere due chiavi collegate tra di loro, quella pubblica e quella privata.

Generazione della chiave privata

Per questa operazione usiamo l'opzione genpkey.

openssl genpkey -algorithm <RSA|DSA|EC> -outform <DER|PEM> [-pkeyopt <param:value>] [-out <file>]

Lettura della chiave privata

Per questa funzione dobbiamo usare le opzioni rsa, dsa e ec in base al tipo di chiave privata a disposizione.

openssl <rsa|dsa|ec> -in <file> -text

Estrazione della chiave pubblica

Per questa funzione dobbiamo usare le opzioni rsa, dsa e ec in base al tipo di chiave privata a disposizione.

openssl <rsa|dsa|ec> -in <file> -pubout -outform <DER|PEM> [-out <file>]

Utilizzo delle chiavi asimmetriche

Per questa operazione usiamo la funzione pkeyutl.

Firma di un file

openssl pkeyutl -in <file> -sign -inkey <chiave_privata> [-out <file>]

Verifica della firma di un file

openssl pkeyutl -in <file> -verify -sigfile <firma_file> -inkey <chiave_privata>         # Verifica tramite chiave privata
openssl pkeyutl -in <file> -verify -sigfile <firma_file> -pubin -inkey <chiave_pubblica> # Verifica tramite chiave pubblica

Cifratura di un file

openssl pkeyutl -in <file> -encrypt -inkey <chiave_privata> [-out <file>]         # Cifratura tramite chiave privata
openssl pkeyutl -in <file> -encrypt -pubin -inkey <chiave_pubblica> [-out <file>] # Cifratura tramite chiave pubblica

Decifratura di un file

openssl pkeyutl -in <file> -dencrypt -inkey <chiave_privata> [-out <file>]

Gestione dei certificati

Un certificato è una entità digitale contenente una chiave pubblica e varie informazioni addizionali firmata da una chiave terza che ne garantisce l'autenticità.

Creazione di una richiesta di firma (CSR)

Per questa operazione usiamo la funzione req. Per generare un certificato è necessario creare un file CSR (Certificate Signing Request) che rappresenta la richiesta di ottenimento del certificato, l'ente terzo andrà a firmare il CSR generando il certificato. Nella creazione del CSR saranno chieste alcune informazioni che saranno contenute nel certificato finale.

openssl req -new -key <chiave_privata> [-out <file_csr>]

E' possibile visionare il file CSR attraverso il comando:

openssl req -text -in <file_csr>

Creazione del certificato partendo dal CSR

Per questa operazione usiamo la funzione x509. Da notare che la chiave privata che usiamo per firmare il CSR dovrebbe essere di una terza parte fidata, se fosse la stessa chiave privata usata per generare il CSR otterremmo un certificato auto-firmato. Il certificato ha una validità temporale specificata in giorni.

openssl x509 -in <csr> -req -days <giorni> -signkey <chiave_privata> [-outform <PEM|DER>] [-out <file>] # Da sola chiave privata
openssl x509 -in <csr> -req -days <giorni> -CA <cert_ca> -CAkey <privata_ca> -CAcreateserial [-outform <PEM|DER>] [-out <file>] # Da certificato CA

E' possibile visionare il certificato creato con:

openssl x509 -text -in <file_certificato>

Gestione file P7M

Estrazione con verifica

openssl smime -CAfile <file_certificato_ca> -inform DER -in <file.p7m> -verify -out <file>

Estrazione del certificato

openssl pkcs7 -inform DER -in <file.p7m> -print_certs -out <file.pem>