Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Creación de Estructura Jerárquica
Creación de Estructura Jerárquica
Hace tiempo, a dos compañeros de carrera (Sixto y Jorge) y a mi, nos tocó crear una
Autoridad Certificadora (CA) con OpenSSL, para que nos entendamos, poder tener un
dominio con https.
* Lo primero deberemos crear una autoridad certificadora la cual expedirá todos los
certificados a los clientes que deseen conectarse con el servidor.
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
Una vez tenemos instaladas todas las herramientas necesarias pasaremos a crear en
primer lugar nuestra autoridad certificadora para que pueda expedir certificados
digitales a nuestros clientes:
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
Primero generamos la clave privada del que sera nuestro certificado digital:
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
basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth
Ahora lo que tenemos que hacer es que copiar los ficheros servidor-cert.pem y servidor-
priv.pem en el direcorio donde tengamos nuestro apache /apache/ssl.
Tambien 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.
Ademas tambien tenemos que decirle que lo añada a la lista de modulos que tambien
disponemos.
AddModule mod_ssl.c
Una vez hecho esto solamente nos queda declarar nuestro server virtual en el fichero de
configuracion con las directivas correspondientes para ello añadimos al final del fichero
el siguiente fragmento de codigo.
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 server listo para pedir
certificados clientes.
Ahora tenemos que generar los certificados clientes correspondientes a la peticion, para
ello vamos a ver los ficheros que
Ahora generaremos los certificados cliente que le tendremos que dar a los mismos para
que puedan entrar en nuestro sitio web.
Y ahora finalmente ya podemos emitir el certificado, para ello debemos editar el archivo
de configuracion 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 enviarselo a nuestros compañeros para que
puedan entrar a nuestro sitio https:
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).
Tambien le decimos que nuestro certificado tendra el numero 3; es importante decir que
este numero se deberia 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 certicado servidor pida certificados
cliente, para ello vamos al archivo de configuración httpd.conf y en la declaracion de
nuestro host virtual añadimos las siguientes 2 lineas:
SSLCACertificateFile ssl\cacert.pem
SSLVerifyClient require
Ahora debemos redireccionar las entradas por el puerto 80 (http) para que solo se pueda
acceder via Https a nuestro servidor; para ello agregamos las siguientes lineas al archivo
de configuracion.
RedirectMatch permanent .* https://127.0.0.1:443
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 debera añadir al
navegador. Para ello necesitamos crear con nuestro certificado un fichero comprimido
en formato pkcs12 que el navegador entiende.
Este archivo .p12 es el que cada cliente debe añadir a su navegador para poder ver
nuestra pagina web via https.
Revocación de Certificados
Lo primero que debemos hacer es crear una lista de revocacion en la cual se reflejaran
todos aquellos certificados que han sido revocados y por lo tanto son invalidos 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).
Tambien tenemos que tener bien configurado el archivo openssl.cnf para que coja las
rutas adecuadamente, para ello nos aseguraremos que las siguientes entradas estan bien
puestas en dicho archivo:
[ CA_default ]
#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)
Una vez tenemos este archivo bien configurado pasamos a crear nuestra lista de
revocación o CRL de la siguiente manera.
Con esto le estamos diciendo que revoque el archivo client-cert.pem que habiamos
creado anteriormente. OpenSSL añadirá dicha entrada a la base de datos hasta que
actualizemos nuestra lista de revocación que deberemos hacerla con el mismo comando
utilizado para crearla.
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
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
BIBLIOGRAFÍA
http://bulma.net/
http://www.openssl.org
http://www.apache.org/
Libro consultado: