Integración de CFSSL con el Gestor de Certificados Lemur
En elartículo anterior sobre el gestor de certificados de Lemur, no hemos utilizado ninguna Autoridad de Certificación (CA) raíz de terceros para los certificados del cliente. Por lo tanto, en este tutorial, la PKI se configurará utilizando CFSSL (SSL de Cloudflare) y se integrará con el proyecto Lemur. Actualmente, no hay ningún documento que ayude al usuario a integrar CFSSL con la configuración de Lemur.
Nota: Como estamos utilizando CFSSL como autoridad raíz de terceros, primero tenemos que configurarlo en una máquina separada (sin embargo, lo configuramos en la misma caja de Lemur) y después cambiar el archivo conf de Lemur para utilizar CFSSL para la firma del certificado.
Instalación de CFSSL
El CloudFlare SSL se implementa utilizando el lenguaje de programación «Go», por lo que se requiere la instalación del paquete «go» en la máquina. El siguiente comando instalará el paquete requerido en la máquina.
1. Instalar Go
El paquete Go se instalará desde el código fuente.
wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
Extrae el archivo descargado e instálalo en la ubicación deseada del sistema. Nosotros lo instalamos en el directorio /usr/local. También puedes ponerlo en la ubicación deseada del sistema.
tar -xzvf go1.10.1.linux-amd64.tar.gz
mv go /usr/local
Tras la instalación del paquete Go, también es necesario establecer una variable de entorno para el binario Go. (Puedes añadirla en el perfil de usuario para que sea una configuración permanente).Normalmente necesitas establecer 3 variables de entorno comoGOROOT,GOPATH yPATH.
GOROOTes la ubicación donde se instala el paquete Go en tu sistema.
export GOROOT=/usr/local/go
GOPATHes la ubicación de tu directorio de trabajo.
export GOPATH=$HOME/go
Ahora establece lavariablePATHpara acceder al binario de Go en todo el sistema.
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
2. Prueba el comando Go
Ahora escribe el comando «go» en el terminal. Se mostrará la salida como la siguiente captura de pantalla.
go
3. Instalar CFSSL
Tenemos que instalar CFSSL en esta plataforma Ubuntu. Si las variables de entorno necesarias para GO están bien configuradas, el proceso de instalación de CFSSL será fácil.
a. El siguiente comando descargará la utilidad CFSSL y la construirá en la ruta $GOPATH/bin/.
go get -u github.com/cloudflare/cfssl/cmd/cfssl
b. El siguiente comando instalará el plugin json del paquete CFSSL. Es necesario porque CFSSL maneja peticiones JSON.
go get -u github.com/cloudflare/cfssl/cmd/cfssljson
c. Simplemente instala todos los programas de CFSSL utilizando el comando que se indica a continuación. Este comando descargará, construirá e instalará todos los programas de utilidad (incluyendo cfssl, cfssljson y mkbundle entre otros) en el directorio $GOPATH/bin/.
go get -u github.com/cloudflare/cfssl/cmd/...
Como se muestra a continuación, ejecuta el comando «cfssl» en el terminal y te mostrará todo el funcionamiento soportado por la PKI de CFSSL.
Configuración de la PKI de CFSSL
Ahora, la aplicación cfssl se utilizará para configurar la PKI del proyecto Lemur. Los archivos de configuración «CSR_configuration» y «signing_configuration» son importantes en la configuración de CFSSL. El archivo de configuración «CSR» contiene la configuración del par de claves que vas a crear y la configuración «Signing», como su nombre indica, establece las reglas de configuración.
Crear CA RAÍZ
Para la CA raíz, comprueba el siguiente archivo de configuración del CSR (que llamaremos csr_ROOT_CA.json):
- csr_ROOT_CA.json
{ "CN": "MY-ROOT-CA", "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "UK", "L": "London", "O": "My Organisation", "OU": "My Organisational Unit Inside My Organisation" } ], "ca": { "expiry": "262800h" } }
A continuación se ofrece una breve explicación de los diferentes campos.
- El archivo de configuración sigue el esquema de nomenclatura X.509, por lo que son necesarios los siguientes campos:
- CN (Nombre común) – El nombre de la entidad. En el caso de la CA Raíz, es el Nombre de la CA Raíz;
- C (País)
- L (Ubicación)
- O (Organización)
- OU (Unidad organizativa)
- Ahora, una serie de campos específicos son propios de CFSSL:
- CLAVE – Define las características de las claves:
- Algo – Especifica el algoritmo. Puede ser «rsa» o «ecdsa», para los algoritmos RSA o ECDSA, respectivamente. Ahora bien, siempre se recomienda ECDSA si los dispositivos heredados no son relevantes, pero esto sólo se aplica a los dispositivos de menos de dos o tres años. En caso contrario, se utilizará RSA.
- Tamaño – Especifica el tamaño de la clave. Para la clave ecdsa se utilizará 256. Para las claves RSA, los valores recomendados son 2048 o 4096.
- ca – Define las características de la CA y en este caso la validez de la clave, en horas, sí, en horas. En este caso es de 30 años (24x356x30), ya que la autoridad raíz durará el tiempo que hayas previsto para la seguridad de la clave raíz.
- CLAVE – Define las características de las claves:
Ahora, ejecuta el siguiente comando para crear realmente la CA raíz para el Lemur.
cfssl gencert -initca csr_ROOT_CA.json | cfssljson -bare root_ca
El comando anterior creará los siguientes archivos en la máquina
- root_ca.csr – La solicitud de firma del certificado de la CA raíz, que no tiene sentido para la CA raíz, y por tanto nunca se utilizará. Ya que la CA raíz está autofirmada.
- root_ca.pem – El certificado de la CA raíz. Este es el archivo que tú y que debes distribuir al máximo.
- root_ca.key – Esta es la clave de la CA raíz. Mantén este archivo seguro y protegido, como si tu vida dependiera de él. Para una CA Raíz pública esto es realmente la verdad.
La CA Raíz está autofirmada, así que pasa al siguiente paso para la generación de una CA intermedia.
CA intermedia
La generación de la CA intermedia no es obligatoria, pero corresponde a una buena práctica. El objetivo final de tener una CA intermedia, es tener un paso intermedio en términos de seguridad. Normalmente. la clave de la CA Raíz se guarda en una máquina sin conexión, y sólo se utiliza cuando se necesita firmar un certificado de CA intermedia.
El archivo de configuración «csr_INTERMEDIATE_CA.json» es necesario para crear una CA intermedia.
- csr_INTERMEDIATE_CA.json – La solicitud de firma del certificado para la CA intermedia
{ "CN": "My-Intermediate-CA", "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "UK", "L": "London", "O": "My Organisation", "OU": "My Organisational Unit Inside My Organisation" } ], "ca": { "expiry": "42720h" } }
El archivo «root_to_intermediate_ca.json» contiene la configuración de firma de la CA raíz.
{
"signing": { "default": { "usages": ["digital signature","cert sign","crl sign","signing"], "expiry": "262800h", "ca_constraint": {"is_ca": true, "max_path_len":0, "max_path_len_zero": true} } } }
Este archivo contiene los parámetros más relevantes para un certificado.
- Usos – Qué usos puede realizar el certificado que se está firmando. Las opciones que admite CFSSL son las siguientes:
- «firma digital»,
- «cert sign»,
- «crl sign»,
- «firma»
- etc.
- is_ca – este campo sólo es aplicable para generar certificados de CAs intermedias, y permite que el certificado generado firme otros certificados. Si dejas este campo en un certificado de dispositivo final, será rechazado por los navegadores y sistemas operativos más comunes.
El siguiente comando creará una CA intermedia con la configuración mencionada.
cfssl gencert -initca csr_INTERMEDIATE_CA.json | cfssljson -bare intermediate_ca
El comando anterior creará los siguientes archivos de la CA intermedia.
- intermediate_ca.csr – La solicitud de firma del certificado de la CA intermedia.
- intermediate_ca.pem – El certificado de la CA intermedia, no firmado por nadie, y por tanto inútil.
- intermediate_ca.key – Es la clave de la CA intermedia. Mantén este archivo seguro y protegido.
El siguiente comando muestra la firma del certificado de la CA intermedia por parte de la CA raíz.
cfssl sign -ca root_ca.pem -ca-key root_ca-key.pem -config root_to_intermediate_ca.json intermediate_ca.csr | cfssljson -bare intermediate_ca
El comando anterior firmará el archivo intermediate_ca.pem. Ahora la configuración de la CA Raíz e Intermedia está completa. Es importante mantener las claves de la CA Raíz y los archivos de configuración seguros y protegidos. El siguiente paso es crear un certificado para el dispositivo cliente o el cliente. Aquí integraremos la configuración de CFSSL con el proyecto Lemur y se generará el certificado del cliente.
Ejecutar la PKI de CFSSL
Para ejecutar la PKI basada en CFSSL, entra en el directorio certs y ejecuta el siguiente comando.
cfssl serve -address 192.168.10.151 -ca root_ca.pem -ca-key root_ca-key.pem -port 8888
La salida del comando anterior será la siguiente
root@test-vm:/home/john/Desktop/certs# cfssl serve -address 192.168.10.151 -ca root_ca.pem -ca-key root_ca-key.pem -port 8888
2018/05/20 16:35:18 [INFO] Initializing signer
2018/05/20 16:35:19 [WARNING] couldn't initialize ocsp signer: open : no such file or directory
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/scaninfo' is enabled
2018/05/20 16:35:19 [WARNING] endpoint 'ocspsign' is disabled: signer not initialized
2018/05/20 16:35:19 [INFO] endpoint '/' is enabled
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/info' is enabled
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/gencrl' is enabled
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/scan' is enabled
2018/05/20 16:35:19 [WARNING] endpoint 'crl' is disabled: cert db not configured (missing -db-config)
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/certinfo' is enabled
2018/05/20 16:35:19 [WARNING] endpoint 'revoke' is disabled: cert db not configured (missing -db-config)
2018/05/20 16:35:19 [INFO] bundler API ready
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/bundle' is enabled
2018/05/20 16:35:19 [INFO] setting up key / CSR generator
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/newkey' is enabled
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/init_ca' is enabled
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/sign' is enabled
2018/05/20 16:35:19 [WARNING] endpoint 'authsign' is disabled: {"code":5200,"message":"Invalid or unknown policy"}
2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/newcert' is enabled
2018/05/20 16:35:19 [INFO] Handler set up complete.
2018/05/20 16:35:19 [INFO] Now listening on 192.168.10.151:8888
La dirección ip de la máquina es 192.168.10.151 y el puerto es 8888. Permite este puerto en el cortafuegos para utilizar el CFSSL.
NOTA: El siguiente comando sólo sirve de guía para utilizar la utilidad cfssl.
{ cfssl serve [-address address] [-ca cert] [-ca-bundle bundle] \
[-ca-key key] [-int-bundle bundle] [-int-dir dir] [-port port] \
[-metadata file] [-remote remote_host] [-config config] \
[-responder cert] [-responder-key key] [-db-config db-config] }
Ahora, la configuración del CFSSL está completa y se está ejecutando en la máquina. El siguiente paso es la integración de la CFSSL con Lemur.
Configuración de Lemur para la PKI de CFSSL
Ahora se modificará el archivo de configuración «lemur.conf.py» del Lemur (como la URL, el ROOT y las claves intermedias). El archivo de configuración incluirá la información sobre la CFSSL. La ruta del archivo de configuración de lemur es «/home/lemur/.lemur/lemur.conf.py».
CFSSL_URL ="http://192.168.10.151:8888"
CFSSL_ROOT ="""-----BEGIN CERTIFICATE-----
MIICcjCCAhegAwIBAgIUahfYPc4RpK92G1ZHhu3q9URvf+8wCgYIKoZIzj0EAwIw
9UmEM4IEd2j8/w4WdTYaBE5EzwIhAN3oW9iAmjcyzC/7BPIY/Sr+twig/+XwnQ8T
hKXP2OHd
-----END CERTIFICATE-----"""
CFSSL_INTERMEDIATE ="""-----BEGIN CERTIFICATE-----
MIICfDCCAiKgAwIBAgIUEeb8Duel8wySG61vCM2UEUD15XQwCgYIKoZIzj0EAwIw
qM9lE82tku/b6SMxAlBByQ==
-----END CERTIFICATE-----"""
Ahora, ejecuta el comando «lemur start» para utilizar el lemur.conf.py con la configuración CFSSL.
Crear certificados con CFSSL
Siguiendo nuestro artículo anterior sobre el Lemur, accede al panel de control para crear certificados de cliente utilizando la CA raíz de CFSSL. En primer lugar, crea una nueva Autoridad de Certificación y selecciona el plugin CFSSL como CA Raíz.
1. Establece los diferentes parámetros de la nueva autoridad.
2. selecciona el plugin CFSSL recién configurado como CA Raíz.
Después de configurar la nueva Autoridad de Certificación en el Lemur, el siguiente paso es generar un certificado utilizando el plugin CFSSL recién configurado.