====== [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 $(hostname).key 2048
openssl req -new -key $(hostname).key -out $(hostname).csr
openssl ca -keyfile ca.key -cert ca.crt -out $(hostname).crt -infiles $(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 $(hostname).crt ../ssl.crt/
mv $(hostname).csr ../ssl.csr/
mv $(hostname).key ../ssl.key/
===== Generating DHPARAMS =====
openssl dhparam -dsaparam -out /etc/ssl/private/dhparam2.pem 4096
[[https://security.stackexchange.com/questions/95178/diffie-hellman-parameters-still-calculating-after-24-hours|Link]]
====== 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