Table of Contents
[HOWTO] Self-signed CA+certificate
Descripción
Para generar una CA y auto-firmar un certificado e instalarlo en Apache por ejemplo, debemos hacer lo siguiente.
Generación
Para generar certificados autofirmados para Apache (o cualquier otro programa que use openssl):
cd /etc/http/conf mkdir CA cd CA openssl genrsa -des3 -out ca.key 2048
En este punto pedirá un password obligatorio para generar la key. Será necesario recordarlo para el futuro y es recomendable incluirlo en el keepass por si acaso en el futuro alguien lo necesita.
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt openssl genrsa -out $(hostnamectl hostname).key 2048 openssl req -new -key $(hostnamectl hostname).key -out $(hostnamectl hostname).csr openssl ca -keyfile ca.key -cert ca.crt -out $(hostnamectl hostname).crt -infiles $(hostnamectl hostname).csr
Siempre que nos pida un password, será el del key, menos cuando dice “A challenge password” que puede ser cualquier cosa, no es significativo.
Luego creamos los directorios:
mkdir ../ssl.crt/ ../ssl.csr/ ../ssl.key/ mv $(hostnamectl hostname).crt ../ssl.crt/ mv $(hostnamectl hostname).csr ../ssl.csr/ mv $(hostnamectl hostname).key ../ssl.key/
Generating DHPARAMS
openssl dhparam -dsaparam -out /etc/ssl/private/dhparam2.pem 4096
Troubleshoot
Errores con el demoCA o index.txt
quick fix
export SSL_CONFIG="/etc/ssl/openssl.cnf" export SSL_CAPATH="/etc/ssl/CA" sed -i "s,.demoCA,${SSL_CAPATH},g" ${SSL_CONFIG} mkdir -p ${SSL_CAPATH}/{certs,crl,newcerts} touch ${SSL_CAPATH}/index.txt echo "01" > ${SSL_CAPATH}/serial
long explanation
En determinadas ocasiones no se generan los directorios/ficheros correctamente, de ahí errores del tipo:
Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for ca.key: ../../CA/index.txt: No such file or directory unable to open '../../CA/index.txt' 29633:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('../../CA/index.txt','r') 29633:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:
o
Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for ca.key: I am unable to access the /etc/httpd/conf/CA/newcerts directory /etc/httpd/conf/CA/newcerts: No such file or directory
etc…
Logicamente si se intentan listar esos directorios/ficheros no existirán.
Hay que editar el fichero de configuración del openssl, en este caso:
vim /etc/ssl/openssl.cnf
Y cambiar el directorio por defecto, lo habitual es ponerlo en el directorio donde está el “cnf”, por ejemplo:
[[|CA_default ]] dir = /etc/pki/tls/CA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number
Hay que tener en cuenta las variables:
- dir : Como he dicho antes, es el directorio donde residirán todos los ficheros internos
- database : Fichero de indices, ha de existir
- serial : Fichero de serials, ha de existir
Si database y serial no existen, HAY QUE CREARLOS, se pueden usar los siguientes comandos:
mkdir -p /etc/pki/tls/CA/newcerts touch /etc/pki/tls/CA/index.txt echo "01" > /etc/pki/tls/CA/serial
Alterando los paths, por supuesto.
The organizationName field needed to be the same in the
Añadir:
-policy policy_anything
A la linea de ejecución en la generación del crt:
openssl ca -policy policy_anything -keyfile ca.key -cert ca.crt -out DOMINIO.COM.crt -infiles DOMINIO.COM.csr