Creating CA
- By Abhishek Bajpai
- Sat 17 October 2015
Create a {% highlight sh %} [ ca ]
man ca
default_ca = CA_default
[ CA_default ]
Directory and file locations.
dir = ./ certs = $dir/certs crl_dir = $dir/crl new_certs_dir = $dir/newcerts database = $dir/index.txt serial = $dir/serial RANDFILE = $dir/private/.rand
The root key and root certificate.
private_key = $dir/private/ca.key.pem certificate = $dir/certs/ca.cert.pem
For certificate revocation lists.
crlnumber = $dir/crlnumber crl = $dir/crl/ca.crl.pem crl_extensions = crl_ext default_crl_days = 30
SHA-1 is deprecated, so use SHA-2 instead.
default_md = sha256 name_opt = ca_default cert_opt = ca_default default_days = 375 preserve = no policy = policy_strict
[ policy_strict ]
The root CA should only sign intermediate certificates that match.
See the POLICY FORMAT section of man ca
.
countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
[ policy_loose ]
Allow the intermediate CA to sign a more diverse range of certificates.
See the POLICY FORMAT section of the ca
man page.
countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
[ req ]
Options for the req
tool (man req
).
default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only
SHA-1 is deprecated, so use SHA-2 instead.
default_md = sha256
Extension to add when the -x509 option is used.
x509_extensions = v3_ca
[ req_distinguished_name ]
See https://en.wikipedia.org/wiki/Certificate_signing_request.
countryName = IN stateOrProvinceName = Maharashtra localityName = Mumbai 0.organizationName = Anushakti Nagar organizationalUnitName = Nilgiri commonName = Common Name emailAddress = abhisheietk@gmail.com
Optionally, specify some defaults.
countryName_default = IN stateOrProvinceName_default = Maharashtra localityName_default = 0.organizationName_default = Anushakti Nagar
organizationalUnitName_default =
emailAddress_default =
[ v3_ca ]
Extensions for a typical CA (man x509v3_config
).
subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ v3_intermediate_ca ]
Extensions for a typical intermediate CA (man x509v3_config
).
subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true, pathlen:0 keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
Extensions for client certificates (man x509v3_config
).
basicConstraints = CA:FALSE nsCertType = client, email nsComment = “OpenSSL Generated Client Certificate” subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, emailProtection
[ server_cert ]
Extensions for server certificates (man x509v3_config
).
basicConstraints = CA:FALSE nsCertType = server nsComment = “OpenSSL Generated Server Certificate” subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth
[ crl_ext ]
Extension for CRLs (man x509v3_config
).
authorityKeyIdentifier=keyid:always
[ ocsp ]
Extension for OCSP signing certificates (man ocsp
).
basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = critical, OCSPSigning
{% highlight sh %}
!/usr/bin/bash
CADIR=${1} for i in certs private newcerts do mkdir -p ${CADIR}/${i} done cp ca.cnf ${CADIR}/openssl.cnf openssl genrsa -aes256 -out private/ca.key.pem 4096 openssl req -config openssl.cnf -key private/ca.key.pem -new -x509 -days 7300 -sha256 -extensions v3_ca -out certs/ca.cert.pem