Autoridad de Certificación (CA) en Linux/Configuracion

Ubicación de la CA editar

Un servidor de Autoridad de Certificación no se trata de ningún servicio que está corriendo, sino que es un espacio (repositorio, carpetas) en disco donde se guardan los certificados y la base de datos de certificados firmados.

Lo importante aquí son los permisos y quién podrá ejecutar las tareas de CA (firmar certificados). En principio puede ser cualquier usuario, por lo que el espacio podría ser /home/usuario/ca.

Así que comenzamos por cualquier carpeta en el disco, en este manual usaremos, /usr/local/ca (el directorio ca no existe, hay que crearlo).

mkdir /usr/local/ca

Archivos de datos de CA editar

La CA debe llevar dos archivos para manejo de sus tareas

serial editar

En serial se lleva el número de orden de certificados firmados. Cada vez que se firma un nuevo certificado, el número allí guardado aumenta.

Creamos el primer número, para usar (dentro de $dir):

echo "01" > serial

index.txt editar

En index.txt se guardan los datos de cada uno de los certificados firmados y de su estado (revocado, renovado, etc.). Este archivo simplemente tiene que ser creado (dentro de $dir):

touch index.txt

Directorios editar

Creamos algunos directorios bajo $dir:

 mkdir conf
 mkdir private
 mkdir certs

En conf/ se guardará el archivo de configuración que se describe más adelante.

En private/ se guardarán los certificados privados. En principio el certificado privado de la propia CA.

En certs/ se guardarán los certificados públicos firmados.

Configuración de la CA editar

Debemos crear un archivo de configuración $dir/conf/caconfig.cnf (el nombre puede ser cualquiera). Con el siguiente contenido:

#..................................
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /usr/local/ca
serial = $dir/serial
database = $dir/index.txt
new_certs_dir = $dir/certs
certificate = $dir/certs/cacert.pem
private_key = $dir/private/cakey.pem
default_days = 365
default_md = md5
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 1024 # para tamano llave
default_keyfile = key.pem # nombre de las llaves
default_md = md5 # algoritmo de menssage digest
string_mask = nombstr # caracteres permitidos
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
# Como es el prompt
#------------------------- ----------------------------------
0.organizationName = Nombre de la Organización (empresa)
organizationalUnitName = Unidad organizacional (departamento, division)
emailAddress = Dirección de e-mail
emailAddress_max = 40
localityName = Localidad (ciudad)
stateOrProvinceName = Departamento (provincia)
countryName = País (código 2 letras)
countryName_min = 2
countryName_max = 2
commonName = Nombre Común (dominio, IP, hostname)
commonName_max = 64
# Valores por defecto, para escribir menos cada vez
#------------------------ ------------------------------
0.organizationName_default = Febril S.A.
localityName_default = MONTEVIDEO
stateOrProvinceName_default = MONTEVIDEO
countryName_default = UY
emailAddress_default = info@febril.com.uy
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash

Este archivo permite automatizar las tareas de una CA para firmar certificados en nombre de la organizationName, para sus servidores (computadores) y/o personas.