Openssl Firma Certificado
Click here to load reader
-
Upload
nestorpastorpiera -
Category
Documents
-
view
92 -
download
0
Transcript of 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.
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.
-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]
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
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
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
-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