You are on page 1of 7

Gaona 1118 – Bº Los Plátanos

TSV Estudio de Informática CORDOBA


T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Cómo crear una Autoridad Certificadora (CA) con OpenSSL


 Creación de estructura jerárquica:
 Lo primero deberemos crear una AUTORIDAD CERTIFICADORA la cual expedirá
todos los certificados a los clientes que deseen conectarse con el servidor.
 La comunicación se hará a través de la web mediante la implantación de un
protocolo de seguridad SSL.
 Solamente se confiará en los certificados emitidos por nuestra autoridad
certificadora.
 El periodo de los certificados expirará cada 15 días.

 Herramientas a utilizar:
 Win32OpenSSL-v0.9.8a.
 Appserv-win32-2.4.5.
 Apache_1.3.34-Mod_SSL_2.8.25-Openssl_0.9.8a.
 Internet Explorer.
 Windows XP service pack 2.
 OpenSSL

• DESARROLLO
La primera operación que vamos a realizar es la instalación del programa APPSERV-
WIN32-2.4.5 el cual utilizaremos para poder trabajar con el servidor Apache el local y
Mysql, tras lo cual pasaremos a la instalación del programa OpenSSL para Windows. El
software OpenSSL es un proyecto de software desarrollado por lo miembros de la
comunidad Open Source. Es un robusto juego de herramientas que le ayudan a su
sistema a implementar el Secure Sockets Layer (SSL), así como otros protocolos
relacionados con la seguridad, tales como el Transport Layer Security (TLS). También
incluye una librería de criptografía.
Una vez que tenemos instaladas todas las herramientas necesarias pasaremos a crear en
primer lugar nuestra autoridad certificadora para que pueda expedir certificados digitales a
nuestros clientes:

 Creación de la Autoridad certificadora (CA)


Para poder crear un certificado primero tenemos que tener una CA (Autoridad
Certificadora). Ésta será la que valida y confirma que nuestro certificado es valido.
Para ello nos colocamos en el directorio OpenSSL/bin y ejecutamos la siguiente
instrucción:

openssl req -x509 -newkey rsa:2048 -keyout cakey.pem -days 3650 -out cacert.pem

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 1 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Ahora vamos a crear un certificado digital con nuestra CA.


Primero generamos la clave privada del que será nuestro certificado digital:
openssl genrsa -des3 -out serv-priv.pem -passout pass:sslfsv 2048

Antes de hacer un certificado, hay que hacer una petición donde se define el propietario
del certificado:
openssl req -new -subj "/DC=root.com/OU=com/CN=root" -key

serv-priv.pem -passin pass:sslfsv -out petic-certificado-serv.pem

Generamos un fichero que contenga lo siguiente:


basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth

Y lo guardamos con el nombre config1.txt.


Y ahora con el fichero hecho con la configuración hacemos el certificado:
openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in petic-certificado-serv.pem
-days 15 -extfile config1.txt -sha1 -CAcreateserial -out servidor-cert.pem

Y le indicamos que el certificado es para un servidor, como esto lo tenemos en nuestro


fichero de configuración se lo indicamos poniendo -extfile y nuestro fichero config1.txt y
utilizaremos un algoritmo de cifrado SHA (-sha1).

 Configuración Servidor Apache


Ahora lo que tenemos que hacer es que copiar los ficheros servidor-cert.pem y servidor-
priv.pem en el directorio donde tengamos nuestro apache /apache/ssl.
También hay que decirle al servidor que escuche por el puerto seguro 443 que es el
puerto seguro para comunicaciones SSL. Para ello habrá que retocar el fichero de
configuración httpd.conf y poner lo siguiente en la sección Port.
Listen 80
Listen 443

Hay que decirle a Apache que tiene que cargar el modulo correspondiente al paquete SSL
y para ello lo hacemos añadiendo la siguiente instrucción en el apartado de carga de
módulos:
LoadModule ssl_module modules/mod_ssl.so

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 2 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Además también tenemos que decirle que lo añada a la lista de módulos que también
disponemos:
AddModule mod_ssl.c

Una vez hecho esto solamente nos queda declarar nuestro servidor virtual en el fichero de
configuración con las directivas correspondientes para ello añadimos al final del fichero el
siguiente fragmento de código:
NameVirtualHost *:443
ServerAdmin root@localhost
SSLEngine on
SSLCertificateFile ssl\servidor-cert.pem
SSLCertificateKeyFile ssl\serv-priv.pem

