ssl_linux

download ssl_linux

of 28

Transcript of ssl_linux

  • 8/14/2019 ssl_linux

    1/28

    ALEJANDRO ARBOLEDASENA 2009

    OPENSSL EN LINUX Autenticacion de un Servidor Web

    Las nuevas Tecnologas de la Informacin han tomado las redes como eje para el desarrollo dediferentes sistemas de interaccin, en los que la transmisin de informacin se convierte en una de

    las principales preocupaciones, pues esta es la fuente y el sustento de los procesos que aqu semanejan. La web posiblemente como la red mundial mas grande de transmision de datos no se

    escapa de gran variedad de ataques que pretenden vulnerar cualquiera de los principios de la

    informacion, Confidencialidad, Integridad, Disponibilidad y No repudio, por esto, personas ycomunidades interesadas en mejorar la seguridad en las comunicaiones han desarrollo una serie de

    herramientas que pretenden generar confianza en el momento del intercambio de datos.

    SSL y TLS son dos protocolos creados con la finalidad de aadir a las capas de aplicacin y

    tranporte del modelo OSI una serie de componetes capaces de cifrar los paquetes que en nuestrocaso se enviaran desde los clientes hacia servidores web y viceversa, permitiendo que el

    intercambio de datos este encriptado bajo algoritmos RSA (Clave pblica / Clave privada). En elcaso de los servidores web, estos deberan poseer un certificado aprobado por un tercero confiable

    que indicara al cliente (navegador web) su identidad y quien la corrobora, por su parte el navegador

    debe soportar la notificacin de comprobacin de identidad del servidor al cual se conecta yresponder con sus credenciales si el servidor asi lo requiere.

    A continuacin mostraremos como generar certicados digitales y como crear la entidad que losfirmara, otorgando confianza local puesto que para esto se han creado entidades externas

    encargadas de hacerlo, lo que trataremos en este documento sera la implementacin de un servidorweb trabajando con los protocolos seguros SSL, crear la Autoridad Certificadora propia,

    basicamente la implemetacin de la Infraestructura de Llave Pblica.

    Los navegadores web reconocen, por defecto, una serie de autoridades certificadoras como Verisign

    o Thawte, aunque hay muchas ms. Puedes verlas todas en las opciones de tu navegador. Pero, qu

    es realmente lo que hace una Autoridad Certificadora? Firmar. Firma tu certificado SSL asegurandoque os pertenece a ti y a tu dominio. Cuando un cliente accede a tu dominio y descarga el

    certificado SSL, busca dentro de sus certificados de CAs si hay alguno que lo haya firmado. Si loencuentra, acepta tu certificado y no ocurre nada especial, pero si no encuentra la CA lanza un aviso

    indicando que no se reconoce la autoridad que lo firma. Esto no quiere decir que el certificado no

    sea vlido, lo nico que ocurre es que no sabe quien lo firma. Esto significa, por tanto, que tmismo puedes ser tu propia autoridad certificadora y firmar tus certificados, funcionarn

    perfectamente y cumplirn su cometido de asegurar las comunicaciones cliente/servidor.

    http://www.verisign.es/http://www.thawte.com/http://www.verisign.es/http://www.thawte.com/
  • 8/14/2019 ssl_linux

    2/28

    1- Comenzamos creando el servidor DNS que nos permitira hacer las pruebas locales necesarias.

    Luego de iniciar sesin como super usuario instalamos el paquete necesario para el servidor

    Entramos a modificar el archivo de configuracin de zonas del DNS en /etc/bind/named.conf

  • 8/14/2019 ssl_linux

    3/28

    Ahora copiamos los archivos que almacenaran los registros con los que trabajara el DNS, debemos

    copiar el formato para la zona inversa y directa redireccionando el contenido de los archivosdb.local y db.127

    Ingresamos a editar el archivo de los registros de la zona directa, asegurandonos de especificar lasvariables y nombres adecuados, pues son estos los que permitiran encontrar el equipo en la red.debian:/etc/bind# nano directa

  • 8/14/2019 ssl_linux

    4/28

    Acto seguido modificamos el archivo con los registros de la zona inversa y lo dejamos similar a las

    lineas de la siguiente imagendebian:/etc/bind# nano inversa

    Para evitar poner IP fija y poder tener salida a internet y la vez tener nuestros sitios y registros DNScorriendo, habilitamos la opcin de reenvio que ofrece el bind, primero copiamos la IP del DNS

    actual de la red que se puede ver en: /etc/resolv.conf

  • 8/14/2019 ssl_linux

    5/28

    La llevamos al archivo que habilita la opcin de reenvio en el bind en

    /etc/bind/named.conf.option y tras descomentar las lineas de reenvio (forwarder) elarchivo debera lucir como la siguiente imagen

    Editamos el archivo de resolv.conf que indica al sistema la direccion IP y el dominio

    predeterminado y debera verse como el siguiente:debian:/home/debian# nano /etc/resolv.conf

  • 8/14/2019 ssl_linux

    6/28

    El ultimo archivo que es necesario cambiar para la nueva y optima resolucion interna de nombres

    sera /etc/hosts, donde indicaremos el nuevo nombre y la IP real a la que la maquina respondera alobtener peticiones desde la red.

    Reiniciamos el servidor para que cargue los cambios realizados y verificamos que este libre de

    errores de configuracin

  • 8/14/2019 ssl_linux

    7/28

    Por ultimo probamos que las zonas y los registros agregados esten respondiendo correctamente a las

    configuraciones y datos agregados, lo hacemos desde cualquier ruta del sistema con el comando

    nslookup, podemos ver como es resuelto tanto los registros internos agregados manualmenecomo los externos como google.com resuelto por terceros gracias al reenviador

    2- El segundo componete necesario para esta implementacin ser un revidor web, que instalaremos

    normalamente pero a quien en pasos siguientes se modificara para establecer la conexin segura.Comenzamos instalando el paquete servidor de los repositorios, con apt-get install apache2

  • 8/14/2019 ssl_linux

    8/28

    Como primera medida para instalar un servidor web debemos tener previamente seleccionados los

    archivos que queremos publicar en el servidor, procedemos entonces a ubicarlos en la ruta queposteriormente sera indicada en los archivos de configuracin del servidor web, crearemos una

    carpeta en la que se almacenaran los archivos del sitio

    Y a continuacin enviamos los ficheros correspondientes del futuro sitio

  • 8/14/2019 ssl_linux

    9/28

    Entramos a modificar el archivo del nuevo sitio web, utilizaremos el default por asuntos

    pedaggicos y prcticos (ud. puede copiar este y trabajar con los nuevos).

    Ahora en el archivo especificaremos:-el encabezado de host, para tener la posibilidad de trabajar con URL's motivo por el cual se crearon

    los registros DNS trabajar por IP, por lo cual se modifico /etc/hosts www.alejo.com

    192.168.1.66-la ruta donde se guardaran los archivos del sitio web, index, imagenes y dems, usualmente

    /var/www/ esta se muestra como DocumentRoot y Directory-el archivo que se indexara para mostrarse como primero al momento de visualizar la pagina desde

    el navegador, esto se logra con la variable DirectoryIndex

    Este archivo con las pocas modificaciones debera verse parecido a la imagen

    http://www.alejo.com/http://www.alejo.com/http://www.alejo.com/
  • 8/14/2019 ssl_linux

    10/28

    Cuelgo el archivo completo para despejar dudas sobre otras variables del mismo, aunque hasta el

    momento no se han realizado mayores cambios

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

    Servername www.alejo.comServerAdmin webmaster@localhost

    DocumentRoot /var/www/buscador/

    Options FollowSymLinksAllowOverride None

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

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

    AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,deny

    Allow from all

    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/"

    Options Indexes MultiViews FollowSymLinksAllowOverride NoneOrder deny,allowDeny from allAllow from 127.0.0.0/255.0.0.0 ::1/128

    ################### default Modificado ####################

  • 8/14/2019 ssl_linux

    11/28

    Solo queda reiniciar el servidor para que cargue los cambios, informe sobre posibles problemas que

    se deben corregir de inmediato y verificar que todo este correcto

    Ahora desde el navegado web accedemos al sitio para verificar que el sitio se encuentre corriendo ycargando todos sus archivos correctamente, recordemos que podemos hacerlo con la URL dada en

    el registro dns o la IP local renombrada en /etc/hosts

  • 8/14/2019 ssl_linux

    12/28

    ingresando con la IP debe cargar el mismo sitio

    3- Instalamos el servidor ssl, que con sus paquetes permitira la implementacin de la entidad

    certificadora y las diferentes funciones como firmar certicados digitales, crear certicados para

    clientes, validar la identidad mia y de otros, entre otros.

  • 8/14/2019 ssl_linux

    13/28

    Es buena idea verificar la version del paquete descargado, para saber que soporta y en que

    procedimientos puede usarse

    Ahora iremos a los archivos de configuracin del Openssh y comenzaremos creando el directorioque albergara los archivos de la nueva entidad certificadora en /ect/CA

    En ese nuevo directorio creamos dos carpetas, una contendran las claves de los certicados

    generados y otra el certificado.

  • 8/14/2019 ssl_linux

    14/28

    En este punto debemos editar el archivo de configuracin de openssl, en el que se encuentran las

    variables que ssl tomara para crear entidades certificadoras, crear certicados, firmarlos, entreo otras,comenzamos copiando el archivo de configuracin de openssl para mantener el backup de este.

    Borramos el contenido del archivo orginal y conservamos el backup.

    Copiamos al directorio de la entidad certificadora el archivo de configuracin ssl que hemos

    vaciado para posteriormente poblar con nuestra configuracin

  • 8/14/2019 ssl_linux

    15/28

    Luego abrimos el archivo del openssl que estamos modificando, para tener una imagen clara y

    manejo facil, lo hacemos con la utilidad gedit

    Como anteriormente hemos vaciado el archivo, se recomienda utilizar las siguientes lineas con lasque segn nuestras preferencias, obtendremos las variables que el servidor tomara para la ejecucin

    de las funciones de openssl, como creacin y firma de certicados digitales

    # www.linuxtotal.com.mx# [email protected]## Archivo de configuracion para openssl## ***** openssl.cnf ******

    dir = . # variable que establece el directorio de trabajo

    # seccion que permite convertirnos en una CA# solo se hace referncia a otra seccin CA_default[ ca ]

    default_ca = CA_default

    [ CA_default ]serial = $dir/serial # archivo que guarda el siguiente nmero de seriedatabase = $dir/index.txt # archvio que guarda la bd de certificadosnew_certs_dir = $dir/certificados # dir que guarda los certificados generadoscertificate = $dir/CAcertificado.pem # nombre del archivo del certificado razprivate_key = $dir/privado/cakey.pem # llave privada del certificado razdefault_md = md5 # algoritmo de dispersin usadopreserve = no # Indica si se preserva o no el orden de los

    # campos del DN cuando se pasa a los certs.nameopt = default_ca # esta opcion y la siguiente permiten mostrar

    # detalles del certificadocertopt = default_capolicy = policy_match # indica el nombre de la seccion

    # donde se especifica que campos son# obligatorios, opcionales y cuales deben ser# iguales al certificado raz

  • 8/14/2019 ssl_linux

    16/28

    # seccion de politicas para la emision de certificados[ policy_match ]countryName = match # match, obligatoriostateOrProvinceName = matchorganizationName = matchorganizationalUnitName = optional # optional, campo opcionalcommonName = supplied # supplied, debe estar en la peticinemailAddress = optional

    # seccion que indica como los certificados deben ser creados[ req ]default_bits = 1024 # tamao de la llave, si no se indica 512default_keyfile = key.pem # nombre de la llave privadadefault_md = md5 # algoritmo de dispersin a utilizarstring_mask = nombstr # caracteres permitidos en la mascara de la llavedistinguished_name = req_distinguished_name # seccion para el nombre distinguido (DN)req_extensions = v3_req # seccion con mas extensiones que se aaden a la

    # peticion del certificado

    # seccion del nombre distinguido, el valor es el prompt que se vera en pantalla.# datos del propietario del certificado.# esta seccion define el contenido de datos de id que el certificado llevara.[ req_distinguished_name ]0.organizationName = Nombre de la organizacion0.organizationName_default = Alejo, S.A.organizationalUnitName = Departamento o divisionemailAddress = Correo electronicoemailAddress_max =localityName = Ciudad o distritolocalityName_default = MedellinstateOrProvinceName = Estado o provinciastateOrProvinceName_default = AntioquiacountryName = Codigo del pais (dos letras)countryName_default = COcountryName_min = 2countryName_max = 2commonName = Nombre comun (hostname o IP)

    commonName_max = 64

    # si en la linea de comandos se indica la opcion -x509,# las siguientes extensiones tambien aplican[ v3_ca ]# indica que se trata de un certificado CA raz con autoridad para# firmar o revocar otros certificadosbasicConstraints = CA:TRUE

    # especifica bajo que metodo identificar a la llave publica que sera certificadasubjectKeyIdentifier = hash

    # especifica como identifcar la llave publica

    authorityKeyIdentifier = keyid:always,issuer:always

    # extensiones de la opcion req[ v3_req ]basicConstraints = CA:FALSE # los certificados firmados no son CAsubjectKeyIdentifier = hash#

  • 8/14/2019 ssl_linux

    17/28

    Al copiar estas lineas en /etc/ssl/openssl.cnf con la utilidad gedit, deberemos ver algo as.

    Al volver a la consola original y ver o modificar los campos para nuestra configuracin unica,

    debemos prestar especial atencin a las lineas que se muestran a continuacin, pues indican la

    informacion requerida en los certicados.

  • 8/14/2019 ssl_linux

    18/28

    Antes de proceder a ejecutar las funciones propias de una entidad certicadora, verificamos que los

    archivos y directorios necesarios se encuntren en la ruta adecuada, en este caso. /etc/ssl/CA/

    4- Al completar los requisitos anteriores crearemos el certicado que avalara la identidad de unaentidad certificadora, que nos permitira a su vez la creacion y firma de certificados, para las

    conexiones seguras.

    El siguiente comando nos generara el certificado raz = CAcertificado.pem y Llave privada =

    /etc/ssl/CA/privado/cakey.pem con la que la nueva entidad certicadora avalara su identidad y las

    que en ella confien.debian:/etc/ssl/CA# openssl req -new -x509 -extensions v3_ca -keyout privado/cakey.pem \

    El anterior comando activa el asistente para peticin de certificados y con la siguiente cadena lo

    generamos

    > -out CAcertificado.pem -days 3650 -config ./openssl.cnf

  • 8/14/2019 ssl_linux

    19/28

    el comando openssl invocado anteriormente esta acompaado de las siguintes opciones

    *req -new -x509 = sirve para crear un nuevo certificado autofirmado.

    *-extensions v3_ca = sirve para crear el certificado raz CA (Entidad certificadora).

    *-keyout = sirve para especificar el nombre y donde se guardara la llave privada.*-out = sirve para mostrar el nombre del certificado raz CA.

    *-days 3650 = sirve para especificar el periodo de validez del certificado (3650 das=10aos). Si nose especifica el tiempo el certificado tendr una duracin de 30 das.

    *-config = archivo de donde tomara la configuracin

    El asistente de peticion de certificados ira tomando los datos necesarios para avalar la peticin

    como la empresa, el pais, etc.

    Ahora podemos ver el certificado de la nueva entidad certicadora que la identificara ante los

    usuarios que a ella hagan peticiones, debian:/etc/ssl/CA# more Cacertificado.pem

  • 8/14/2019 ssl_linux

    20/28

    Y la clave generada al pedir el certificado. debian:/etc/ssl/CA# more privado/cakey.pem

    5- Como ya tenemos una entidad certicadora que firmara y avalara la identidad de sitios web que

    confien en ella, procedemos a generar la peticin del certificado para el sitio web en el que hemos

    trabajado (www.alejo.com) con el siguiente comando, donde indicamos:*req =solicitando un certificado nuevo.

    *-out =nombre del certificado que deseamos que nos firmen.

    *-config =toma el archivo de configuracin que creamos.*-nodes =indica que no deseamos contrasea en la llave privada. .

    debian:/etc/ssl/CA# openssl req -nem -nodes -out alejo-cert.pem -config ./openssl.cnf

    http://www.alejo.com/http://www.alejo.com/
  • 8/14/2019 ssl_linux

    21/28

    Ingresamos los datos que el asistente de generacin de certicados requiere, podemos dejar los que

    trae por omisin, o modificarlos segn nuestra preferencia, (el nombre comun sera el que indiqueel propietario del certificado, por lo que este debe ser valido segn nuestra configuracin.)

    Hemos generado una peticin de certificado alejo-cert.pem y una llave privada key.pem con la

    que se encriptara la comunicacin que bajo este certificado se establezca, observamos la peticion.

    Y la llave de este certificado.

  • 8/14/2019 ssl_linux

    22/28

    Para que la peticion generada anteriormente pase a ser certificado, necesitamos que la entidad lo

    firme y exporte para ser agregado al sitio web solicitante.

    Nos pedira la clave de la entidad certificadora, nos confirmara los datos del certificado y nospreguntara si deseamos firmar esta peticion.

    Al firmarlo la peticion pasara a ser certificado con un formato como el siguiente

  • 8/14/2019 ssl_linux

    23/28

    Los archivos de la entidad certificadora se actualizaran en el momento de la creacion de estos y

    podemos verificarlo en el serial y en el idex.txt

    6- El servidor necesitara habilitar ahora su autenticacin, indicando que la conexin hacia l se harade forma segura, adems debe especificarse en sus archivos de configuracin la ruta del certificado

    que utilizara y las redirecciones respectivas a puertos seguros, esto se hace principalmente en el

    archivo del sitio web, donde se agregara un al final del archivo, la variable deRedirectPermanent y las variables de SSL que habilitaran e indicaran el metodo de autenticacin.

    ServerName www.alejo.comServerAdmin webmaster@localhostRedirectPermanent / https://www.alejo.comDocumentRoot /var/www/buscador/

    Options FollowSymLinksAllowOverride None

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

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

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

    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

  • 8/14/2019 ssl_linux

    24/28

    Alias /doc/ "/usr/share/doc/"

    Options Indexes MultiViews FollowSymLinksAllowOverride NoneOrder deny,allowDeny from allAllow from 127.0.0.0/255.0.0.0 ::1/128

    ServerName www.alejo.comServerAdmin webmaster@localhost

    DocumentRoot /var/www/buscador/

    Options FollowSymLinksAllowOverride None

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

    SSlEngine onSSLCertificateFile /etc/ssl/CA/firmado-alejo.comSSLCertificateKeyFile /etc/ssl/CA/key.pem

    *Modificaremos el host virtual para que nos direccione de http:// a https:// donde nos indica que el

    sitio es seguro y utiliza ssl.

    *Agregamos la variable RedirectPermanent / https://www.alejo.com para que todas las peticionesque el usuario haga por el puerto 80 las envi al puerto seguro 443.

    *Agregamos las variables que indicaran la interaccin con SSL.

    SSLEngine on es para encender el motor de SSL.SSLcertificateFile ruta donde se almacena nuestro certificado firmado. (/etc/ssl/CA/firmado-alejo.com).

    SSLCertificateKeyFileruta donde se almacena la llave privada.(/etc/ssl/CA/key.pem).

    Para habilitar la comunicacin por el puerto seguro debemos indicarle al archivo referente que lo

    haga por el puerto 443 para las comunicaciones seguras en los servidores web.

    https://www.alejo.com/https://www.alejo.com/
  • 8/14/2019 ssl_linux

    25/28

    7- Por ultimo habilitamos el mdulo de seguridad para apache2 con el comando que carga los

    modulos debian:/etc/apache2# a2enmod ssl

    Terminamos reiniciando apache para que tome los ultimos cambios realizados en sus archivos y

    luego de corregir posibles errores de rutas y variables procedemos a probarlo

  • 8/14/2019 ssl_linux

    26/28

    Ahora necesitamos verificar que todo lo realizado anteriormente se a incorporado al servivio de una

    forma exitosa, primero nos dirigimos al navegador web y digitamos la url del sitio que hemostrabajado anteriormente http://www.alejo.com

    Debera emitir una notificacin de error al comunicarse pues este sitio debe verse utilizando uncertificado vlido con el cual no contamos, entonces damos clik en el enalce Or you can add...

    para permitir la instalar el nuevo certificado y proceder a el inicio en el servidor.

    http://www.alejo.com/http://www.alejo.com/
  • 8/14/2019 ssl_linux

    27/28

    Nos mostrara la opcin de aadir el certificado Add exeption... y al aceptarla se desplegara un

    asistente que permitira obtener dicho certificado

    Podemos ver el certificado antes de instalarlo para comprobar los datos genrales de este.

  • 8/14/2019 ssl_linux

    28/28

    Y al aceptar la conexin con este metodo de autenticacin nos direccionara automaticamente al sitio

    web seguro que hemos configurado a lo largo de este documento, indicando de este modo deconexin por que en la barra de navegacin en ves de aparecer http:// ahora sale https:// y por el

    candado de la parte inferior del navegador.