Openssl Firma Certificado

7

Click here to load reader

Transcript of Openssl Firma Certificado

Page 1: Openssl Firma Certificado

Certificados con OpenSSL

OpenSSL es una aplicación y una API GNU relaccionada con temas de

cifrado cuya web es www.openssl.org

Consiste en un robusto paquete de herramientas de administración y

bibliotecas relacionadas con la criptografía, que suministran

funciones criptográficas a otros paquetes como OpenSSH y

navegadores web (para acceso seguro a sitios HTTPS).

Estas herramientas ayudan al sistema a implementar el Secure

Sockets Layer (SSL), así como otros protocolos relacionados con la

seguridad, como el Transport Layer Security (TLS). Este paquete de

software es importante para cualquiera que esté planeando usar

cierto nivel de seguridad en su máquina con un sistema operativo

libre basado en GNU/Linux. OpenSSL también permite crear

certificados digitales que pueden aplicarse a un servidor, por

ejemplo Apache.

Los certificados son unos ficheros que sirven para “certificar” la

identidad de un ordenador, empresa o persona y para realizar

cifrado de datos. Los certificados contienen una clave pública y

otra privada. La clave pública puede ser conocida por todo el

mundo, pero la privada debe ser mantenida en secreto. Con la clave

pública se cifran los datos y con la privada se descifran, de

manera que cualquiera puede cifrar datos, pero sólo el propietario

del certificado puede descifrarlos.

Aunque no nos confundamos ya que esto es bidireccional, si

ciframos algo con nuestra clave privada cualquiera que tenga

nuestra clave pública y el password podrá descifrarlo.

Page 2: Openssl Firma Certificado

Creación del Certificado de la Autoridad de Certificación

Creación de la Clave Privada

Esto crea una clave privada de longitud 1024 bits con el algoritmo

triple DES y la guarda en el fichero ca.key:

openssl genrsa -des3 -out ca.key 1024

Analicemos la instrucción:

openssl genrsa [opciones] [tamaño]

Genera una nueva clave RSA del tamaño especificado como argumento.

-des, -des3

Cifra la clave privada con DES o Triple-DES respectivamente.

-out <fichero>

Almacena la clave en el fichero especificado como argumento, en

este caso ca.key

Creación del Certificado Autofirmado

Hay que ejecutar la siguiente instrucción:

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Analicemos la instrucción:

openssl req [opciones]

Genera una petición de certificado (o un certificado autofirmado).

-new

Indica que estamos realizando una petición nueva.

-x509

Crea una estructura X.509 en lugar de una petición.

Page 3: Openssl Firma Certificado

-days <dias>

Especifica el número de días que un certificado creado con -x509

es válido.

-key

Indica la clave que vamos a utilizar para generar el certificado.

-out

Almacena la clave en el fichero especificado como argumento, en

este caso ca.crt

Emisión de una Solicitud de Firmado de Certificado (CSR)

Creación de la Clave Privada

openssl genrsa -des3 -out server.key 1024

Esta instrucción es exactamente igual que la que utilizó la

autoriadad certificadora para generar su clave privada. Hay que

tener en cuenta que el apartado “Creación del Certificado de la

Autoridad de Certificación”, sólo lo reproducimos ha efectos

prácticos, ya que en un caso real la Autoridad de

Certificación (CA) nos proporcionará el certificado en este

caso ca.crt y la clave en este caso ca.key.

Creación del CSR

El CSR o (Certificate Signing Request, petición de firma de

certificado), es un fichero que crea una entidad para pedirle a

otra que lo firme, verificando que los datos de la primera entidad

son correctos. Así unas entidades van certificando a otras creando

una cadena de certificación, donde la primera entidad se llama la

raíz de certificación.

openssl req -new -key server.key -out server.csr

Analicemos la instrucción:

openssl req [opciones]

Page 4: Openssl Firma Certificado

Genera una petición de certificado (o un certificado autofirmado).

-new

Indica que estamos realizando una petición nueva.

-key

Indica la clave que vamos a utilizar para generar el certificado.

-out

Almacena la clave en el fichero especificado como argumento, en

este caso server.csr

*Observamos que en este caso no hemos generado un certificado

autofirmado como en el caso anterior sino una petición de firma de

certificado.

Firmado del CSR por la Autoridad de Certificación

Para que el CSR sea un certificado válido, dede haber una entidad

que lo firme.

En este caso vamos a utilizar un script y un archivo de

configuración que nos simplificará la instrucción definitiva para

la firma, aunque hay otras maneras. Llamamos al script sign.sh

#!/bin/sh

CSR=$1

if test $# -ne 1

then

echo "Usage: sign.sign .csr"

exit 1

fi

if test ! -f $CSR

then

echo "CSR not found: $CSR"

exit 1

fi

case $CSR in

Page 5: Openssl Firma Certificado

Creamos un archivo de configuración para la firma del certificado

esto nos ahorra unos cuantos parámetros en la instrucción

empleada en la firma. Lo llamamos ca.config

[ ca ]

default_ca = CA_own

[ CA_own ]

dir = .

certs = $dir

new_certs_dir = $dir/ca.db.certs

database = $dir/ca.db.index

serial = $dir/ca.db.serial

RANDFILE = $dir/ca.db.rand

certificate = $dir/ca.crt

*.csr ) CERT="`echo $CSR | sed -e 's/.csr/.crt/'`" ;;

* ) CERT="$CSR.crt" ;;

esac

if test ! -d ca.db.certs

then

mkdir ca.db.certs

fi

if test ! -f ca.db.serial

then

echo '01' >ca.db.serial

fi

if test ! -f ca.db.index

then

touch ca.db.index

fi

exit 0

Page 6: Openssl Firma Certificado

Ejecutamos el script pasándole como parámetro el CSR que hemos

generado en el paso anterior:

sign.sh server.csr

Una vez ejecutado el script ya podemos introducir la instrucción

que se encargar de firmar el certificado:

openssl ca -config ca.config -out server.crt -infiles

server.csr

Analicemos la instrucción:

openssl ca [opciones]

Gestiona una CA definida en el fichero de configuración de OpenSSL

(openssl.cnf).

Por defecto firma una CSR (petición de certificado).

private_key = $dir/ca.key

default_days = 365

default_crl_days = 30

default_md = md5

preserve = no

policy = policy_anything

[ policy_anything ]

countryName = optional

stateOrProvinceName = optional

localityName = optional

organizationName = optional

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

Page 7: Openssl Firma Certificado

-config <fichero>

Indica el fichero con los parámetros de configuración.

-out <fichero>

El certificado firmado se almacenará en el fichero dado.

-infiles <fichero>

El CSR para firmar se encuentra en el fichero dado como

argumento .

Esto creará un certificado válido llamado server.crt y que

podremos usar a su vez para firmar otros certificados.

Ya tenemos nuestro certificado firmado por la autoridad

certificadora, así que cualquiera que tenga el certificado de la

AC en este caso ca.crt puede verificarlo con la siguiente

instrucción:

openssl verify -CAfile server.crt

Este proceso nos genera algunos archivos que podemos eliminar del

sistema con la siguiente instrucción:

rm -f ca.db.serial.old ca.db.index.old