OpenSSL su Windows 10: Una guida PowerShell completa

Generare certificati SSL può essere un compito difficile, pieno di frustrazione e tristezza. Ma non deve essere così! Se hai Windows 10 e OpenSSL, insieme a un piccolo aiuto da questo tutorial, sarai sulla buona strada.

In questo articolo, imparerai come installare OpenSSL su Windows 10. Una volta installato, genererai certificati SSL, risolverai problemi e debuggherai i certificati e convertirai tra i formati.

Iniziamo a padroneggiare OpenSSL su Windows 10 con PowerShell!

Correlato: Gestire i certificati con Windows Certificate Manager e PowerShell

Prerequisiti

In questo articolo, imparerai con un approccio pratico. Mentre OpenSSL storicamente è un’utilità per sistemi operativi Linux, puoi utilizzarla anche con Windows OS.

Tutte le schermate in questa guida sono state realizzate su Windows 10 build 1909 e PowerShell 7.

Installazione di OpenSSL su Windows 10 con PowerShell e Chocolatey

Assumendo che tu abbia installato Chocolatey utilizzando le istruzioni di installazione, il tuo primo compito è installare OpenSSL su Windows 10. Per farlo, apri la console di PowerShell e esegui il comando choco install OpenSSL.Light come mostrato di seguito.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

Ecco fatto! Hai ora installato OpenSSL con PowerShell.

Configura una directory di lavoro

In questo tutorial creerai alcuni certificati per apprendere. Per assicurarti che tutto il lavoro che svolgi qui sia confinato in una singola cartella che puoi eliminare in seguito, crea una.

In questo tutorial verranno archiviati tutti i certificati e i file correlati nella cartella C:\certs. Puoi creare una cartella con PowerShell eseguendo il comando seguente.

New-Item -ItemType Directory -Path C:\certs

Ora è il momento di configurare OpenSSL.

Configurazione di OpenSSL

Di default, OpenSSL su Windows 10 non viene fornito con un file di configurazione. Questo è intenzionale perché ci sono molte opzioni di configurazione che puoi personalizzare. Per scopi di questa guida, utilizzerai una configurazione di esempio che potrai personalizzare in seguito per soddisfare al meglio le tue esigenze di sicurezza.

Apri PowerShell e esegui il comando seguente. Questo comando scarica un file di configurazione di esempio dal MIT e lo salva come openssl.cnf nella directory di lavoro corrente.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Ora puoi aprire il file openssl.cnf e dovresti vedere qualcosa di simile a quanto riportato di seguito.

Sample OpenSSL configuration file

La configurazione scaricata funzionerà così com’è per ora. Non utilizzare le impostazioni predefinite in un ambiente di produzione!

Aggiorna le variabili d’ambiente del profilo di PowerShell

Per facilitare le cose, dovresti modificare il tuo profilo di PowerShell su Windows 10. La configurazione di alcune variabili d’ambiente ti permette di passare facilmente tra diverse versioni di OpenSSL che potresti avere installato.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Di seguito vedrai un modo per creare un profilo di PowerShell se non ne hai già uno. Questo comando aggiunge il percorso binario di OpenSSL alla tua variabile PATH e assegna il percorso del file di configurazione a OPENSSL_CONF.

# Aggiungi variabili d'ambiente al profilo di PowerShell
# Verifica l'esistenza di un profilo, se non trovato ne crea uno!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Modifica il profilo per aggiungere queste righe
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Per utilizzare le variabili d’ambiente, ricarica il tuo profilo digitando . $profile oppure chiudi e riapri PowerShell.

Ora puoi facilmente invocare il binario di openssl ovunque tu sia in PowerShell come mostrato di seguito.

Verifying OpenSSL version in PowerShell

Utilizzare OpenSSL su Windows 10 per generare un CSR e una chiave privata

Prima di poter creare un certificato SSL, è necessario generare una richiesta di firma del certificato (CSR) . Un CSR è un file codificato che fornisce un modo per condividere la propria chiave pubblica con un’autorità di certificazione (CA). Questo file contiene informazioni di identificazione, un algoritmo di firma e una firma digitale. Creiamo la tua prima CSR e chiave privata.

Correlato: La tua guida ai certificati X509 per i mortali

Per creare una CSR, esegui il seguente comando. OpenSSL ti chiederà di inserire alcune informazioni di identificazione, come puoi vedere nella seguente dimostrazione.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Una volta completato, avrai una CSR valida e una chiave privata che potranno essere utilizzate per emetterti un certificato SSL.

Le impostazioni predefinite del file di configurazione possono essere ulteriormente modificate per semplificare questo processo nel caso in cui non si desideri inserire i dati ogni volta che si genera una CSR.

Puoi leggere ulteriori informazioni sulle opzioni CSR disponibili e visualizzare configurazioni di esempio nelle pagine del manuale. OpenSSL ha anche un repository GitHub attivo con esempi.

Generazione di coppie di chiavi RSA

È anche possibile creare coppie di chiavi RSA (pubbliche/private) con OpenSSL. Per farlo, crea prima una chiave privata utilizzando il sotto-comando genrsa come mostrato di seguito.

Quando esegui il comando di seguito, OpenSSL su Windows 10 genererà una chiave privata RSA con una lunghezza di chiave di 2048 bit. Questa chiave viene generata quasi istantaneamente su hardware moderno. La chiave risultante viene visualizzata nella directory di lavoro.

# genera una chiave privata usando la dimensione massima della chiave di 2048
# le dimensioni della chiave possono essere 512, 758, 1024, 1536 o 2048. 
openssl genrsa -out rsa.private 2048

Successivamente, genera una chiave pubblica usando la chiave privata appena creata utilizzando il sottocomando rsa. La sintassi seguente creerà una chiave pubblica chiamata rsa.public nella directory di lavoro dalla chiave privata rsa.private.

# genera una chiave pubblica utilizzando la chiave privata
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Generazione di un certificato auto-firmato

A volte potrebbe essere necessario generare un certificato auto-firmato. I certificati auto-firmati vanno bene per l’uso in laboratorio, ma non sono una pratica sicura da utilizzare in un ambiente di produzione.

Creiamo un certificato auto-firmato prima di passare al compito successivo. Per farlo, inserisci il comando seguente per creare un certificato SSL X509. Questo certificato utilizzerà la crittografia SHA256 che sarà valido per 365 giorni utilizzando una lunghezza di chiave RSA di 2048 bit. Il certificato verrà salvato nella directory di lavoro.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Ora sei pronto per importare il certificato in un browser o server.

Convalida di CSR, certificati e chiavi con OpenSSL

Verificare le informazioni in un CSR, chiave privata, certificato o PKCS#12 può risparmiarti tempo nella risoluzione degli errori SSL. A volte potrebbe essere stata utilizzata una chiave errata per creare un certificato, ad esempio. Potresti avere informazioni di identificazione errate nel certificato.

Iniziamo verificando un CSR utilizzando il comando req e alcuni parametri:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

I dettagli come il nome del paese, il nome dell’organizzazione e l’indirizzo email inseriti durante la creazione del CSR all’inizio di questa guida, dovrebbero corrispondere precisamente.

Puoi anche verificare un certificato utilizzando il sotto-comando x509 con un paio di parametri:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Conversione dei certificati con OpenSSL

Ci sono occasioni in cui un’applicazione non utilizza un formato di certificato particolare. Puoi incontrare questo problema con un’applicazione chiamata HAproxy, ad esempio, che richiede un certificato PEM quando potresti avere un certificato nel formato DER (.crt .cer .der).

Per mostrare come convertire un certificato, convertiamo il certificato autofirmato creato in precedenza in formato DER (certificate.crt) in formato PEM. Utilizza il codice nel seguente frammento di codice per farlo.

Il comando seguente utilizza il sotto-comando x509 con il parametro -inform che dovrebbe corrispondere al formato del file -in seguito dal formato -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

Puoi anche invertire l’ordine se desideri convertire da PEM a formato DER, come mostrato di seguito.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

E per ultimo, è possibile convertire PKCS#12 in formato PEM e PEM in formato PKCS#12. Questo è un tipo di file che contiene chiavi private e certificati. Per convertire in formato PEM, utilizzare il sotto-comando pkcs12.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

È anche possibile convertire un certificato PEM e una chiave privata in formato PKCS#12 utilizzando -export con alcune opzioni aggiuntive. Di seguito viene esportato un certificato in formato PKCS#12 utilizzando la chiave privata, utilizzando SomeCertificate.crt come sorgente di input. Utilizzando il valore dell’opzione -certfile MyCACert.crt è possibile convalidare SomeCertificate.crt.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Risoluzione dei problemi e debug

Ora che è possibile creare e convertire CSR, certificati e coppie di chiavi, è il momento di imparare come risolvere i problemi e fare il debug. OpenSSL dispone di comandi che rendono molto semplice risolvere i problemi.

OpenSSL consente anche di verificare l’integrità dei certificati e testare eventuali corruzioni dei dati. Utilizzando un checksum MD5, è possibile utilizzare i seguenti esempi di codice per testare certificati, chiavi e CSR.

# Certificati
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Chiavi pubbliche / private
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Richiesta di certificato del server
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Verifica di una connessione SSL esterna
openssl s_client -connect www.google.com:443

Una volta ottenuto l’hash originale, è possibile confrontarlo con un hash corrente per verificare che il certificato non sia stato modificato o corrotto.

Ecco un esempio di come appare quel codice quando viene eseguito in PowerShell:

Sample troubleshooting command output with OpenSSL in PowerShell

Riepilogo

In questo articolo, hai imparato come installare e configurare OpenSSL su Windows 10, creare un CSR, una coppia di chiavi e un certificato SSL. Hai anche imparato come convertire tra diversi formati di certificato e fare alcuni troubleshooting di base utilizzando i sottocomandi integrati.

Risorse aggiuntive

Source:
https://adamtheautomator.com/openssl-windows-10/