Introduzione
OpenSSL è uno strumento versatile da riga di comando che può essere utilizzato per una vasta gamma di compiti legati all’Infrastruttura Chiave Pubblica (PKI) e a HTTPS (HTTP su TLS). Questa guida in stile elenco di cheat sheet fornisce un riferimento rapido ai comandi OpenSSL che sono utili in scenari comuni e quotidiani. Ciò include esempi di OpenSSL per la generazione di chiavi private, richieste di firma di certificati e conversione di formati di certificati. Non copre tutti gli utilizzi di OpenSSL.
Come Utilizzare Questa Guida:
- Se non sei familiare con le richieste di firma di certificati (CSRs), leggi la prima sezione
- Oltre alla prima sezione, questa guida è in formato cheat sheet: un elenco di frammenti di comando autocontenuti
- Vai direttamente alla sezione che è pertinente per il compito che stai cercando di completare (Suggerimento: usa il menu Contenuti o la funzione Trova del tuo browser)
- La maggior parte dei comandi sono one-liner che sono stati espansi su più righe (usando il simbolo
\
) per chiarezza
Riguardo alle Richieste di Firma di Certificati (CSRs)
Se desideri ottenere un certificato SSL da un’autorità di certificazione commerciale (CA), devi generare una richiesta di firma del certificato (CSR). Un CSR è composto principalmente dalla chiave pubblica di una coppia di chiavi e da alcune informazioni aggiuntive. Entrambi questi componenti vengono inseriti nel certificato quando viene firmato.
Ogni volta che generi un CSR, ti verrà chiesto di fornire informazioni riguardanti il certificato. Queste informazioni sono note come Nome Distinto (DN). Un campo importante nel DN è il Nome comune (CN), che dovrebbe essere l’esatto Nome di Dominio Completo (FQDN) dell’host che intendi utilizzare con il certificato. È anche possibile saltare i prompt interattivi durante la creazione di un CSR passando le informazioni tramite riga di comando o da un file.
Gli altri elementi in un DN forniscono informazioni aggiuntive sulla tua attività o organizzazione. Se stai acquistando un certificato SSL da un’autorità di certificazione, spesso è richiesto che questi campi aggiuntivi, come “Organizzazione”, riflettano accuratamente i dettagli della tua organizzazione.
Ecco un esempio di come apparirà il prompt delle informazioni del CSR:
---
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:
Se desideri rispondere in modo non interattivo al prompt delle informazioni del CSR, puoi farlo aggiungendo l’opzione -subj
a qualsiasi comando OpenSSL che richieda informazioni CSR. Ecco un esempio dell’opzione, utilizzando le stesse informazioni visualizzate nel blocco di codice sopra:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
Ora che hai compreso i CSR, sentiti libero di passare alla sezione di questa guida che copre le tue esigenze OpenSSL.
Generazione di CSR
Questa sezione copre i comandi OpenSSL che sono correlati alla generazione di CSR (e chiavi private, se non esistono già). I CSR possono essere utilizzati per richiedere certificati SSL da un’autorità di certificazione.
Tieni presente che puoi aggiungere le informazioni del CSR in modo non interattivo con l’opzione -subj
, menzionata nella sezione precedente.
Genera una chiave privata e un CSR
Utilizza questo metodo se desideri utilizzare HTTPS (HTTP su TLS) per proteggere il tuo server web Apache HTTP o Nginx e desideri utilizzare un’autorità di certificazione (CA) per emettere il certificato SSL. Il CSR generato può essere inviato a una CA per richiedere l’emissione di un certificato SSL firmato dalla CA. Se la tua CA supporta SHA-2, aggiungi l’opzione -sha256
per firmare il CSR con SHA-2.
Questo comando crea una chiave privata da 2048 bit (domain.key
) e un CSR (domain.csr
) da zero:
Rispondi al prompt delle informazioni del CSR per completare il processo.
L’opzione -newkey rsa:2048
specifica che la chiave deve essere di 2048 bit, generata utilizzando l’algoritmo RSA. L’opzione -nodes
specifica che la chiave privata non deve essere criptata con una passphrase. L’opzione -new
, che non è inclusa qui ma è implicita, indica che viene generato un CSR.
Generare un CSR da una chiave privata esistente
Utilizzare questo metodo se si dispone già di una chiave privata che si desidera utilizzare per richiedere un certificato da un’autorità di certificazione.
Questo comando crea un nuovo CSR (domain.csr
) basato su una chiave privata esistente (domain.key
):
Rispondere al prompt delle informazioni del CSR per completare il processo.
L’opzione -key
specifica una chiave privata esistente (domain.key
) che verrà utilizzata per generare un nuovo CSR. L’opzione -new
indica che viene generato un CSR.
Generare un CSR da un certificato e una chiave privata esistenti
Usa questo metodo se desideri rinnovare un certificato esistente ma tu o il tuo CA non avete il CSR originale per qualche motivo. Fondamentalmente ti risparmia il fastidio di inserire nuovamente le informazioni del CSR, in quanto estrae tali informazioni dal certificato esistente.
Questo comando crea un nuovo CSR (domain.csr
) basato su un certificato esistente (domain.crt
) e una chiave privata (domain.key
):
La -x509toreq
opzione specifica che stai utilizzando un certificato X509 per generare un CSR.
Generazione di Certificati SSL
Se desideri utilizzare un certificato SSL per proteggere un servizio ma non richiedi un certificato firmato da una CA, una soluzione valida (e gratuita) è quella di firmare i tuoi certificati.
A common type of certificate that you can issue yourself is a self-signed certificate. A self-signed certificate is a certificate that is signed with its own private key. Self-signed certificates can be used to encrypt data just as well as CA-signed certificates, but your users will be displayed a warning that says that the certificate is not trusted by their computer or browser. Therefore, self-signed certificates should only be used if you do not need to prove your service’s identity to its users (e.g. non-production or non-public servers).
Questa sezione copre i comandi OpenSSL relativi alla generazione di certificati auto-firmati.
Genera un Certificato Auto-Firmato
Usa questo metodo se desideri utilizzare HTTPS (HTTP over TLS) per proteggere il tuo server web Apache HTTP o Nginx e non richiedi che il tuo certificato sia firmato da una CA.
Questo comando crea una chiave privata di 2048 bit (domain.key
) e un certificato autofirmato (domain.crt
) da zero:
Rispondi alla richiesta di informazioni CSR per completare il processo.
L’opzione -x509
dice a req
di creare un certificato autofirmato. L’opzione -days 365
specifica che il certificato sarà valido per 365 giorni. Viene generato un CSR temporaneo per raccogliere le informazioni da associare al certificato.
Generare un Certificato Autofirmato da una Chiave Privata Esistente
Usa questo metodo se hai già una chiave privata con cui desideri generare un certificato autofirmato.
Questo comando crea un certificato autofirmato (domain.crt
) da una chiave privata esistente (domain.key
):
Rispondi alla richiesta di informazioni CSR per completare il processo.
L’opzione -x509
dice a req
di creare un certificato autofirmato. L’opzione -days 365
specifica che il certificato sarà valido per 365 giorni. L’opzione -new
abilita la richiesta di informazioni CSR.
Generare un certificato autofirmato da una chiave privata e CSR esistenti
Utilizzare questo metodo se si dispone già di una chiave privata e di una CSR e si desidera generare un certificato autofirmato con esse.
Questo comando crea un certificato autofirmato (domain.crt
) da una chiave privata esistente (domain.key
) e (domain.csr
):
L’opzione -days 365
specifica che il certificato sarà valido per 365 giorni.
Visualizzare i certificati
I file del certificato e della CSR sono codificati nel formato PEM, che non è immediatamente leggibile dall’essere umano.
Questa sezione illustra i comandi OpenSSL che restituiranno le voci effettive dei file codificati in PEM.
Visualizzare le voci della CSR
Questo comando consente di visualizzare e verificare il contenuto di una CSR (domain.csr
) in formato testo normale:
Visualizza Voci del Certificato
Questo comando ti permette di visualizzare il contenuto di un certificato (domain.crt
) in testo normale:
Verifica che un Certificato Sia Stato Firmato da un CA
Utilizza questo comando per verificare che un certificato (domain.crt
) sia stato firmato da un CA specifico (ca.crt
):
Chiavi Private
Questa sezione comprende comandi OpenSSL specifici per la creazione e la verifica di chiavi private.
Crea una Chiave Privata
Utilizza questo comando per creare una chiave privata protetta da password da 2048 bit (domain.key
):
Inserisci una password quando richiesto per completare il processo.
Verifica di una Chiave Privata
Usa questo comando per controllare che una chiave privata (domain.key
) sia una chiave valida:
Se la tua chiave privata è crittografata, ti verrà chiesto il pass frase. In caso di successo, la chiave non crittografata verrà visualizzata sul terminale.
Verifica che una Chiave Privata Corrisponda a un Certificato e a una CSR
Usa questi comandi per verificare se una chiave privata (domain.key
) corrisponde a un certificato (domain.crt
) e a una CSR (domain.csr
):
Se l’output di ogni comando è identico, c’è un’altissima probabilità che la chiave privata, il certificato e la CSR siano correlati.
Crittografa una Chiave Privata
Questo prende una chiave privata non crittografata (unencrypted.key
) e ne produce una versione crittografata (encrypted.key
):
Inserisci la tua pass frase desiderata per crittografare la chiave privata.
Decrittare una Chiave Privata
Questo processo richiede una chiave privata crittografata (encrypted.key
) e produce una versione decrittografata di essa (decrypted.key
):
Inserisci la frase di accesso per la chiave crittografata quando richiesto.
Convertire Formati di Certificato
Tutti i certificati con cui abbiamo lavorato sono stati certificati X.509 codificati in ASCII PEM. Esistono vari altri tipi di codifica e contenitori di certificati; alcune applicazioni preferiscono certi formati rispetto ad altri. Inoltre, molti di questi formati possono contenere più elementi, come una chiave privata, un certificato e un certificato CA, in un singolo file.
OpenSSL può essere utilizzato per convertire i certificati da e verso una grande varietà di questi formati. Questa sezione coprirà alcune delle conversioni possibili.
Convertire PEM in DER
Usa questo comando se desideri convertire un certificato codificato in PEM (domain.crt
) in un certificato codificato in DER (domain.der
), un formato binario:
Il formato DER è tipicamente utilizzato con Java.
Converti DER in PEM
Utilizza questo comando se desideri convertire un certificato codificato in DER (domain.der
) in un certificato codificato in PEM (domain.crt
):
Converti PEM in PKCS7
Utilizza questo comando se desideri aggiungere certificati PEM (domain.crt
e ca-chain.crt
) a un file PKCS7 (domain.p7b
):
Nota che puoi utilizzare una o più opzioni -certfile
per specificare quali certificati aggiungere al file PKCS7.
I file PKCS7, noti anche come P7B, sono tipicamente utilizzati nei keystore di Java e in Microsoft IIS (Windows). Sono file ASCII che possono contenere certificati e certificati CA.
Converti PKCS7 in PEM
Utilizza questo comando se desideri convertire un file PKCS7 (domain.p7b
) in un file PEM:
Si noti che se il file PKCS7 ha più elementi al suo interno (ad esempio, un certificato e un certificato intermediario CA), il file PEM creato conterrà tutti gli elementi al suo interno.
Converti PEM in PKCS12
Usa questo comando se desideri prendere una chiave privata (domain.key
) e un certificato (domain.crt
), e combinarli in un file PKCS12 (domain.pfx
):
Ti verrà richiesta una password di esportazione, che puoi lasciare vuota. Nota che puoi aggiungere una catena di certificati al file PKCS12 concatenando i certificati insieme in un unico file PEM (domain.crt
) in questo caso.
I file PKCS12, anche noti come file PFX, vengono tipicamente utilizzati per l’importazione e l’esportazione di catene di certificati in Microsoft IIS (Windows).
Converti PKCS12 in PEM
Usa questo comando se desideri convertire un file PKCS12 (domain.pfx
) e convertirlo nel formato PEM (domain.combined.crt
):
openssl pkcs12 \
-in domain.pfx \
-nodes -out domain.combined.crt
Si noti che se il file PKCS12 ha più elementi al suo interno (ad esempio, un certificato e una chiave privata), il file PEM creato conterrà tutti gli elementi al suo interno.
Versione di OpenSSL
Il comando openssl version
può essere utilizzato per verificare quale versione si sta utilizzando. La versione di OpenSSL che si sta utilizzando e le opzioni con cui è stata compilata influenzano le funzionalità (e talvolta le opzioni della riga di comando) disponibili.
Il seguente comando visualizza la versione di OpenSSL in uso e tutte le opzioni con cui è stata compilata:
openssl version -a
Questa guida è stata scritta utilizzando un binario OpenSSL con i seguenti dettagli (l’output del comando precedente):
OpenSSL 1.1.1 11 Sep 2018
built on: Mon Aug 23 17:02:39 2021 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-Flav1L/openssl-1.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -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 -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
Conclusione
Questo dovrebbe coprire come la maggior parte delle persone utilizza OpenSSL per lavorare con i certificati SSL. Ha molti altri utilizzi che non sono stati trattati qui, quindi sentiti libero di chiedere o suggerire altri utilizzi nei commenti.
Se stai riscontrando problemi con uno qualsiasi dei comandi, assicurati di commentare (e includere l’output della tua versione di OpenSSL).