Reiniciamos el servidor y a partir de ahora ya tenemos nuestro servidor listo para pedir
certificados clientes.

 Generación de certificados clientes


Ahora tenemos que generar los certificados clientes correspondientes a la petición, para
ello vamos a ver los ficheros quetenemos hasta ahora:
Por parte de nuestra CA—–>cacert-pem, cacert.srl, cakey.pem (creación de nuestra CA)
Por parte de nuestro certificado de servidor—-> servidor-cert.pem, serv-priv.pem
(certificado y clave privada)
Ahora generaremos los certificados cliente que le tendremos que dar a los mismos para
que puedan entrar en nuestro sitio web.
Primero generamos la clave privada del cliente:
openssl genrsa -des3 -passout pass:sslfsv -out client-priv.pem 2048

Tendrá un algoritmo de cifrado triple des (-des3) de 2048 y se almacenara en el fichero (-


out) client-priv.pem y con el comando -passout pass: indicamos la passphrase para
nuestra clave privada que será sslfsv.
Ahora generamos la petición del certificado:
openssl req -new -key client-priv.pem -passin pass:sslfsv -subj
"/DC=localhost/OU=com/CN=Fsv" -out petic-cert-client.pem

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 3 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Y ahora finalmente ya podemos emitir el certificado, para ello debemos editar el archivo de
configuración openssl.cnf, pero nosotros lo haremos con un archivo externo al que
llamaremos config2.txt y al cual le pondremos las siguientes lineas:
basicConstraints = critical,CA:FALSE
extendedKeyUsage = clientAuth

Y hacemos por fin el certificado cliente para enviárselo a nuestros compañeros para que
puedan entrar a nuestro sitio https:
openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in petic-cert-client.pem
-set_serial 3 -days 15 -extfile config2.txt -sha1 -out client-cert.pem

Veamos que estamos haciendo, le indicamos que será un certificado del tipo x509 cuya
CA (-CA) está definida en el fichero cacert.pem y que usa como clave privada (-CAkey) el
fichero cakey.pem y que el certificado a generar tendrán las especificaciones definidas en
el apartado anterior (-req -in) las cuales están en el fichero de petición petic-cert-
client.pem.
El certificado tendrá una validez de quince dias (-days 15), le indicamos que el certificado
es para un cliente, y como esto lo tenemos en nuestro fichero de configuración se lo
indicamos poniendo -extfile y nuestro fichero config2.txt y utilizaremos un algoritmo de
cifrado SHA (-sha1).
También le decimos que nuestro certificado tendrá el numero 3; es importante decir que
este numero se debería cambiar para realizar distintos certificados cliente, ya que a la
hora de revocarlos openssl lo hace por el numero de certificado.
Ahora hay que configurar Apache para que nuestro servidor pida certificados cliente, para
ello vamos al archivo de configuración httpd.conf y en la declaración de nuestro host
virtual añadimos las siguientes 2 lineas:
SSLCACertificateFile ssl\cacert.pem
SSLVerifyClient require

Con SSLCACertificateFile, le indicamos donde esta nuestra CA y con SSLVerifyClient


require le indicamos que el servidor solicite un certificado al cliente cuando acceda a
nuestro site.
Ahora debemos redireccionar las entradas por el puerto 80 (http) para que solo se pueda
acceder vía Https a nuestro servidor; para ello agregamos las siguientes líneas al archivo
de configuración.
RedirectMatch permanent .* https://127.0.0.1:443

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 4 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Reiniciamos el servidor y ya esta listo para solicitar certificados a cada persona que entre.
Por ultimo tenemos que crear los certificados que cada cliente deberá añadir al
navegador. Para ello necesitamos crear con nuestro certificado un fichero comprimido en
formato pkcs12 que el navegador entiende:
openssl pkcs12 -export -in client-cert.pem -inkey client-priv.pem -certfile cacert.pem
out cert-pck12.p12

Esto nos genera el archivo de salida cert-pck12.p12 a partir de nuestro certificado cliente
client-cer.pem que tiene como clave privada client-priv.pem y cuya entidad certificadora
esta definida en cacert.pem. El nombre cert-pck12.p12 podemos cambiarlo a nuestro
gusto para crear certificados personalizados para cada cliente.
Este archivo .p12 es el que cada cliente debe añadir a su navegador para poder ver
nuestra página web vía https.

 Revocación de Certificados
