Autenticación Web de Cliente y Servidor Con Certificados Digitales

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.

Transcript of Autenticación Web de Cliente y Servidor Con Certificados Digitales

Page 1: Autenticación Web de Cliente y Servidor Con Certificados Digitales

AUTENTICACIóN WEB DE CLIENTE Y SERVIDOR CON CERTIFICADOS DIGITALES“SSL_3”

ALEJANDRO ARBOLEDASENA2009

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.

Page 2: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 3: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 4: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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”.

Page 5: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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 2048debe 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

Page 6: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 7: Autenticación Web de Cliente y Servidor Con Certificados Digitales

*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.

Page 8: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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.comServerAdmin webmaster@localhostRedirectPermanent / https://www.alejo.comDocumentRoot /var/www/buscador/<Directory />

Options FollowSymLinksAllowOverride None

</Directory><Directory /var/www/buscador/>

Options Indexes FollowSymLinks MultiViewsAllowOverride NoneOrder allow,denyallow from allDirectoryIndex Buscar_com_ve.html

</Directory>

<

ScriptAlias /cgi­bin/ /usr/lib/cgi­bin/<Directory "/usr/lib/cgi­bin">

AllowOverride NoneOptions +ExecCGI ­MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all

</Directory>

<

ErrorLog /var/log/apache2/error.log

E

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

L

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

C

    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

Page 9: Autenticación Web de Cliente y Servidor Con Certificados Digitales

                DirectoryIndex          Buscar_com_ve.html        </Directory>

 

SSlEngine onSSLCACertificateFile    /etc/ssl/CA/CAcertificado.pemSSLCertificateFile /etc/ssl/CA/certificadoserver­server.pemSSLCertificateKeyFile   /etc/ssl/CA/claveprivada­server.pem  SSLVerifyClient require

r

</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:FALSEextendedKeyUsage = clientAuth

#nano configclient.cnf

Page 10: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 11: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 12: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 13: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 14: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 15: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 16: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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

Page 17: Autenticación Web de Cliente y Servidor Con Certificados Digitales

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 referenciaswww.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