A/I Orange Book (1.0): Un how-to sulla replicazione e distribuzione di una rete resistente di server autogestiti | ||
---|---|---|
Indietro | Avanti |
Per gestire le connessioni SSL di tutti gli utenti su tutti i server, abbiamo ritenuto opportuna la creazione di una propria Certification Authority, che possa firmare tutti i certificati SSL utilizzati dai vari server, facendo sì che essi possano riconoscersi tra di loro e dagli utenti.
Siccome è stato necessario implementare delle cose non banali (come ad esempio la possibilità di avere certificati validi per più nomi differenti di uno stesso server), abbiamo aggiunto questo capitolo con un breve how-to che altri potrebbero trovare utile.
Come directory dove mantenere e gestire i certificati utilizzeremo /opt/ca:
$ export CADIR=/opt/ca $ mkdir -p $CADIRcreiamo la struttura delle directory ed alcuni file necessari alla CA:
$ mkdir $CADIR/certs $ mkdir $CADIR/conf $ mkdir $CADIR/crls $ mkdir $CADIR/ext $ mkdir $CADIR/newcerts $ mkdir $CADIR/private $ chmod g-rwx,o-rwx private $ echo '01' > serial $ > indexserial conterrà il prossimo seriale da utilizzare, mentre index è un database contenente i riferimenti ai certificati firmati dalla CA.
Ora creiamo una configurazione per la nostra CA. Quella utilizzata di default da OpenSSL nella distribuzione Debian sarge è /etc/ssl/openssl.cnf.
Per la nostra CA utilizzeremo il file di configurazione /opt/ca/conf/ca.conf. Per farlo utilizzare correttamente ad openssl, senza specificarlo nella linea di comando, basterà esportare il percorso nella variabile OPENSSL_CONF.
$ export OPENSSL_CONF=$CADIR/conf/aica.conf
Il contenuto di ca.conf:
RANDFILE = $ENV::CADIR/.random [ ca ] default_ca = CA_default [ CA_default ] dir = $ENV::CADIR certs = $dir/certs crl_dir = $dir/crl database = $dir/index new_certs_dir = $dir/newcerts certificate = $dir/ca.pem serial = $dir/serial crl = $dir/crl.pem private_key = $dir/private/ca.key x509_extensions = certificate_extensions email_in_dn = no default_days = 3643 default_crl_days = 31 default_md = sha1 preserve = yes policy = policy_match [ policy_match ] countryName = supplied organizationName = supplied organizationalUnitName = optional commonName = supplied emailAddress = supplied [ policy_anything ] countryName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 4096 default_md = sha1 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca string_mask = nombstr [ req_distinguished_name ] countryName = Country Name countryName_default = IT countryName_min = 2 countryName_max = 2 0.organizationName = Organization Name 0.organizationName_default = Intra.Org organizationalUnitName = Organizational Unit Name organizationalUnitName_default = commonName = Common Name commonName_max = 64 emailAddress = Email Address emailAddress_max = 60 emailAddress_default = ca@infra.org SET-ex3 = SET extension number 3 [ req_attributes ] [ certificate_extensions ] [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = critical, CA:true keyUsage = cRLSign, keyCertSign nsCertType = sslCA, emailCA, objCA nsComment = "InfraCA" subjectAltName=email:copy issuerAltName=issuer:copy