Configuración Openssl

En la configuración de Openssl lo que vamos a hacer es establecer una autoridad certificadora y emitir los certificados necesarios, tanto para las conexiones cifradas como para el acceso EAP-TLS.

Crear una autoridad certificadora

Tenemos que crear una estructura de directorios adecuada u las llaves privada y pública, así como un fichero  índice para los certificados generados por esta autoridad.

Crear la estructura de directorios

        mkdir -p /etc/pki/CA
        mkdir -p /etc/pki/CA/certs
        mkdir -p /etc/pki/CA/crl
        mkdir -p /etc/pki/CA/newcerts
        mkdir -p /etc/pki/CA/private

Crear el fichero índice

Simplemente creamos el fichero

        touch /etc/pki/CA/index.txt

Crear los certificados de la CA

Vamos a crear el certificado con una caducidad de 10 años, 3650 días:

  openssl req -new -keyout /etc/pki/CA/private/cakey.pem \
                      -out /etc/pki/CA/careq.pem
 openssl ca -create_serial -out /etc/pki/CA/cacert.pem –days 3650 -batch \
                      -keyfile /etc/pki/CA/private/cakey.pem -selfsign \
                      -extensions v3_ca \
                      -infiles /etc/pki/CA/careq.pem

Y con esto tenemos creada la autoridad certificadora. Es importante conservar la contraseña de la llave privada que hemos utilizado puesto que es la clave que vamos a necesitar para firmar los certificados emitidos por esta autoridad certificadora.

 

Dar a conocer a nuestra Autoridad Certificadora

cp  /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust

Creación de certificados


 

Certificado de servidor

Cuando emitimos un certificado para un servidor deberemos asegurarnos que lo emitimos con el nombre correcto del servidor. Algunos servicios no funcionarán si el nombre al que está emitido el certificado no es idéntico al nombre del servidor.

Primero creamos una carpeta para guadar los certificados:

mkdir /etc/pki/tls/caronte.bezmi.ies
cd /etc/pki/tls/caronte.bezmi.ies

 

A continuación hacemos una solicitud de certificado. Así obtenemos las llaves pública y privada. La llave privada irá cifrada con una clave. Si no quisiéramos ponerle clave, añadimos la opción -nodes. No obstante más tarde crearemos una copia de la llave privada sin contraseña. Si añadimos -config openssl.cnf, tomará de ahí los datos predeterminados. Si no especificamos un fichero openssl.cnf  entonces usará el fichero genérico /etc/pki/tls/openssl.cnf.

Podemos cambiar la ubicación de la esta carpeta donde se guardan los certificados emitidos.

openssl req [-config /etc/pki/tls/openssl.cnf]
 -new -keyout caronte.bezmi.ies.key \
 -out caronte.bezmi.ies.req -days 365

 

Ahora firmamos el certificado con nuestra autoridad certificadora. Para poder firmar un certificado necesitamos la clave de la llave privada de la autoridad certificadora.

openssl ca  -policy policy_anything \
 -out caronte.bezmi.ies.crt \
 -infiles caronte.bezmi.ies.req

 

Ahora convertimos el anterior certificado a otros formatos que pueden ser de utilidad:

openssl x509 -in caronte.bezmi.ies.crt  \
    -out caronte.bezmi.ies.pem

 

openssl x509 -inform PEM -outform DER \
  -in caronte.bezmi.ies.pem \
  -out caronte.bezmi.ies.der

 

Certificados para clientes

Primero creamos una carpeta para guadar los certificados:

mkdir -/etc/pki/tls/usuarios/usuario
cd /etc/pki/tls/usuarios/usuario

A continuación hacemos una solicitud de certificado y seguimos el mismo proceso anterior.

openssl req [-config /etc/pki/tls/openssl.cnf]
 -new -keyout caronte.bezmi.ies.key \
 -out caronte.bezmi.ies.req -days 365

 

Ahora firmamos el certificado con nuestra autoridad certificadora. Para poder firmar un certificado necesitamos la clave de la llave privada.

openssl ca  -policy policy_anything \
 -out usuario.crt \
 -infiles usuario.ies.req

 

Ahora convertimos el anterior certificado a otros formatos que pueden ser de utilidad:

openssl x509 -in usuario.crt  \
    -out usuario.pem

 

openssl x509 -inform PEM -outform DER \
  -in usuario.pem \
  -out usuario.der

 

openssl pkcs12 -export  -in usuario.pem \
 -inkey usuario.key \
 -certfile /etc/pki/CA/cacert.pem  \
 -name "usuario" \
 -out usuario.p12 -clcerts

 

Eliminar la clave de una llave privada

Cuando instalamos una pareja de clave pública y provada en un determinado servidor, la llave privada se tiene que desbloquear en el momento de lanzar el servidor. Algunos permiten una directiva para especificar la clave de acceso a la llave privada, pero otros no. En este último caso nuestras opciones son suministrar la clave manualmente cuando lanzamos el servidor, algo no deseable o bien tener una llave privada sin contraseña. Para crear una llave privada sin contraseña ejecutamos:

openssl rsa -in privada.key  -out privada.sc.key

El fichero de llave privada sin contraseña deberá tener los permisos lo más restringidos que sea posible.


 

Clientes XP

Si una vez terminado el proceso encontramos dificultades con clientes XP, al firmar podemos añadir:

 openssl ca  -policy policy_anything \
 -out usuario.crt \
 -extensions xpclient_ext -extfile /etc/pki/xpextensions \
  -infiles usuario.ies.req

 

donde el fichero /etc/pki/xpextensions contiene:

[ xpclient_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
 
[ xpserver_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

 

TinyCA

TinyCA es una alternativa para crear una autoridad certificadora y gestionarla desde un entorno gráfico. Incluso podemos usar la pareja de llaves generadas manualmente, junto con un fichero openssl.cnf para gestionar una Autoridad Certificadora desde el entorno gráfico.

La carpera de tinyCA contiene los siguientes ficheros:

  • cacert.key 

  • cacert.pem 

  • index.txt 

  • index.txt.attr 

  • serial 

  • serial.old 

  • index.txt.old 

  • openssl.cnf 

y las siguientes carpetas

  • certs 

  • crl 

  • req 

  • keys 

  • newcerts