Autoridad de Certificación (CA) en Linux/Configuracion
Ubicación de la CA
editarUn 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
editarLa CA debe llevar dos archivos para manejo de sus tareas
serial
editarEn 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
editarEn 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
editarCreamos 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
editarDebemos 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.