====== [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