7.3. Certificati

Ora creiamo le richieste di certificato che ci interessano (ad es. per il servizio web):

	$ openssl req -new -keyout $CADIR/certs/web_key.pem \
	    -out $CADIR/certs/web_req.pem -days 1097 -nodes
      
durante la creazione ci verranno chiesti l'OU ed il CN, da riempiere rispettivamente con la tipologia del servizio ed il dn a cui fa riferimento il servizio.

I subjectAltName, quelle simpatiche estensioni di X.509v3, verranno specificate nei file extension (presenti in /opt/ca/ext) e verranno aggiunti quando la richiesta verrà firmata utilizzando il certificato di root della CA.

L'opzione -nodes ci permette di non cifrare la chiave, così da non dover inserire nessuna password durante la gestione e l'utilizzo della stessa. Nel caso venga fatta una richiesta senza l'opzione -nodes, per eliminare la password dalla chiave basterà eseguire il comando

	$ openssl rsa -in $CADIR/certs/web_key.pem \
	    -out $CADIR/certs/web_key.pem
      

Vediamo la richiesta di certificato:

	$ openssl req -text -noout -in $CADIR/certs/web_req.pem
      
Firmiamo il certificato appena creato:
	$ openssl ca -days 1097 -policy policy_anything \
	    -out $CADIR/certs/web_cert.pem \
	    -extfile $CADIR/ext/webserver.ext \
	    -infiles $CADIR/certs/web_req.pem
      

Ora sarà possibile eliminare web_req.pem e portare (nel caso del certificato per il server web) il certificato web_cert.pem e la rispettiva chiave web_key.pem su ogni server.

Vediamo come è stato modificato il nostro certificato:

	$ openssl x509 -text -noout -in $CADIR/certs/web_cert.pem
      
Possiamo notare l'aggiunta di alcune estensioni (definite nel file /opt/ca/ext/webserver.ext), prima non presenti. Questo è il contenuto del file:
basicConstraints        = CA:false
nsCertType              = server
keyUsage                = nonRepudiation, digitalSignature, \
                          keyEncipherment, dataEncipherment
extendedKeyUsage        = serverAuth
nsComment               = "web services"
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid, issuer:always
subjectAltName          = @subject_alt_name
issuerAltName           = issuer:copy
nsCaRevocationUrl       = http://dominio.org/crl/cacrl.crl
nsRevocationUrl         = http://dominio.org/crl/cacrl.crl
crlDistributionPoints   = @cdp_section


[ subject_alt_name ]
DNS.1=dominio.org
DNS.2=www.dominio.org
DNS.3=altro.dominio.org
email=copy

[ cdp_section ]
URI.1=http://dominio.org/crl/cacrl.crl
      

Per creare i certificati per tutti gli altri servizi basterà cambiare opportunamente i nomi delle richieste, delle chiavi e dei certificati.