You are on page 1of 17

AUTENTICACIóN WEB DE CLIENTE Y SERVIDOR CON CERTIFICADOS DIGITALES

“SSL_3”

ALEJANDRO ARBOLEDA
SENA2009

En documetos anteriores hemos instalado una entidad certificadora que firme certificados a servidores web,
comercialmente o en sistemas de acceso público, no se recomiendan certificados autofirmados pues el aviso de
autoridad de certificación no reconocida generará desconfianza entre los usuarios, pero en entorno LAN es ideal,
asegurando la autenticidad de estos cuando un cliente intenta conectarse, aún así este metodo de autenticación no
se reconoce plenamete como confiable y las aplicaciones web exigen cada vez a un nivel mas alto nivel el
cumplimiento de los principios de seguridad, preocupa cuando un servidor envia a un cliente informacion
importante para estos sin estar seguro que el cliente es quien dice ser.

SSL_3 surge como una solución a la anterior preocupación, incorporando nuevas funciones a las comunicaciones
cifradas y aseguradas con ssl, el servidor puede requerir, además, otro certificado al cliente, de manera que ámbos
extremos autentifiquen la comunicación. En esto es precisamente que se basa este documento.

A lo largo del documento indicaremos como permitir el acceso a nuestra aplicación a aquellos usuarios que
posean el certificado que antes se habra enviado mientras que si no lo tienen no podrán acceder de ningún modo.

Como prerequisitos debemos tener un sitio web sencillo corriendo, preferiblemente asociado a un registro de un
servidor dns, con lo que accederemos al servidor web de una manera mas sencilla y elegante.
1-Habilitar las herramientas de opssl

Comenzamos instalando la utilidad openssl que nos incorporara en el sistema las herramientas para
la implementación de la entidad certificadora y el asistente de generacion de certificados.

#apt-get install openssl

Creamos el directorio raiz de la futura entidad certificadora, donde almacenaremos los archivo de
configuración de ssl, las claves y certificados que interactuan en las comunicaciones seguras.

#mkdir /etc/ssl/CA
Comenzamos a poblar el directorio raiz con la carpeta que contendra la clave privada de la entidad
certificadora que posteriormente crearemos

# mkdir /etc/ssl/CA/privado

Cuando instalamos openssl se genera el archivo “openssl.cnf” donde estan las variables que
definiran la manera de actuar y las actividades de la entidad certificadora y el asistente de
generacion de certificados, este archivo debemos copiarlo al directorio raiz creado

#cp /etc/ssl/openssl.cnf /etc/ssl/CA/openssl.cnf

Nota: el archivo original “openssl.cnf” que se queda en /etc/ssl/ debera cambiar de nombre para que
al momento de utilizar las herramientas de openssl no confunda los archivos de refenrecia
Al listar el contenido del directorio raiz de la entidad certificadora deberemos ver lo anteriormente
creado.

#ls -la /etc/ssl/CA

2- Ahora crearemos la entidad certificador que nos permitira la creación, firma y validación de
certificados digitales en un ambiente de red interna

#openssl req -x509 -newkey rsa:2048 -days 3650 -keyout privado/cakey.pem -out
Cacertificado.pem -config /etc/ssl/CA/openssl.cnf

En esta cadena hemos generado la clave privada y el certificado que autoacredita a la entidad
certificadora como un tercero confiable al intercambiar datos en conexiones seguras, se generan
entonces los archivos contenedores del certificado “CAcertificado.pem” y la clave privada de la
entidad “cakey.pem”.
Nos pedira que genere una contraseña con la que asegurara la creación de los datos generales sobre
los que se validara la identidad de la entidad certificadora, con una lista como la siguiente.

3- Con la entidad creada, podemos recurrir a ella para firmar certificados de servidores, clientes,
entre otros, en primer lugar generamos una clave que se ingresara al certificado posteriomente.

#openssl genrsa -des3 -out claveprivada-server.pem 2048
debe ingresar la contraseña de la clave privada que se incoroporara al certificador

