User Tools

Site Tools


hannibal:ca

The Openssl software offers all the features that are required to create ourselves some certificate requests and/or self-signed certificates. Note that the Fedora Directory Server does NOT support openssl. It uses the Network Security Services (NSS) library available from the Mozilla Project (http://www.mozilla.org/projects/security/). So we'll use that for the Fedora Directory Server and openssl for all other applications.

First install the software, allthough it might already be present on your system.

apt-get install openssl

Configure /etc/ssl/openssl.cnf

 HOME                    = .
 RANDFILE                = $ENV::HOME/.rnd
 oid_section             = new_oids
 [ new_oids ]
 [ ca ]
 default_ca      = CA_default            # The default ca section
 [ CA_default ]
 dir             = ./hannibalCA          # Where everything is kept
 certs           = $dir/certs            # Where the issued certs are kept
 crl_dir         = $dir/crl              # Where the issued crl are kept
 database        = $dir/index.txt        # database index file.
 new_certs_dir   = $dir/newcerts         # default place for new certs.
 certificate     = $dir/cacert.pem       # The CA certificate
 serial          = $dir/serial           # The current serial number
 crl             = $dir/crl.pem          # The current CRL
 private_key     = $dir/private/cakey.pem# The private key
 RANDFILE        = $dir/private/.rand    # private random number file
 x509_extensions = usr_cert              # The extentions to add to the cert
 name_opt        = ca_default            # Subject Name options
 cert_opt        = ca_default            # Certificate field options
 default_days    = 730                   # how long to certify for
 default_crl_days= 30                    # how long before next CRL
 default_md      = md5                   # which md to use.
 preserve        = no                    # keep passed DN ordering
 policy       [ policy_match ]
 countryName             = match
 stateOrProvinceName     = match
 organizationName        = match 
 organizationalUnitName  = optional
 commonName              = supplied
 emailAddress            = optional
 [ req ]
 default_bits            = 1024
 default_keyfile         = privkey.pem
 distinguished_name      = req_distinguished_name
 attributes              = req_attributes
 x509_extensions = v3_ca # The extentions to add to the self signed cert
 string_mask = nombstr
 [ req_distinguished_name ]
 countryName                     = Country Name (2 letter code)
 countryName_default             = NL
 countryName_min                 = 2
 countryName_max                 = 2
 stateOrProvinceName             = State or Province Name (full name)
 stateOrProvinceName_default     = NH
 localityName                    = Locality Name (eg, city)
 localityName_default            = Amsterdam
 0.organizationName              = Organization Name (eg, company)
 0.organizatioorganizationalUnitName          = Organizational Unit Name (eg, section)
 organizationalUnitName_default  = NOC
 commonName                      = Common Name (eg, YOUR name)
 commonName_default              = CA
 commonName_max                  = 64
 emailAddress                    = Email Address
 emailAddress_default            = postmaster@intra.example.com
 emailAddress_max                = 64
 [ req_attributes ]
 challengePassword               = A challenge password
 challengePassword_min           = 4
 challengePassword_max           = 20
 unstructuredName                = An optional company name
 [ usr_cert ]
 basicConstraints=CA:FALSE
 nsComment                       = "OpenSSL Generated Certificate"
 subjectKeyIdentifier=hash
 authorityKeyIdentifier=keyid,issuer:always
 [ v3_req ]
 basicConstraints = CA:FALSE
 keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 [ v3_ca ]
 subjectKeyIdentifier=hash
 authorityKeyIdentifier=keyid:always,issuer:always
 basicConstraints = CA:true
 [ crl_ext ]
 authorityKeyIdentifier=keyid:always,issuer:always

Create a Certificate Authority for your site:

 cd /usr/lib/ssl/misc
 ./CA.sh -newca

Or create the Certificate Authority by hand; something like

 mkdir /opt/exampleca
 cd /opt/exampleca
 mkdir certs private
 chmod 700 private
 echo '01' > serial
 touch index.txt

Remember to adjust openssl.cnf accordingly;

Then create your CA's private key and your CA's public cert

openssl req -x509 -newkey rsa -out cacert.pem -outform PEM

Do a certificate request per necessary certificate. You can modify the CA.sh script in order to prevent having to enter passphrases per certificate (add the option -nodes)

./CA.sh -newreq

Or issue the openssl-command by hand:

openssl req -newkey rsa:1024 -nodes -keyout newkey.pem -keyform PEM -nodes -out newreq.pem -outform PEM

Sign the newly created certificates

./CA.sh -sign

Or issue the openssl-command by hand:

openssl ca -in newreq.pem

Remember to protect the newly generated keys

chmod 600 *req*
hannibal/ca.txt · Last modified: 2008/06/25 11:44 by Olivier Brugman