SEGURIDAD

El trabajo final de Seguridad y Principios de seguridad

INSTALACIÓN DE UN SERVIDOR WEB SEGURO CON CERTIFICADO DIGITAL octubre 30, 2009

Archivado en: Uncategorized — svelasquez @ 10:21 pm
Tags: ,

En esta entrada describiré como se debe montar un servidor web seguro, y la elaboración de su certificado digital.  

El servidor a usar será Apache 2.  Para el correcto funcionamiento de éste se necesita que cuente con un certificado digital de seguridad.  Estos certificados son expedidos por entidades certificadoras, llamadas CA, como Verisign, y en Colombia, Certicámaras.  Lo que haría una empresa que quisiera asegurar su  servidor es crear una petición de certificado (archivo con extensión.crs) y envariala a una de éstas entidades, las cuales le devolverán el certificado digital que debe instalar en el servidor. Este certificado tiene la extensión .crt.  

Lo que voy a hacer para mostar  como se debe configurar el servidor,  es crear un certificado digital  autofirmado para una entidad certificadora ficticia,  luego firmar la petición de certificado del servidor y así no  tener que pagar por dicho certificado.  (OJO: Solo fines académicos)

Utilizaré openssl para hacer los certificados. Así que comencemos:   

 Paso 1: Instalar openssl   

Openssl se puede instalar  mediante  la instrucción:  

—–> aptitude install openssl

 Paso 2: Crear directorios   

Es recomnedable que creemos directorios para organizar los certificados que generemos y no llegar a confundirnos.  Crearé una carpeta en root llamada “Certificados” y dentro de ella dos directorios más, llamados “CA” y   “servidor”.  Ésto se logra mediante las instrucciones:  

—–> mkdir Certificados

—–> cd Certificados

—–> mkdir CA

—–> mkdir servidor


   Paso 3: Crear el certificado autofirmado de la entidad certificadora
  

Para crear el certificado se debe hacer primero la llave privada de la entidad guardándola en la carpeta CA creada anteriormente mediante las instrucciones:  

 —–> cd Certificados/CA

 —–> openssl genrsa -des3 -out ca_sergio.key 1024

Ésto significa que en la carpeta “CA” nos generará un archivo llamado ca_sergio.key que contendrá la llave hecha con los siguientes parámetros:  

  • algoritmo de cifrado : des3
  • tamaño de la llave en bits: 1024

  

Después tendremos que digitar un password.  En este caso será:   “entidad”.  Éste password es para asegurar la llave privada de la entidad certificadora.  


Ahora debemos generar el certificado digital.  Este certificado será firmado con la llave  obtenida anteriormente:  

—–> openssl req -new -x509 -days 365 -key ca_sergio.key -out ca_sergio.crt

Con esta instrucción hemos creado un nuevo  certificado  para la entidad certificadora llamado ca_sergio.crt y firmado con la llave que creamos anteriormente ca_sergio-key  

Otros parámetros importantes de la instrucción son:  

  • estándar del certificado: x509
  • Vigencia del certificado: 365 dias

Ahora se nos pedirá el password que le pusimos a la llave, y  luego tendremos que completar la información del certificado como se muestra a continuación:  

  • Country Name (2 letter code) [AU]:CO
  • State or Province Name (full name) [Some-State]:Antioquia
  • Locality Name (eg, city) []:Medellin
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:OREX
  • Organizational Unit Name (eg, section) []:Unidad de Certificación
  • Common Name (eg, YOUR name) []:www.orex.com.co
  • Email Address []:info@orex.com.co

    
 

  

Con esto ha quedado listo el certificado autofirmado de la entidad certificadora.
   


Paso 3: Crear el certificado para el servidor web
  

Ahora se debe crear el certificado para el servidor web, pero primero necesitamos  su llave privada :
Nos debemos ubicar en la carpeta servidor:  

—–> cd Certificados/servidor

Luego digitamos:  

—–> openssl genrsa -des3 -out srv_sergio.key 1024

Con esto hemos creado un archivo de lave llamado srv_sergio.key donde:  

  • El algoritmo de encripción es des3
  • Tamaño de la llave en bits:1024

    

Luego se debe crear la petición de certificado digital del servidor web, eso se logra mediante el comando:   

—–> openssl req -new -key srv_sergio.key -out srv_sergio.crs

También nos pide un password para proteger la llave privada del servidor. En este caso ingresé “servidor”.  

Debemos introducir la información de la petición de certificado digital como:  

  •  Country Name (2 letter code) [AU]:CO
  • State or Province Name (full name) [Some-State]:Antioquia
  • Locality Name (eg, city) []:Medellín
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:Velasquez s.a.
  • Organizational Unit Name (eg, section) []: Departamento de Certificación
  • Common Name (eg, YOUR name) []:velasquez.seguridad.net
  • Email Address []:sergio@velasquez.seguridad.net
  • Please enter the following ‘extra’ attributes to be sent with your certificate request
  • A challenge password []:
  • An optional company name []:

  

    
 

Una vez que tenemos la petición anterior podemos generar, con el certificado autofimado de la CA,  el certificado del servidor:  

—–>  openssl x509 -req -in srv_sergio.crs -out srv_sergio.crt -sha1 -CA ../CA/ca_sergio.crt -CAkey ../CA/ca_sergio.key -CAcreateserial -days 365  