Al tener la llave procedemos a crear el certificado del sitio web que queremos autenticar este tendra
un formato “.pem” y se creara con la siguiente cadena de comandos.

#openssl req -new -key claveprivada-server.pem -out certificadoserver-req.pem -config openssl.cnf

nos pide la contraseña de la clave privada anteriormente
Debemos confirmar los datos que la autoridad certificadora validara y prestaremos especial atención
a la variable Nombre Comun el cual sera el principal identificador del sitio

4- Para firmar este certificado necesitamos indicarle a la CA, una serie de parametros que
habilitarán el firmado de certificados a servidores, creamos un archivo indicando la manera de
hacerlo

#nano /etc/ssl/CA/configservidor.cnf

Ahora podemos ingresar la cadena de comandos que firmara el certificado generado anteriormente

#openssl x509 -CA CAcertificado.pem -Cakey privado/cakey.pem -req -extfile configservidor.cnf
-in certificadoserver-req.pem -days 3650 -CAcreateserial -sha1 -out certificadoserver.pem
*x509 -CA Cacertificado.pem -Cakey cakey.pem = que con esa entidad certificadora y la llave de
esa entidad firme el siguiente certificado para un servidor
*-req -extfile configservidor.cnf -in certificadoserver-req.pem = que responda la petición pendiente
en certificadoserver-req.pem
*-days 3650 -Cacreateserial -sha1 -out certificadoserver.pem = que el nuevo certificado se cree en
un archivo llamado “certificadoserver.pem” y tenga las carateristicas de esa cantidad de dias, con un
serial designado encriptado con ese tipo de encripción

Podemos ver lo que hasta el momento llevamos para verificar que los comando se hallan entrado
con las rutas y los parametros correctos

#ls /etc/ssl/CA/

5- Con la entidad certificadora creada y los certificados del servidor web expedidos, debemos
indicarle al servidor web que estamos configurando, las rutas y variables para trabajar con ssl3.

SSlEngine on # =la activacion del modulo ssl en el servidor
SSLCACertificateFile /etc/ssl/CA/CAcertificado.pem # =el certificado de la CA que firmo los certificados
SSLCertificateFile /etc/ssl/CA/certificadoserver-server.pem # =el certificado del servidor web
SSLCertificateKeyFile /etc/ssl/CA/claveprivada-server.pem # =la clave generada con el certificado del servidor
SSLVerifyClient require # =exigir a los clientes que se conectan un certificado digital (ssl3)

La parte modificada del archivo de configuración del servidor web, deneria verse como este.
El archivo configurado y modificado totalmente para el servidor debe tener las rutas y las variables
parceidas a estas

##################  /etc/apache2/sites­available/default Modificado  ###################

<VirtualHost *:80>
ServerName  www.alejo.com
ServerAdmin webmaster@localhost
RedirectPermanent / https://www.alejo.com
DocumentRoot /var/www/buscador/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/buscador/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
DirectoryIndex Buscar_com_ve.html
</Directory>

ScriptAlias /cgi­bin/ /usr/lib/cgi­bin/
<Directory "/usr/lib/cgi­bin">
AllowOverride None
Options +ExecCGI ­MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

<VirtualHost *:443>
        ServerName  www.alejo.com
        ServerAdmin webmaster@localhost
      
        DocumentRoot /var/www/buscador/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/buscador/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                DirectoryIndex          Buscar_com_ve.html
        </Directory>

SSlEngine on
SSLCACertificateFile    /etc/ssl/CA/CAcertificado.pem
SSLCertificateFile /etc/ssl/CA/certificadoserver­server.pem
SSLCertificateKeyFile   /etc/ssl/CA/claveprivada­server.pem  
SSLVerifyClient require

</VirtualHost>

######################### ###########################

Guardamos los cambios, podemos reiniciar el servidor aunque en el momento puede mostrar
incovenientes por falta de los componentes de ssl3, debemos mirar “/var/log/apache/error.log” para
verificar que posibles errores tenemos

