User Tools

Site Tools


generar_ca_y_certificado_autofirmado

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/

Troubleshoot

Errores con el demoCA o index.txt

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:

vi /etc/pki/tls/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
generar_ca_y_certificado_autofirmado.txt · Last modified: 2012/03/19 17:54 by dodger