# Creazione del certificato digitale per un CLIENT
# 2023 - prof. Roberto Fuligni
#
# 0. Operazioni preliminari: 
#    Mostra la versione del software "openssl"
#    Elenca i parametri di tipo  "Elliptic Curves" supportati

openssl version -a
openssl ecparam -list_curves

# 1a. Creazione della coppia di chiavi EC basata sulla curva P-256.
#    Il file contenente le chiavi (di estensione .key) e' memorizzato nella 
#    sottocartella "private" ed e' protetto mediante password e 
#    algoritmo di cifratura AES256.
#    Per visualizzare le chiavi: openssl pkey -in private\client-01.key -text -noout 
 
openssl genpkey -aes256 -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out private\client-01.key

# 1b. (Alternativo a 1a) Creazione della coppia di  chiavi RSA 2048 bit.
#    openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private\client-01.key
 
# 2. Creazione di una nuova richiesta di certificato per il client 
#    (CSR - Certificate Signing Request).
#    Il file di richiesta (estensione .csr) e' memorizzato nella cartella "csr".
#    Il nome principale del client (CN, Common Name) è Mario rossi.
#    L'indirizzo e-mail principale è rossi@abcsoluzioni.eu
#    Il client dispone anche di due indirizzi e-mail secondari 

openssl req -new -key private\client-01.key -subj "/C=IT/ST=Novara/L=Novara/O=ABC Soluzioni/CN=Mario Rossi/emailAddress=rossi@abcsoluzioni.eu" -addext "subjectAltName = email:mario.rossi@abcsoluzioni.eu, email:m.rossi@abcsoluzioni.eu" -text -out csr\client-01.csr

# 3. Verifica della richiesta.

openssl req -noout -text -in csr\client-01.csr

# 4. Invio della richiesta di certificato CSR alla INTERMEDIATE CA e memorizzazione del certificato ricevuto
#    nella sottocartella "certs".

# 5. Verifica del contenuto del certificato del CLIENT con il comando:
    
openssl x509 -noout -text -in certs\client-01.crt

# 6. Esportazione delle chiavi del CLIENT e della catena di certificati (CLIENT, INTERMEDIATE e ROOT CA)
#    in formato PKCS#12 (con password di protezione)

openssl pkcs12 -export -out pkcs12\client-01.p12 -inkey private\client-01.key -in certs\client-01.crt -certfile ..\INTERMEDIATE-CA\certs\abc-chain-ca.crt 

# 7. Visualizzazione del contenuto del file PKCS#12

openssl pkcs12 -in pkcs12\client-01.p12 -info -passout pass:
