Command Line - Cybersecurity

Come generare un CSR con SAN tramite OpenSSL

Nell’attuale panorama della sicurezza informatica, la gestione dei certificati è un requisito imprescindibile per garantire l’integrità e l’autenticità dei servizi. Per proteggere più domini o sottodomini con un unico certificato, è necessario generare certificati che integrino dei SAN (Subject Alternative Names).

Vediamo come poter generare un CSR (Certificate Signing Request) in modo semplice.

Utilizzo di un file di configurazione

Per garantire la correttezza dei dati e la tracciabilità delle operazioni, è preferibile l’utilizzo di un file di configurazione dedicato rispetto all’inserimento dei dati via linea di comando. Questo approccio riduce drasticamente il rischio di errori nella compilazione dei campi DN (Distinguished Name).

La parte fondamentale del file è la sezione req_ext, necessaria per mappare correttamente i domini aggiuntivi

[ req ]
default_bits = 2048
prompt = no
encrypt_key = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[ dn ]
CN = server1.dominio.local
O = Societa Spa
OU = Societa
L = Citta
ST = Italy
C = IT
emailAddress = certificati@dominio.local
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = server1.dominio.local
DNS.2 = server2.dominio.local
DNS.3 = server3.dominio.local

Nel file è necessario personalizzare i campi nella sezione DN con particolare attenzione al campo CN che rappresenta il nome FQDN del servizio per cui stiamo creando il certificato.

Questo nome va riportato nella sezione alt_names alla prima riga (DNS.1) e nelle righe successive si posso aggiungere eventuali alias o sottodomini.

Salvato il file di configurazione, ad esempio RequestCSR.conf, possiamo utilizzare openssl per generare la chiave privata RSA (non cifrata per consentire l’automazione dei servizi) e il file CSR da sottoporre alla Certification Authority (CA) interna o pubblica

openssl req -new -out server1.dominio.local.csr -newkey rsa:2048 -nodes -keyout server1.dominio.local.key -config RequestCSR.conf

Verranno generati due file:

  • server1.dominio.local.csr : la richiesta da inviare alla CA
  • server1.dominio.local.key : la chiave privata (da conservare con la massima sicurezza)

Verificare il file CSR

Prima di inviare la richiesta è utile verificare che i SAN siano presenti

openssl req -noout -text -in server1.dominio.local.csr | grep -A 1 "Subject Alternative Name"

   X509v3 Subject Alternative Name:
   DNS:server1.dominio.local, DNS:server2.dominio.local, DNS:server3.dominio.local

Se, come nell’esempio, vengono visualizzati i DNS il file CSR è corretto.

Con il comando

openssl req -noout -text -in server1.dominio.local.csr

viene visualizzato l’intero contenuto del CSR. Un Certificate Signing Request è un file di testo in formato PEM che contiene:

  • la chiave pubblica (RSA o EC)
  • informazioni di identità del soggetto (CN, O, OU, L, ST, C) e SAN
  • una firma fatta con la chiave privata per dimostrare la proprietà

Conclusione

L’utilizzo del file di configurazione rende la gestione dei certificati semplice e scalabile.

Nota: i browser moderni (come Chrome e Firefox) ignorano spesso il Common Name a favore dei SAN, quindi questa procedura è essenziale per la gestione dei certificati.