OpenSSL è una libreria crittografica open-source che include una varietà di comandi utilizzati nel Protocollo TLS e Infrastruttura a Chiave Pubblica. OpenSSL è stato rilasciato nel 1998 ed è disponibile per i sistemi Windows, Linux, macOS e BSD. Il comando OpenSSL ti aiuterà a eseguire varie attività, tra cui la richiesta di firma del certificato (CSR), la generazione di chiavi private e la certificazione SSL.
OpenSSL è importante perché garantisce una corretta implementazione di SSL. Ottenere l'SSL nel modo giusto è fondamentale per la sicurezza del tuo sito web. Inoltre, Google, che è uno dei principali motori di ricerca, dà la priorità ai siti web con certificati SSL implementati. Alcuni browser come Chrome e Firefox potrebbero contrassegnare il tuo sito web come Non Sicuro se non disponi di un certificato SSL adeguato. Pertanto, è di fondamentale importanza instradare il traffico del tuo sito web tramite il protocollo crittografato HTTPS.
Come prima cosa
Questo tutorial è una guida in stile cheat sheet, che include alcuni ma probabilmente non tutti i comandi OpenSSL che potresti utilizzare negli scenari quotidiani.
La prima parte spiega tutto ciò che c'è da sapere su Richieste di Firma del Certificato (CSR). Tuttavia, se hai già familiarità con l'argomento, puoi passare a qualsiasi altra sezione pertinente a ciò che stai cercando di ottenere. Ogni sezione contiene uno snippet da riga di comando per realizzare ciò che indica il sottotitolo.
Cominciamo!
Sezione 1: Comprendere le Richieste di Firma del Certificato (CSR)
Una richiesta di firma del certificato è un prerequisito per ottenere un certificato SSL da un'autorità di certificazione (CA). La CSR include la chiave pubblica di una coppia di chiavi e alcune informazioni aggiuntive. È necessario inserirle nel certificato durante il processo di firma.
Durante la generazione della CSR, viene richiesto di fornire informazioni identificative note come Distinguished Name (DN). Il DN contiene campi necessari per il certificato come il Common Name (CN), che è l'esatto Fully Qualified Domain Name (FQDN) dell'host che utilizzerà il certificato. Gli altri campi del DN servono per informazioni aggiuntive come paese, stato, località e nome dell'organizzazione o dell'azienda se si stanno generando certificati specifici per la propria attività. È possibile scegliere di saltare le richieste fornendo le informazioni da un file o tramite la riga di comando.
Dai un'occhiata a un esempio di richiesta di informazioni CSR nello screenshot qui sotto:
|
1 2 3 4 5 6 7 |
Paese Nome (2 lettera codice) [AU]:CH Stato o Provincia Nome (completo nome) [Some-State]:Zürich Località Nome (es, città) []:Old Town Organizzazione Nome (es, società) [Internet Widgits Pty Ltd]:Example Cloudsigma Azienda Organizzativa Unità Nome (es, sezione) []:Cloud Technology Common Name (e.g. server FQDN o TUO nome) []:cloudsigma.com Indirizzo Email []:info@cloudsigma.com |
È possibile fornire le informazioni in un comando a riga singola per evitare le richieste aggiungendo il flag -subj come mostrato di seguito e fornendo le informazioni per i campi:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Il comando sopra accetta le stesse informazioni visualizzate nell'esempio del blocco di codice delle richieste di informazioni CSR.
Sezione 2: Generazione delle Richieste di Firma del Certificato
In questa sezione, tratteremo i comandi OpenSSL che puoi utilizzare per generare CSR e chiavi private. Le CSR sono necessarie per richiedere certificati SSL a un'Autorità di Certificazione (CA).
Generazione di una Chiave Privata e di una Richiesta di Firma del Certificato
Puoi utilizzare questo metodo se desideri che un'Autorità di Certificazione rilasci un certificato SSL per proteggere il tuo Apache o Nginx server per servire il traffico su HTTPS, ovvero HTTP con TLS. La CSR generata con il comando può essere inviata a una CA per richiedere un certificato SSL firmato da una CA. Puoi seguire le nostre guide dettagliate su come configurare i tuoi Apache o Nginx server su Ubuntu.
Inserisci il seguente comando nel tuo terminale per generare una chiave privata a 2048 bit (domain.key) e una CSR (domain.csr) da zero:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Rispondi alle richieste con le tue informazioni CSR specifiche. Facoltativamente, puoi aggiungere il flag -subj al comando per evitare le richieste:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Il -newkey rsa:2048 flag specifica che la chiave deve essere generata utilizzando l'algoritmo RSA a 2048 bit. Il -nodes flag indica che non c'è crittografia della passphrase per la chiave privata. C'è un'opzione -new non inclusa ma implicita per indicare che viene generata una nuova CSR.
Generazione di una Certificate Signing Request da una chiave privata esistente
Se hai già una chiave privata, puoi utilizzare questo metodo per generare una CSR. La utilizzerai quindi per richiedere un certificato SSL a una CA. Inserisci il seguente comando per generare una nuova CSR (domain.csr) utilizzando una chiave privata esistente (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Rispondi alle richieste con le tue informazioni CSR specifiche. Facoltativamente, puoi aggiungere il -subj flag al comando per evitare le richieste:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Il flag -key specifica la chiave privata esistente (domain.key) da utilizzare per generare una nuova CSR. Il -new flag indica che si sta generando una nuova CSR.
Generazione di una Certificate Signing Request da un certificato e una chiave privata esistenti
Se hai già un certificato esistente che desideri utilizzare per generare una CSR, puoi utilizzare questo metodo. Questo metodo può essere utile se tu o la tua CA perdete la CSR originale e hai bisogno di generarla utilizzando le informazioni CSR inserite in precedenza senza doverle reinserire. Il comando estrae le informazioni dal certificato esistente. Inserisci il seguente comando nel tuo terminale per creare una nuova CSR (domain.csr) utilizzando un certificato esistente (domain.crt) e una chiave privata esistente (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
L'opzione -x509toreq indica che si sta utilizzando il certificato X509 per generare la CSR.
Sezione 3: Generazione di certificati SSL
In alcune situazioni, potresti voler utilizzare un certificato SSL senza il fastidio di ottenere un certificato firmato da una CA. Questa sezione spiega come puoi firmare i tuoi certificati. È valido e gratuito. Questi certificati sono definiti certificati autofirmati, e sono piuttosto comuni.
Un certificato autofirmato è firmato con la propria chiave privata. Sia i certificati autofirmati che quelli firmati da una CA funzionano altrettanto bene per crittografare i dati e il traffico del sito web. Tuttavia, con i certificati autofirmati, gli utenti di solito ricevono un avviso nei loro browser che il certificato non è attendibile. Pertanto, puoi utilizzare certificati autofirmati per siti web che non scambiano informazioni sensibili con gli utenti o su server non di produzione. Di seguito, puoi trovare i comandi OpenSSL che puoi utilizzare per generare certificati autofirmati.
- Generazione di un certificato autofirmato
È possibile utilizzare questo metodo per generare un certificato SSL per proteggere il server Apache o Nginx. Ciò garantirà che il traffico avvenga tramite HTTPS, o HTTP su TLS, senza rivolgersi a una CA per la firma del certificato:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Rispondi alle richieste con le informazioni specifiche del tuo CSR. Facoltativamente, puoi aggiungere il flag -subj al comando per evitare le richieste:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Il -x509 flag indica la creazione di un certificato autofirmato. L'opzione -days 365 specifica il numero di giorni di validità del certificato. In questo caso, è di 365 giorni. È anche possibile scegliere un numero diverso di giorni. Il comando genera un CSR temporaneo per contenere le informazioni da associare al certificato.
- Generazione di un certificato autofirmato da una chiave privata esistente
Questo metodo ti aiuterà a generare un certificato autofirmato a partire dalla tua chiave privata già esistente. Inserisci il seguente comando per generare un certificato autofirmato (domain.crt) utilizzando una chiave privata esistente (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Fornisci alle richieste le informazioni specifiche del tuo CSR. Facoltativamente, puoi aggiungere il flag -subj al comando per evitare le richieste:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Il -x509 flag indica la creazione di un certificato autofirmato. L'opzione -days 365 specifica il numero di giorni di validità del certificato. In questo caso è di 365 giorni. È anche possibile scegliere un numero diverso di giorni. L'opzione -new avvia la richiesta di informazioni del CSR.
Sezione 4: Visualizzazione dei certificati
I certificati e i file CSR sono codificati e memorizzati con l'estensione .pem. Significa Privacy-Enhanced Mail. È un formato di file per memorizzare e inviare chiavi crittografiche, certificati e altri dati cruciali. I file PEM non sono facilmente leggibili dagli esseri umani. In questa sezione troverai i comandi che puoi utilizzare per visualizzare le voci dei file PEM codificati.
- Visualizzazione dei file CSR
Inserisci il seguente comando per visualizzare e verificare il contenuto di un CSR (domain.csr) sul tuo terminale:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Ad esempio, il comando precedente potrebbe produrre un output simile a questo:

- Visualizzazione delle voci del certificato
Inserisci il seguente comando per visualizzare il contenuto di un certificato (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Il comando precedente potrebbe produrre un output simile a questo:

- Verifica che un certificato sia stato firmato da un'Autorità di Certificazione
Per verificare se un certificato (domain.crt) è stato firmato da un determinato certificato CA (ca.crt), inserisci il seguente comando:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Sezione 5: Chiavi private
Se stai cercando i comandi OpenSSL necessari per creare e verificare le chiavi private, questa sezione fa al caso tuo.
- Creazione di una chiave privata
Per creare una chiave privata a 2048 bit protetta da password (domain.key), inserisci il seguente comando nel tuo terminale:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Il comando ti chiederà una password per completare il processo. Guarda lo screenshot qui sotto:

- Verifica di una chiave privata
Per verificare la validità di una chiave privata (domain.key), inserisci il seguente comando nel tuo terminale:
|
1 |
openssl rsa -check -in dominio.chiave |
Successivamente, dovrai fornire una password. Se la chiave privata è crittografata e inserisci la passphrase corretta, la chiave non crittografata verrà visualizzata sul terminale. Vedi lo screenshot qui sotto:

- Verificare che una chiave privata corrisponda a un certificato e a una CSR
Se desideri verificare se una chiave privata (domain.key) corrisponde a un certificato (domain.crt) e a una CSR (domain.csr), inserisci i seguenti comandi nel tuo terminale:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
Se noti che l'output dei comandi sopra indicati è identico, allora è possibile che la chiave privata, il certificato e la CSR siano correlati.
- Crittografare una chiave privata
Se hai una chiave privata non crittografata (unencrypted.key) e desideri ottenere la versione crittografata della chiave (encrypted.key), inserisci il seguente comando nel tuo terminale:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
Il comando ti chiederà una passphrase per crittografare la chiave privata.
- Decrittografare una chiave privata
Se hai una chiave privata crittografata (encrypted.key) e desideri ottenere la sua versione decrittografata (decrypted.key), inserisci il seguente comando nel tuo terminale:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
Il comando ti chiederà una passphrase per la chiave crittografata. Se inserisci la passphrase corretta, verrà decrittografata. L'output andrà in decrypted.key.
Sezione 6: Conversione dei formati dei certificati
Potresti notare che finora abbiamo lavorato con certificati X.509 codificati in ASCII PEM. Sebbene questo vada bene, esiste una varietà di altri tipi di codifica e contenitori di certificati che puoi utilizzare. In alcune applicazioni, potresti preferire l'uso di determinati formati rispetto ad altri. Inoltre, alcuni formati diversi possono contenere più elementi come una chiave privata, una CSR e un certificato firmato da una CA in un unico file. Puoi anche utilizzare OpenSSL per convertire tra vari formati di certificato. Continua a leggere per alcuni dei comandi OpenSSL per la conversione del formato dei certificati.
- Conversione da PEM a DER
DER (Distinguished Encoding Rules) è una codifica binaria per i certificati X.509 e le chiavi private. Per convertire un certificato codificato in PEM (domain.crt) in un certificato codificato in DER (domain.der), inserisci il seguente comando:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
Troverai la maggior parte dei casi d'uso del formato di codifica DER nel linguaggio di programmazione Java. Segui questo tutorial per una rapida configurazione di Java sul tuo server Ubuntu.
- Conversione da DER a PEM
Per convertire un certificato codificato in DER (domain.der) in un certificato PEM (domain.crt), inserisci il seguente comando:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- Conversione da PEM a PKCS7
Potresti voler aggiungere certificati PEM, ad esempio, domain.crt e ca-chain.crt a un file PKCS7 (domain.p7b). Ecco il comando per ottenere questo risultato:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
Puoi utilizzare l'opzione -certfile più volte per specificare i certificati da aggiungere al file PKCS7. I file PKCS7 sono rilevanti soprattutto per i keystore Java e Microsoft IIS. Conosciuti anche come file P7B, sono file ASCII che possono comprendere certificati e certificati firmati da CA.
- Convertire PKCS7 in PEM
Per convertire un file PKCS7 (domain.p7b) in un file codificato in PEM (domain.crt), inserisci il seguente comando nel tuo terminale:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- Conversione da PEM a PKCS12
Per combinare una chiave privata (domain.key) e un certificato (domain.crt) in un PKCS12 file (domain.pfx), inserisci il seguente comando:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
Il comando ti chiederà di inserire le password di esportazione, che puoi facoltativamente lasciare vuote. Puoi concatenare molti certificati al file PKCS12 unendo i certificati in un unico file PEM (domain.crt). PKCS12 è noto anche come PFX ed è utilizzato principalmente in Microsoft IIS.
- Convertire PKCS12 in PEM
Per convertire un file PKCS12 (domain.pfx) in un formato codificato PEM (domain.combined.crt), inserisci il seguente comando:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
Il file PEM creato dal comando precedente contiene tutti i molteplici elementi contenuti nel PKCS12.
Sezione 7: Verifica della versione di OpenSSL
La versione di qualsiasi software in esecuzione può influire sulle funzionalità delle applicazioni in uso. Pertanto, è necessario accertare la versione. Lo stesso vale per OpenSSL. Alcune opzioni della riga di comando potrebbero mancare in una versione ed essere disponibili in un'altra. Per visualizzare la versione di OpenSSL in esecuzione, inserisci il seguente comando:
|
1 |
openssl version -a |
Di seguito è riportato l'output ottenuto eseguendo il comando precedente durante la creazione di questo tutorial:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dic 2020 compilato il: Sab Dic 19 15:39:47 2020 UTC piattaforma: linux-x86_64 opzioni: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compilatore: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Seeding sorgente: os-specifico |
Di seguito puoi trovare lo screenshot effettivo:

Conclusione
In questo tutorial abbiamo spiegato cos'è OpenSSL, abbiamo trattato le richieste di firma dei certificati (CSR) e alcuni dei comandi OpenSSL fondamentali che puoi utilizzare nel tuo ambiente server.
Ci sfugge un comando fondamentale o hai problemi con qualcuno dei comandi nella configurazione del tuo server su CloudSigma? Non esitare a contattare il nostro team di supporto clienti 24/7 in chat in tempo reale per parlarne.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.