6- Ahora creamos el certificado que permite las comunicaciones con ssl3, debemos generar el
certificado para cliente web, pero antes es necesario indicarle al directorio de la CA donde estan los
parametros para generar certificados clientes, se crea el archivo “configclient.cnf” e ingresamos
estas lineas:

basicConstraints = critical,CA:FALSE
extendedKeyUsage = clientAuth

#nano configclient.cnf
Ahora podemos entrar la orden y generar la peticions para obtener el certificado cliente, primero
creamos la clade privada que se incoroporara en el certificado

#openssl genrsa -des3 -out clave-cliente.pem 2048 -config openssl.cnf

al generar la clave sera necesario ingresar una contraseña requerida para el manejo del certificado
cliente, podemos ver el contenido de la clave que si bien no es legible nos indica que se genero
correctamente.

#more /etc/ssl/CA/clavecliente.pem

Procedemos a generar la peticion de certificado con la siguiente orden de comandos.

#openssl req -new -key clavecliente.pem -out certificado-cliente-req.pem -config openssl.cnf
Despues de dar la contraseña de la clave del cliente generada anteriormente el asistente corroborara
o cambiara los datos sobre los que se basara el certificado, según la configuración de la CA,
ingresamos los preferidos ó aceptamos los preestablecidos.

Terminamos la peticion con la autofirma del certificado con la CA instalada en el equipo local, con
la siguiente linea la entidad certificadora verificara que los datos del archivo son reales y generara el
certificado cliente que pedimos.

#openssl x509 -CA CAcertificado.pem -CAkey privado/cakey -req -in certificado-cliente-req.pem
-days 3650 -extfile configclient.cnf -Cacreateserial -sha1 -out certificado-cliente.pem

se crea el archivo “certificado-cliente.pem” pero antes exigira la contraseña de la entidad
certificadora con la que ella autoriza la aprobación de peticiones como estas
El certificado que acaba de firmar la CA se a creado correctamente, pero como es para instalarlo en
algun cliente que se conecte al servidor por lo general browser, (IE, mosilla, Opera) desde el equipo
donde se realizan las configuraciones le damos un formato legible para los navegadores

#openssl pkcs12 -export -in certificado-cliente.pem -inkey clavecliente.pem -certfile
CAcertificado.pem -out cliente.p12

Nos pedirá la clace privada del servidor web y luego se debera ingresar una nueva contraseña para
el certificado con el nuevo formato
Copiamos el certificado a una ruta de facil acceso para el asistente del cliente web

7- Por parte de los archivos de configuración y la habilitación en el servidor todo se encuentra
corriendo y dispuesto para que la comunicación segura SSL3 sea implementada en el intercambio
de datos en una res interna.

Nos conectamos al servidor local que hemos configurado y debemos ver la alerta de sitio web
seguro, donde en primer lugar debemos aceptar el certificado del servidor
damos clic en agregar exepción “add exception...” y vemos un asistente donde se permitira aceptar
el certificado del servidor.

Luego de confirmar la instalción del certificado servidor volvemos a conectarnos y debemos ver la
alerta de peticion de certificado cliente
Instalamos el certicado cliente.p12 que nos permitira la conexión al servidor, en este abrimos la ruta
donde se puede agregar siguiendo:

Editar→ Preferencias→ Avanzado→ Encripción→ Ver certificados→ Sus Certificados→ Importar

El asistente nos abrira los archivos locales donde encontraremos el cliente.p12
Al dar clic en el archivo nos pedira la contraseña de la clave con la que se creo este

Nos mostrara la alerta de instalación correcta en el servidor

Verificamos que el certificado este ahora en los permitidos por el navegador web
Y al reintentar la conexión debe madarnos al sitio web seguro que hemos configurado

Podemos dar por finalizada la implementación de SSL3 que a partir de este momento permitira el
intercambio de datos cifrados, del cliente al servidor como en SSL2 y del servidor al certificado
nativo del SSL3

imagenes y referencias
www.cisco.com/.../ipj_1-1/ssl.htm

http://blog.osusnet.com/2008/10/11/usando-certificados-ssl-de-cliente-como-sistema-de-
autenticacion-web/

http://www.google.com