Un’autorità di certificazione (CA o Certification Authority) è un’entità responsabile dell’emissione di certificati digitali per verificare le identità su Internet. Sebbene le CA pubbliche siano una scelta popolare per verificare l’identità dei siti Web e di altri servizi forniti al pubblico, le CA private vengono in genere utilizzate per gruppi chiusi e servizi privati.
La creazione di un’autorità di certificazione privata consente di configurare, testare ed eseguire programmi che richiedono connessioni crittografate tra un client e un server. Con una CA privata, è possibile emettere certificati per utenti, server o singoli programmi e servizi all’interno dell’infrastruttura.
PREREQUISITI
Per completare questo tutorial, è necessario accedere a un server Ubuntu 22.04 per ospitare il server CA. Sarà necessario configurare un utente non root con privilegi prima di iniziare questa guida
INSTALLAZIONE DI EASY-RSA
La prima cosa da fare è installare il set di script sul server CA.
Questo è uno strumento di gestione dell’autorità di certificazione che verrà utilizzato per generare una chiave privata e un certificato radice pubblico, che verrà quindi utilizzato per firmare le richieste provenienti da client e server che si baseranno sulla CA.
Accedere al server CA come utente sudo non root ed eseguire i seguenti comandi:
0
1
|
sudo apt update
sudo apt install easy-rsa
|
CREAZIONE DIRECTORY PER INFRASTRUTTURA A CHIAVE PUBBLICA
Dopo aver installato, è il momento di creare un’infrastruttura a chiave pubblica (PKI) di tipo sul server CA.
Assicurarsi di aver effettuato l’accesso come utente non root e creare una directory.
NOTA BENE: Assicurarsi di non utilizzare sudo per eseguire nessuno dei seguenti comandi, poiché l’utente normale deve gestire e interagire con la CA senza privilegi elevati
Creare la cartella chiamata easy-rsa nella root con il comando:
0 |
mkdir ~/easy-rsa
|
Creare quindi i collegamenti simbolici con il comando:
0 |
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
|
Per limitare l’accesso alla nuova directory PKI, assicurarsi che solo il proprietario possa accedervi utilizzando il comando:
0 |
chmod 700 /home/UTENTE/easy-rsa
|
NOTA BENE: al posto di UTENTE inserire l’utenza utilizzata
Infine, inizializzare l’infrastruttura PKI all’interno della directory con i comandi:
0
1
|
cd ~/easy-rsa
./easyrsa init-pki
|
Se è andato tutto a buon fine dovremmo visualizzare il seguente output:
0
1
|
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/rchiatto/easy-rsa/pki
|
CREAZIONE DELLA CERTIFICATION AUTORITY
Prima di poter creare la chiave privata e il certificato della CA, è necessario creare e popolare un file chiamato con alcuni valori predefiniti.
Per prima cosa entrare nella directory, quindi creare e modifichare il file con i seguenti comandi:
0
1
|
cd ~/easy-rsa
nano vars
|
Una volta aperto il file, incollare le righe seguenti e modificare ogni valore evidenziato in modo che rifletta le informazioni sull’organizzazione.
La cosa importante è non lasciare campi vuoti:
0
1
2
3
4
5
6
7
|
set_var EASYRSA_REQ_COUNTRY "IT"
set_var EASYRSA_REQ_PROVINCE "Piemonte"
set_var EASYRSA_REQ_CITY "Torino"
set_var EASYRSA_REQ_ORG "raffaelechiatto"
set_var EASYRSA_REQ_OU "IT Department"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
|
ATTENZIONE: modificare tutti i parametri tranne EASYRSA_ALGO e EASYRSA_DIGEST
Salvare e chiudere il file di configurazione
Per creare la coppia di chiavi pubblica e privata root per l’autorità di certificazione, eseguire nuovamente il comando:
0 |
./easyrsa build-ca
|
Nell’output, vedrai alcune righe sulla versione di OpenSSL e ti verrà richiesto di inserire una passphrase per la tua coppia di chiavi.
0
1
2
|
Using SSL: openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
Enter New CA Key Passphrase:
|
Assicurarsi di scegliere una passphrase forte e di annotarla in un posto sicuro.
Sarà necessario immettere la passphrase ogni volta che è necessario interagire con la CA, ad esempio per firmare o revocare un certificato.
Inserire la passphrase quindi premere Invio
0 |
Re-Enter New CA Key Passphrase:
|
Reinserire quindi la Passphrase e premere Invio
Se è tutto OK dovremmo vedere il srguente Output
0
1
2
3
4
5
6
7
|
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
|
Premere Invio
Se è andato tutto a buon fine dovremmo vedere il seguente Output
0
1
2
|
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/rchiatto/easy-rsa/pki/ca.crt
|
ATTENZIONE: se non si desidera che venga richiesta la password ogni volta che si interagisce con la CA eseguire il comando:
0 |
./easyrsa build-ca nopass
|
A questo punto abbiamo due file importanti che costituiscono i componenti pubblico e privato di un’autorità di certificazione.
ca.crt è il file di certificato pubblico della CA e si trova nel path ~/easy-rsa/pki/ca.crt. Utenti, server e client utilizzeranno questo certificato per verificare di far parte della stessa rete di attendibilità. Ogni utente e server che utilizza la CA dovrà disporre di una copia di questo file. Tutte le parti faranno affidamento sul certificato pubblico per garantire che qualcuno non stia impersonando un sistema ed eseguendo un attacco Man-in-the-middle.
ca.key è la chiave privata utilizzata dalla CA per firmare i certificati per server e client si trova nel path ~/easy-rsa/pki/private/ca.key. Se un utente malintenzionato ottiene l’accesso alla CA e, a sua volta, al file, sarà necessario distruggere la CA. Questo è il motivo per cui il file dovrebbe trovarsi solo sul computer CA e che, idealmente, il computer CA dovrebbe essere mantenuto offline quando non firma le richieste di certificato come misura di sicurezza aggiuntiva
DISTRIBUZIONE DEL CERTIFICATO PUBBLICO DELLA CERTIFICATION AUTHORITY
Ora la CA è configurata e pronta per tutti i sistemi che si desidera configurare per utilizzarla.
Per importare il certificato pubblico della CA in un secondo sistema Linux, ad esempio un altro server o un computer locale, ottenere innanzitutto una copia del file dal server CA.
È possibile utilizzare il comando per emetterlo in un terminale, quindi copiarlo e incollarlo in un file sul secondo computer che sta importando il certificato.
In questo esempio useremo un semplice copia e incolla
Come utente non root sul server CA, eseguire il comando:
0
1
2
3
4
5
6
7
8
|
cat ~/easy-rsa/pki/ca.crt
-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUS1vyt18vont0dm9qQGeEe9juZ5QwDQYJKoZIhvcNAQEL
..
..
..
53eWb9Hq1W7aooFevBTIegciE7E+Vf7O2uxOkYOOEw==
-----END CERTIFICATE-----
|
A questo punto copiare tutte le righe da —–BEGIN CERTIFICATE—– a —–END CERTIFICATE—–
Sull’altro sistema linux eseguire il comando:
0 |
nano /tmp/ca.crt
|
Quindi incollare l’Output copiato in precedenza
Per importare il certificato su Sistemi Debian e Ubuntu eseguire i comandi:
0
1
|
sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
|
Per importare il certificato su Sistemi CentOS e RedHat eseguire i comandi:
0
1
|
sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
|
Dopo aver importato il certificato il secondo Linux considererà attendibile qualsiasi certificato che è stato firmato dal server CA.
Per importare il certificato in un sistema Windows creare un file denominato CA.crt
Editare quindi il file con un notepad
Incollare l’Output copiato in precedenza da a —–BEGIN CERTIFICATE—– a —–END CERTIFICATE—–
Quindi salvare e chiudere il file
Fare doppio click sul Certificato
Cliccare Install Certificate…
Selezionare Local Machine per installare il Certificato a livello macchina quindi cliccare Next
Cliccare Next
Cliccare Finish per terminare l’importazione
Cliccare OK
Per verificare che l’importanzione sia andata a buon fine aprire una cosnole con lo snap-in dei Certificati quindi verificare che nei Trusted Root ci sia il certificato importato come mostrato nell’immagine sovrastante.
CREAZIONE E FIRMA DI UNA RICHIESTA DI CERTIFICATO
Una richiesta di firma del certificato (CSR) è costituita da tre parti: una chiave pubblica, informazioni identificative sul sistema richiedente, e una firma della richiesta stessa, che viene creata utilizzando la chiave privata della parte richiedente. La chiave privata verrà mantenuta segreta e verrà utilizzata per crittografare le informazioni che chiunque disponga del certificato pubblico firmato può quindi decrittografare.
I seguenti passaggi verranno eseguiti sul secondo sistema Ubuntu, Debian o Windows Server. Può essere un altro server remoto o una macchina Linux locale come un laptop o un computer desktop.
CREAZIONE DI UNA CSR SU SERVER UBUNTU
Collegarsi in SSH al server dove si intende generare la CSR quindi eseguire i seguenti comandi:
0
1
|
sudo apt update
sudo apt install openssl
|
NOTA BENE: nella maggior parte dei sistemi Linux Openssl viene installato in fase di installazione del server
Il primo passaggio per creare una CSR è generare una chiave privata. Per creare una chiave privata creare una directory e quindi generare una chiave al suo interno con i seguenti comandi:
0
1
2
|
mkdir ~/ubuntu-csr
cd ~/ubuntu-csr
openssl genrsa -out ca-server.key
|
Ora che si dispone di una chiave privata è possibile creare una CSR sempre utilizzando l’utility Openssl.
Verrà richiesto di compilare una serie di campi come Paese, Stato e Città.
Eseguire il comando:
0 |
openssl req -new -key ca-server.key -out ca-server.req
|
Dovremmo vedere il seguente Output
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Piemonte
Locality Name (eg, city) []:Torino
Organization Name (eg, company) [Internet Widgits Pty Ltd]:raffaelechiatto
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []:NOME_FQDN_DEL_SERVER
Email Address []:mail@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
|
ATTENZIONE: sostituire al posto di NOME_FQDN_DEL_SERVER il nome FQDN del server dove si sta generando la CSR e al posto di [email protected] la mail corretta
Per verificare il contenuto di una CSR, è possibile leggere in un file di richiesta ed esaminare i campi all’interno con il comando:
0 |
openssl req -in ca-server.req -noout -subject
|
Dovremmo vedere il seguente output:
0 |
subject=C = IT, ST = Piemonte, L = Torino, O = raffaelechiatto, OU = IT Department, CN = NOME_FQDN_DEL_SERVER, emailAddress = mail@example.com
|
Una volta terminato la generazione della CSR copiarla sul CA Server con il seguente comando:
0 |
scp ca-server.req USER_CA_SERVER@CA_SERVER_IP_ADDRESS:/tmp/ca-server.req
|
Inserire quindi la password dell’utente del CA Server
FIRMA DELLA CSR
Per procedere alla firma della CSR copiata precedentemente collegarsi al CA Server quindi eseguire i comandi:
0
1
|
cd ~/easy-rsa
./easyrsa import-req /tmp/ca-server.req ubuntu-server
|
Se è andato tutto a buon fine dovremmo vedere il seguente output:
0
1
2
3
|
Using SSL: openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
The request has been successfully imported with a short name of: ubuntu-server
You may now use this name to perform signing operations on this request.
|
Ora è possibile firmare la richiesta eseguendo lo script con il seguente comando:
0 |
./easyrsa sign-req server ubuntu-server
|
Dovremmo vedere il seguente Output:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Using SSL: openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
countryName = IT
stateOrProvinceName = Piemonte
localityName = Torino
organizationName = raffaelechiatto
organizationalUnitName = IT Department
commonName = NOME_FQDN_DEL_SERVER
emailAddress = mail@example.com
Type the word 'yes' to continue, or any other input to abort.
Confirm request details:
|
Digitare YES per procedere quindi premere Invio
0
1
|
Using configuration from /home/rchiatto/easy-rsa/pki/easy-rsa-5978.5upsf1/tmp.jg15gy
Enter pass phrase for /home/rchiatto/easy-rsa/pki/private/ca.key:
|
Inserire quindi la Passphrase del server CA definita in precedenza quindi Invio
Se è andato tutto a buon fine dovremmo vedere il seguente Output:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'IT'
stateOrProvinceName :ASN.1 12:'Piemonte'
localityName :ASN.1 12:'Torino'
organizationName :ASN.1 12:'raffaelechiatto'
organizationalUnitName:ASN.1 12:'IT Department'
commonName :ASN.1 12:'NOME_FQDN_DEL_SERVER'
Certificate is to be certified until Sep 7 19:39:43 2025 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/rchiatto/easy-rsa/pki/issued/librenms-server.crt
|
Una volta completati questi passaggi abbiamo firmato la CSR utilizzando la chiave privata del server CA.
Il file risultante contiene la chiave di crittografia pubblica del server, nonché una nuova firma dal server CA.
Lo scopo della firma è quello di dire a chiunque si fidi della CA che anche loro possono considerare attendibile il certificato
L’ultimo passaggio sul server CA sarebbe quello di distribuire i nuovi file e dal server CA al server remoto che ha effettuato la richiesta CSR con i comandi:
0
1
|
scp pki/issued/ubuntu-server.crt USER_SERVER_UBUNTU@UBUNTU_SERVER_IP_ADDRESS:/tmp
scp pki/ca.crt USER_SERVER_UBUNTU@UBUNTU_SERVER_IP_ADDRESS:/tmp
|
NOTA BENE: al posto di USER_SERVER_UBUNTU inserire l’utenza del Server Ubuntu e al posto di UBUNTU_SERVER_IP_ADDRESS l’indirizzo IP del server Ubuntu
A questo punto potremo usare il certificato per un Server Web o per un qualsiasi tipo di autenticazione.
REVOCA DEL CERTIFICATO
Per la revoca del certificato posizionarsi nella cartella easy-rsa con il comando:
0 |
cd ~/easy-rsa
|
Quindi, eseguire lo script con l’opzione, seguita dal nome del client che si desidera revocare. Seguendo l’esempio pratico riportato sopra, il nome comune del certificato è ubuntu-server
Eseguire il comando:
0 |
./easyrsa revoke ubuntu-server
|
Confermare la richiesta quindi premere YES
per verificare la lista dei certificati revocati eseguire il comando:
0 |
./easyrsa gen-crl
|
Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi.
Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare.
Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.
0 Comments