# Costruzione di una INTERMEDIATE 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-intermediate-ca.key -text -noout 
 
openssl genpkey -aes256 -algorithm EC -pkeyopt ec_paramgen_curve:P-384 -out private\abc-intermediate-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-intermediate-ca.key
 
# 2. Creazione di una nuova richiesta di certificato per INTERMEDIATE CA 
#    (CSR - Certificate Signing Request).
#    Il file di richiesta (estensione .csr) e' memorizzato nella cartella "csr".

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

# 3. Verifica della richiesta.

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

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

# 5. Verifica del contenuto del certificato della INTERMEDIATE CA con il comando:
    
openssl x509 -noout -text -in certs\abc-intermediate-ca.crt

# 6. Creazione della catena di certificati (INTERMEDIATE CA e ROOT CA)

copy certs\abc-intermediate-ca.crt+..\ROOT-CA\certs\abc-root-ca.crt certs\abc-chain-ca.crt

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

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

# 8. Visualizzazione della CRL (Certificate Revocation List)

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

# 9. Creazione del certificato del SERVER (richiede il file CSR di quest'ultimo) di durata 2 anni.

openssl ca -days 730 -in csr\server-01.csr -out newcerts\server-01.crt

# 10. Creazione del certificato del CLIENT (richiede il file CSR di quest'ultimo) di durata un anno. 

openssl ca -policy policy_client_cert -extensions v3_client_cert -days 365 -in csr\client-01.csr -out newcerts\client-01.crt
