OpenSSL es una aplicación y una API GNU relaccionada con temas de cifrado cuya web es www.openssl.org. De esa web te puedes bajar el código fuente pero si no queres o no puedes compilarlo, hay binarios para Windows si buscas en los ports de Cygnus (Cygwin).
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.
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
Creación del Certificado Autofirmado
Hay que ejecutar la siguiente instrucción: (365 es el periodo de validez en días)
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Que va pidiendo los datos de la Autoridad de Certificación. La salida es un certificado en el fichero ca.crt con formato X509 (un formato de especificación de datos del certificado).
Emisión de una Solicitud de Firmado de Certificado (CSR)
Creación de la Clave Privada
openssl genrsa -des3 -out server.key 1024
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 de llama la raíz de certificación.
openssl req -new -key server.key -out server.csr
Que va pidiendo los datos de la entidad solicitante del certificado y crea el fichero server.csr.
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. Para ello hace falta el script sign.sh:
#!/bin/sh ## ## sign.sh -- Sign a SSL Certificate Request (CSR) ## Copyright (c) 1998-2000 Ralf S. Engelschall, All Rights Reserved. ## # argument line handling CSR=$1 if [ $# -ne 1 ]; then echo "Usage: sign.sign .csr"; exit 1 fi if [ ! -f $CSR ]; then echo "CSR not found: $CSR"; exit 1 fi case $CSR in *.csr ) CERT="`echo $CSR | sed -e 's/.csr/.crt/'`" ;; * ) CERT="$CSR.crt" ;; esac # make sure environment exists if [ ! -d ca.db.certs ]; then mkdir ca.db.certs fi if [ ! -f ca.db.serial ]; then echo '01' >ca.db.serial fi if [ ! -f ca.db.index ]; then cp /dev/null ca.db.index fi # create an own SSLeay config cat >ca.config <<EOT [ 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 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 EOT # sign the certificate echo "CA signing: $CSR -> $CERT:" openssl ca -config ca.config -out $CERT -infiles $CSR echo "CA verifying: $CERT < -> CA cert" openssl verify -CAfile ca.crt $CERT # cleanup after SSLeay rm -f ca.config rm -f ca.db.serial.old rm -f ca.db.index.old # die gracefully exit 0
Y finalmente hacer:
sign.sh server.csr
Esto creará un certificado válido llamado server.crt y que podremos usar a su vez para firmar otros certificados.
Exportar el Certificado
Para exportar el certificado y la clave privada al formato de intercambio PKCS#12 (que se puede importar en los navegadores):
openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12