Un aspecto importante para poder hacer nuestra CA segura es poder revocar certificados,
para asegurarnos de que la perdida de un certificado no supone entradas no autorizadas a
clientes que no les hemos dado el certificado correspondiente.
Lo primero que debemos hacer es crear una lista de revocación en la cual se reflejaran
todos aquellos certificados que han sido revocados y por lo tanto son inválidos y no
utilizables por los clientes. Para poder hacerla bien, debemos tener en el directorio
OpennSSL/bin un archivo de texto llamado index.txt el cual tendrá todas las entradas de
certificados revocados (base de datos de certificados revocados).
También tenemos que tener bien configurado el archivo openssl.cnf para que coja las
rutas adecuadamente, para ello nos aseguraremos que las siguientes entradas están bien
puestas en dicho archivo:
[ CA_default ]
dir= c:/openssl/bin # Directorio donde esta OpenSSl
certs= $dir/certs # El directorio de certificados (da lo mismo)
#crl_dir= $dir/crl #La dejamos comentada. CRL en raíz
database= $dir/index.txt #Donde tengamos nuestro fichero index.txt
#unique_subject= no #Lo dejamos en ‘no’ para poder crear certificados con el mismo
subject
new_certs_dir = $dir/newcerts # Directorio de nuevos certificados (tampoco es importante)
certificate= $dir/cacert.pem #Ruta del certificado de nuestra CA
serial= $dir/serial #El actual numero de serie para los certificados
#crlnumber= $dir/crlnumber #El numero actual de la lista de revocación. Debe estar
comentado
#crl= $dir/crl.pem #La actual lista de revocación

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 5 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

private_key= $dir/cakey.pem # Localización de la clave privada


RANDFILE= $dir/.rand #Archivo para la generación aleatoria de números.
x509_extensions = usr_cert #Extensión para añadir a los certificados

Una vez tenemos este archivo bien configurado pasamos a crear nuestra lista de
revocación o CRL de la siguiente manera:
openssl ca -gencrl -out listarev.crl

También deberemos crear el mismo archivo pero con extensión .pem


openssl ca -gencrl -out listarev.pem

Ahora ya tenemos la lista de revocación creada y ya podemos revocar los certificados


cliente que queramos, para ello utilizaremos la siguiente instrucción para revocar un
certificado:
openssl ca -revoke client-cert.pem

Con esto le estamos diciendo que revoque el archivo client-cert.pem que habíamos creado
anteriormente. OpenSSL añadirá dicha entrada a la base de datos hasta que actualicemos
nuestra lista de revocación que deberemos hacerla con el mismo comando utilizado para
crearla:
openssl ca -gencrl -out listarev.crl
openssl ca -gencrl -out listarev.pem

Para publicar la lista de revocación CRL en nuestro servidor para que se entere de los
certificados que han sido revocados, deberemos copiar los 2 archivos de la lista de
rovocación listarev.crl y listarev.pem en el directorio /apache/ssl y configurar el archivo
htttp.conf para indicarle donde tenemos la lista de revocación almacenada. El paso de
copiar las listas al direcorio de apache/ssl se puede evitar poniendo la correspondiente
ruta en el archivo de configuracion hhtpd.conf, para ello añadimos a la entrada de nuestro
virtuahost lo siguiente:
SSLCARevocationFile ssl\listarev.pem

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 6 de 7
Gaona 1118 – Bº Los Plátanos
TSV Estudio de Informática CORDOBA
T.E.: (0351) 480 8661
Ing. Alberto José TONCIC
albertotoncic@hotmail.com
rubentoncic@hotmail.com

Quedando nuestro virtualhost configurado de la siguiente manera:


NameVirtualHost *:443
ServerAdmin root@localhost
SSLEngine on
SSLCARevocationFile ssl\listarev.pem
SSLCertificateFile ssl\servidor-cert.pem
SSLCertificateKeyFile ssl\serv-priv.pem
SSLCACertificateFile ssl\cacert.pem
SSLVerifyClient require

Reiniciamos nuestro servidor Apache con la nueva configuración y ya lo tenemos todo listo
para pedir certificados y revocar aquellos que nos interesa por diferentes causas.

SISTEMAS DE INFORMACION Y COMPUTACION, ASESORAMIENTO Y SERVICIOS


Página 7 de 7

You might also like