Entidad Certificadora en Ubuntu Server

De Ardemans Wiki
Saltar a: navegación, buscar

Entidad Certificadora en Ubuntu Server

Existe ya un documento de Ubuntu que lo explica muy bien, pero como apunte personal voy a describir aquí los pasos que he seguido yo para tener una entidad certificadora propia.

También se puede consultar esta otra página de ubuntu explicando el uso de Open SSL

Instalación de paquetes necesarios

En realidad, solo he tenido que instalar el paquete openssl en mi ubuntu server 10.04LTS

Preparando los directorios de la CA

Toda la configuración se encuentra en el fichero /etc/ssl/openssl.cnf. Antes de tocar nada ahí he creado los siguientes directorios (si no lo estaban ya)

/etc/ssl/CA
/etc/ssl/certs
/etc/ssl/crl
/etc/ssl/newcerts
/etc/ssl/private

Configuración de SSL

El fichero de configuración de SSL queda como sigue:

####################################################################
[ ca ]
default_ca      = CA_Ardemans           # The default ca section

####################################################################
[ CA_Ardemans ]

dir             = /etc/ssl                              # 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/CA/index.txt                     # database index file.
#unique_subject = no                                    # 'no' to allow creation ctificates with same subject.
new_certs_dir   = $dir/newcerts                         # default place for new certs.
certificate     = $dir/certs/ArdemansCA.pem             # The CA certificate
serial          = $dir/CA/serial                        # The current serial number
crlnumber       = $dir/crlnumber                        # current crl number must be commented out to leave a V1 CRL
crl             = $dir/crl.pem                          # The current CRL
private_key     = $dir/private/ArdemansCAkey.pem        # The private key
RANDFILE        = $dir/private/.rand                    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha1                  # which md to use.
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_match

Generando certificado Raíz

En nuestro caso este no será más que un certificado autofirmado, que podremos generar con el siguiente comando:

# openssl req -x509 -new -newkey rsa:2048 -keyout ArdemansCAkey.pem -out ArdemansCA.pem -days 3650

Nos hará una serie de preguntas sobre el certificado. En el common name damos el nombre que queremos que aparezca como entidad certificadora.

Después copiamos los ficheros resultantes en el lugar que hemos especificado en el fichero de configuración.

# mv ArdemansCA.pem certs
# mv ArdemansCAkey.pem private


Pedir un certificado nuevo a la CA

Para pedir un nuevo certificado firmado tendremos que crear una petición de firmado , que se llaman CSR (Certificate signing request). Para ello hay que rellenar un formulario, pero antes, vamos a crear la llave privada que vamos a firmar, para ello, podemos usar el comando openssl genrsa. La clave se puede generar de muchas formas,como por ejemplo con clave simétrica, para que solo se pueda usar si ponemos una contraseña escrita.

Creación de la clave privada

# openssl genrsa -out server.pem

Tal y como lo hemos hecho ahí arriba nos crearía un fichero con la clave que nos ha generado. Esta clave va en claro, no hay ningún tipo de encriptación sobre ella, y eso quiere decir que si nos la cogen ya podrían suplantar nuestra identidad. Por lo general lo que se suele hacer es encriptarla cuando la generamos con algún tipo de mecanismo que openssl genrsa ya tiene, por ejemplo des3:

# openssl genrsa -des3 -out server.pem.secure

o podíamos haber securizado la que hemos generado antes, ejecutando lo siguiente:

openssl rsa -in server.key -des3 -out server.key.secure

Creación del CSR

La peticion de firma de un certificado se rellena con el siguiente comando, respondiendo a las preguntas que va realizando:

root@ali:~/certificados/svn# openssl req -new -key serversvn.key -out serversvn.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [ES]:
State or Province Name (full name) []:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ardemans
Organizational Unit Name (eg, section) []:
Common Name []:svn.ardemans.com
Email Address []:pmblanco@ardemans.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:la de siempre facil
An optional company name []:

Esto nos va a generar el fichero CSR que es que tendremos que pasar a la CA para que sea firmado.


Firmando el certificado