# Costruzione di una ROOT CA
# 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-384.
#    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\abc-root-ca.key -text -noout 
 
openssl genpkey -aes256 -algorithm EC -pkeyopt ec_paramgen_curve:P-384 -out private\abc-root-ca.key

# 1b. (Alternativo a 1a) Creazione della coppia di  chiavi RSA 4096 bit.
#    openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out private\abc-root-ca.key
 
# 2. Creazione di una nuova richiesta di certificato per ROOT CA 
#    (CSR - Certificate Signing Request).
#    Il file di richiesta (estensione .csr) e' memorizzato nella cartella "csr".

openssl req -new -key private\abc-root-ca.key -text -out csr\abc-root-ca.csr

# 3. Verifica della richiesta.

openssl req -noout -text -in csr\abc-root-ca.csr

# 4. Creazione del certificato autofirmato per ROOT CA  a partire dal file CSR di durata 20 anni.
#    Il certificato prodotto (estensione .crt) e' memorizzato nella cartella "newcerts".

openssl ca -extensions v3_root_cert -selfsign -days 7300 -in csr\abc-root-ca.csr -out newcerts\abc-root-ca.crt

# 5. Spostare il nuovo file .crt generato dalla sottocartella "newcerts"  alla
     sottocartella "certs" e verificarne il contenuto con il comando:
    
openssl x509 -noout -text -in certs\abc-root-ca.crt

# 6. Creazione della CRL (Certificate Revocation List) nei formati testuali e binari (DER)

openssl ca -gencrl -out crl\abc-root-ca.crl
openssl crl -in crl\abc-root-ca.crl -out crl\abc-root-ca-crl.der -outform DER
openssl crl -in crl\abc-root-ca-crl.der -inform DER -out crl\abc-root-ca.crl -text

# 7. Visualizzazione della CRL (Certificate Revocation List)

openssl crl -in crl\abc-root-ca.crl -noout -text

# 8. Creazione del certificato della Intermediate CA (richiede il file CSR di quest'ultima) di durata 10 anni.
#    Il certificato è salvato due volte nella sottocartella "newcerts"; una volta con il nome indicato
#    (questa copia può essere spostata in un'altra cartella) e una con il numero di serie. 

openssl ca -extensions v3_intermediate_cert -days 3650 -in  csr\abc-intermediate-ca.csr -out newcerts\abc-intermediate-ca.crt
