Crear una Certification Authority

El "home" de la CA

mkdir -pv ${HOME}/ca_dir
mkdir -pv ${HOME}/ca_dir/certs
mkdir -pv ${HOME}/ca_dir/private
mkdir -pv ${HOME}/ca_dir/reqs
mkdir -pv ${HOME}/ca_dir/signed_certs
chmod g-rwx,o-rwx ${HOME}/ca_dir/private
touch ${HOME}/ca_dir/index.txt
echo '01' > ${HOME}/ca_dir/serial
echo "export CA_DIR=${HOME}/ca_dir" >> ${HOME}/.bashrc
echo "export OPENSSL_CONF=${CA_DIR}/openssl.cnf" >> ${HOME}/.bashrc

openssl.conf de la CA

[ ca ]
default_ca = nuestra_ca
[ nuestra_ca ]
dir           = /home/ca/ca_dir
certificate   = $dir/cacert.pem
database      = $dir/index.txt
new_certs_dir = $dir/certs
private_key   = $dir/private/cakey.pem
serial        = $dir/serial
default_crl_days = 7
default_days     = 120
default_md       = md5
policy          = nuestra_ca_policy
x509_extensions = certificate_extensions
[ nuestra_ca_policy ]
commonName             = supplied
stateOrProvinceName    = supplied
countryName            = supplied
emailAddress           = supplied
organizationName       = supplied
organizationalUnitName = optional
[ certificate_extensions ]
basicConstraints = CA:false
# data for creating self-signed certificate
[ req ]
default_bits        = 2048
default_keyfile     = /home/ca/ca_dir/private/cakey.pem
default_md          = md5
prompt              = no
distinguished_name  = nuestra_ca_distinguished_name
string_mask         = utf8only
x509_extensions     = nuestra_ca_extensions
[ nuestra_ca_distinguished_name ]
commonName          = Nuestra Certification Authority
stateOrProvinceName = Ciudad Autónoma de Buenos Aires
countryName         = AR
emailAddress        = cert_auth@example.org
organizationName    = Nuestra Certification Authority
[ nuestra_ca_extensions ]
basicConstraints = CA:true

Crear el certificado de la CA

Con el openssl.conf armado, y asegurándonos de tener inicializadas las variable de entorno ${CA_DIR}  y ${OPENSSL_CONF} , creamos un certificado raíz autofirmado (con validez por dos años = 730 días):

openssl req -x509 -utf8 -newkey rsa:2048 -days 730 -out ${CA_DIR}/cacert.pem -outform PEM

Nos va a pedir una passphrase para la clave privada. Esta passphrase debe ser MUY buena (en realidad, hasta deberíamos guardar toda la CA off-line).

# no estoy muy seguro de esto :-(
openssl x509 -in ${CA_DIR}/cacert.pem -outform DER -out ${CA_DIR}/cacert.der

Y hagamos una copia de la clave privada en formato DER...

/!\ OJO /!\ Por algún motivo esto no encripta la clave privada, con lo cual no recomiendo pasar la clave privada a formato DER... espero que alguien conteste mi consulta en la lista

Lamentablemente, no hay forma de pedirle razonablemente al comando que nos pida la passphrase para encriptar la nueva clave privada, entonces:

openssl rsa -in ${CA_DIR}/private/cakey.pem -passout file:${CA_DIR}/private/cakey.pass -outform DER -out ${CA_DIR}/private/cakey.der

ver el certificado de la CA

openssl x509 -in ${CA_DIR}/cacert.pem -text -noout -nameopt oneline,-esc_msb

openssl rsa -in ${CA_DIR}/private/cakey.pem -text -noout

Listo.

OpenSsl/CrearUnaCertificationAuthority (última edición 2008-11-20 09:09:45 efectuada por MarianoAbsatz)