Progetto

Generale

Profilo

OpenSSLSelfSigned » Cronologia » Versione 3

Simone Piccardi, 04-07-2024 16:35

1 1 Simone Piccardi
h1. Generare un certificato autofirmato con OpenSSL
2
3 3 Simone Piccardi
Diverse configurazioni dei servizi installati dai relativi pacchetti di una distribuzione (ad esempio Postfix per Rocky/RHEL 9, o Apache per Debian) rendono disponibile l'uso di connessioni cifrate con TLS/SSL usando un certificato autofirmato creato in fase di installazione degli stessi. A seconda della distribuzione il certificato generato e la corrispondente chiave privata si possono trovare in specifiche directory, ad esempio su Rocky 9 vengono usate rispettivamente le directory @/etc/pki/tls/certs@ e @/etc/pki/tls/private@, mentre su Debian le directory @/etc/ssl/certs/@ e @/etc/ssl/private/@.
4 1 Simone Piccardi
5 3 Simone Piccardi
Non è detto però che i certificati generati automaticamente dai pacchetti corrispondano sempre alle proprie esigenze, ad esempio si potrebbe voler cambiare i dati relativi ai nomi utilizzati, oppure aggiustare il periodo di validità degli stessi. 
6 1 Simone Piccardi
7 3 Simone Piccardi
In tal caso è possibile ricorrere al comando @openssl@ per effettuare manualmente la creazione di un certificato autofirmato. Questo passa attraverso una serie di passi che partono sempre dalla creazione iniziale di una chiave privata che sarà quella da cui poi si otterrà il certificato, questa può essere generata con:
8 1 Simone Piccardi
9
<pre>
10
openssl genrsa -out server.key 4096
11
</pre>
12
13 3 Simone Piccardi
Si tenga presente che la chiave deve esser protetta da lettura da parte di terzi, altrimenti chiunque potrà riusare il certificato sulla propria macchina, il programma la crea con permessi @0600@, e consente eventualmente di cifrarla con una passphrase indicando un algoritmo crittografico con cui farlo (con opzioni come @-aes128@, @-aes256@, @-des3@, ecc.) ma per un certificato autofirmato non è il caso di farlo, perché dovrà essere usata da un servizio che deve poterla leggere all'avvio senza la necessità della presenza di qualcuno che inserisca la passphrase. 
14 1 Simone Piccardi
15 3 Simone Piccardi
Il parametro finale nell'esempio precedente è la dimensione della chiave, che nel caso, avendo scelto di creare una chiave RSA, indica il numero di bit. In genere si usano valori come 1024, 2048 (il default) o 4096. Valori inferiori a 2048 non sono ritenuti sufficientemente sicuri, si è scelto 4096 che al momento è considerato molto sicuro.
16 1 Simone Piccardi
17 3 Simone Piccardi
Una volta predisposta la chiave il passo successivo è la creazione di una richiesta di certificato; questo si fa con il comando @openssl req@ che chiederà tutte le informazioni da inserire nel certificato:
18
19 1 Simone Piccardi
<pre>
20
openssl req -key server.key -new -out server.csr 
21
You are about to be asked to enter information that will be incorporated
22
into your certificate request.
23
What you are about to enter is what is called a Distinguished Name or a DN.
24
There are quite a few fields but you can leave some blank
25
For some fields there will be a default value,
26
If you enter '.', the field will be left blank.
27
-----
28
Country Name (2 letter code) [AU]:IT
29
State or Province Name (full name) [Some-State]:Italy
30
Locality Name (eg, city) []:Firenze
31
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Truelite S.R.L.
32
Organizational Unit Name (eg, section) []:IT
33
Common Name (e.g. server FQDN or YOUR name) []:server.truelite.it
34
Email Address []:info@truelite.it
35
36
Please enter the following 'extra' attributes
37
to be sent with your certificate request
38
A challenge password []:
39
An optional company name []:
40
</pre>
41
42
E' qui che si possono mettere le proprie informazioni rispondendo alle singole richieste (premendo invio si accetta il default mostrato fra parentesi quadre. Le ultime due richieste ('extra') possono essere vuote. In questo caso i dati della richiesta sono pubblici e non è necessaria nessuna particolare protezione del file risultante, @server.csr@.
43
44 3 Simone Piccardi
Fino a qui i passi elencati sono gli stessi di quando si deve generare richiesta di certificato da inviare ad una Certification Authority commerciale, perché questa la firmi e ci restituisca un certificato validato. In tal caso le si invierà il file @server.csr@ nelle modalità previste dalla stessa. Per creare il certificato autofirmato invece basterà usare la stessa chiave @server.key@ per firmare la richiesta @server.csr@; questo si fa eseguendo il comando:
45 1 Simone Piccardi
46
<pre>
47
openssl x509 -in server.csr -out server.crt -req  -signkey server.key -days 3650 
48
Certificate request self-signature ok
49
subject=C = IT, ST = Italy, L = Firenze, O = Truelite S.R.L., OU = IT, CN = server.truelite.it, emailAddress = info@truelite.it
50
</pre> 
51
52
dove l'opzione @-days@ consente di indicare la durata del certificato in giorni (che nel caso dell'esempio è di 10 anni). Il certificato viene creato nel file @server.crt@ ed anche in questo caso non è necessaria nessuna particolare protezione del file. 
53
54 3 Simone Piccardi
Si ricordi infine che l'uso di certificati autofirmati ha senso solo in caso di uso privato, in quanto questi non saranno mai accettati da nessuna programma di uso generico, non essendo riconosciuti da alcuna Certification Authority pubblica. Per questo per poterli usare ci si deve assicurare di essere sempre in grado di configurarne l'accettazione da parte dei client corrispondenti.  Risultano comunque utili in tutti quei casi in cui, lavorando su una rete interna, tutto quello che interessa è la cifratura dei dati nelle connessioni di rete. Qualora un servizio debba essere esposto al pubblico occorrerà ricorrere a dei certificati validi (si veda [[UsareLetsEncrypt|questa pagina]] su come fare per usare Let's Encrypt).