Los valores especificados en dicha instrucción corresponden a:
  

  • Petición de certificado del servidor: -req -in srv_sergio.crs
  • Algoritmo hash: sha1
  • Certificado de la CA:  CA ../CA/ca_sergio.crt
  • Llave privada de la CA: CAkey ../CA/ca_sergio.key
  • Vigencia del certificado: 365 días

    

  Luego saldrá en la consola una confirmación y la información que contiene el certificado:  

 Signature ok  

 subject=/C=CO/ST=Antioquia/L=Medellin/O=Velasquez s.a./OU=Departamento de  Certificación/CN=velasquez.seguridad.net/emailAddress=sergio@velasquez.seguridad.net  

 Debemos  ingresar  la contraseña de la llave privada de la entidad (“entidad”), y con ésto hemos completado la  generación del  certificado srv_sergio.crt

  
 

  

   
 


     Paso 4: Instalación y configuración del servidor  

El servidor a usar será Apache 2. La forma de instalarlo es:  

—–> aptitude install apache2  

Se debe crear una carpeta llamada ssl en /etc/apache2/ y  allí copiar los archivos srv_sergio.crt y srv_sergio.key creadas anteriormente.
En esa misma carpeta se debe generar una archivo  nombrado  “nombredelservidor.pem”, es decir velasquez.seguridad.net.pem. 

Éste archivo contiene la llave y el certificado  que pusimos en la carpeta. El comando para hacer esto es cat, y la instrucción completa sería:  
—–> cat srv_sergio.key srv_sergio.crt >velasquez.seguridad.net.pem  

A dicho archivo se le deben adicionar 3 líneas muy importantes para crear la llave sin password, pues sería muy molesto que cada que el

servidor Apache inicie se pida la llave. Dichas líneas son:

—–> cp srv_sergio.key srv_sergio.bak

—–> cp velasquez.seguridad.net.pem velasquez.seguridad.net.pem.bak

—–> openssl rsa -in srv_sergio.key -out no.pwd.srv_sergio.key

Nótese que el archivo con nombre “no.pwd.srv_sergio.key” se convertirá en la llave sin password que usará el servidor.  

Se requiere crear  un archivo nombrado como nombredominio.pem con la llave que no requiere password:  

—–> cat no.pwd.srv_sergio.key srv_sergio.crt >velasquez.seguridad.net.pem  

El servidor Apache 2 buscará el certificado y la llave en el archivo que acabamos de crear y no pedirá la clave cada que se inicie. 

 
   P
aso 5: Configuración del sitio ssl

   Ahora se debe configurar el sitio ssl, para ello necesitamos habilitar  el módulo ssl del apache:  

—–> a2enmod ssl  

y aparecerá un mensaje que dice: 


—–> Module ssl installed; run /etc/init.d/apache2 force-reload to enable.

Ahora debemos buscar un archivo llamado “default” en la carpeta etc/apache2/sites-available/.  Este archivo es un modelo de como se debe configurar el sitio ssl. Para no ir a destruirlo creamos una copia  y la pegamos en el mismo lugar pero le cambiamos el nombre a velasquez.seguridad.net:  

—–> cp /etc/apache2/sites-available/default /etc/apache2/sites-available/velasquez.seguridad.net  

En dicho archivo modificamos las líneas:  

NameVirtualHost velasquez.seguridad.net:443
<VirtualHost velasquez.seguridad.net:443> Este es el dominio del sitio y el puerto https

ServerAdmin sergio@velasquez.seguridad.net   Es el administrador del dominio. 

 Y añadimos las líneas:  

SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/velasquez.seguridad.net.pem  


Se debe habilitar el sitio en la carpeta “etc/apache2/sites-enabled/” mediante  el comando:  

—–> a2ensite velasquez.seguridad.net
  

Paso 6: Pruebas  

Para poder probar el servidor  debemos  asociar nuestro dominio con la dirección loopback 127.0.0.1, así que en el archivo /etc/hosts se debe agregar la línea:

 127.0.0.1 velasquez.seguridad.net 

se debe reiniciar el servidor: 

—–> /etc/init.d/apache2 restart


  
En un browser como Mozilla entramos a la página que corresponde a nuestro dominio: 

https://velasquez.seguridad.net

Aparece una ventana de error indicando que la conexión segura falló, pues el certificado está firmado por una entidad certificadora no reconocida.  


Entonces debemos instalar ese certificado.  Se debe dar click en agregar excepción.  


Luego aparecerá una ventana preguntándonos si deseamos confirmar la excepción.  

  

      ¿Cómo veo el certificado digital?  

En esta misma ventana damos click en el botón ver, y aparece la información del certificado.  


Si nos pasamos a la pestaña de detalles podemos ver la información detallada del issuer y del subject dando click en esos campos:  



Una vez la confirmemos,  el certificado quedará instalado y no saldrá nunca más saldrá la ventana de error inicial y  se puede ver la página principal del servidor. Aparece un candado en la parte inferior  que significa que se ha establecido una conexión segura.  


Así se logra que el servidor web este seguro y  la trasmisión de datos sea cifrada. 

Advertisement
 

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

 
Seguir

Get every new post delivered to your Inbox.