HOW-TO INSTALACION Y CONFIGURACION DE UN SERVIDOR APACHE CON SSL EN DEBIAN ETCH 4.0 Y CERTIFICADO AUTORIRMADO POR NUESTRA CA LOCAL
En la actualidad, con el mundo en desarrollo y a la velocidad con al que avanza, el poco tiempo de las personas para llevar a cabo las tareas pendientes y con la rapidez con la que desean desarrollarlas, el uso de la Internet se ha visto como la mejor herramienta para hacerlo.
Pero debido a la misma velocidad de crecimiento se fue presentando inseguridad en el momento de implementar la Internet para las tareas cotidianas, por lo que se implementaron protocolos que brindaran confianza al momento de realizar una transacción bancaria, una compra electrónica, entre otras. Estos protocolos se basan a nivel de socket (IP + Puerto), por lo que son indiferentes de la aplicación en que se usan; además trabajan entre las capas de Transporte y Aplicación del Modelo OSI. Los protocolos mas conocidos son(**mas adelante hablo sobre estos): 1. SSL 2. TLS
Lo que haremos a continucion en este How-to es la implementación de un servidor web mediante estos protocolos (específicamente SSL), pasando por la creación de una Autoridad Certificadora, que seremos nosotros mismos, la generación de
nuestras llaves tanto privada como publica, la petición de un certificado en este caso a nosotros mismos, la firma del mismo y el acceso al servicio web de nuestra organización.
•
Empezaremos entonces con la instalación de un servidor DNS:
•
Instalaremos el bind9, de los repositorios de Debian (deb http://http.us.debian.org/debian etch main contrib non-free).
•
Entraremos a editar el archivo de configuración del DNS, para crear nuestras zonas, esto es una implementación básica.
•
Aquí se muestra la configuración de mis zonas, las que aparecen entre las líneas negras son mis campos de configuración, y mi dominio será “redes.net”, con un direccionamiento IP clase C.
•
Ahora copiaremos el archivo de la zona directa que trae por defecto el bind9 y lo pegaremos en el archivo “directa”.
•
Editaremos nuestra zona directa
•
Y este el archivo de la zona directa.
•
Haremos lo mismo con nuestra zona inversa.
•
Entraremos a editar nuestro archivo de hosts para que nuestro DNS reconozca mediante nuestra IP y nombre de host el servicio web.
•
Dejando asi nuestro archivo:
•
Ahora editaremoe el resolv.conf para que nuestro DNS resuelva nuestra IP y dominio.
•
Dejandolo asi.
•
Y reiniciamos.
•
Y hacemos las pruebas respectivas, a nuestro equipo(debían), nuestro registro www y a nuestra IP, todo esta OK.
•
Ahora, instalaremos nuestro servidor web. Usaremos Apache2.
•
Editaremos el archivo de configuración de apache.
•
Agregaremos nuestro directorio de la pagina principal, y comentaremos el RedirectMatch.
•
Nos iremos a /home, y crearemos nuestro directorio para el sitio web.
•
Y crearemos nuestro archivo para la pagina principal.
•
Este será una pagina sencilla.
•
Reiniciamos el servicio.
•
Iremos a nuestro browser y comprobamos.
•
Instalaremos ahora el servicio “openssl”.
•
Verificamos la versión de nuestro openssl.
•
Iremos ahora al directorio de ssl.
•
Crearemos aquí un directorio de trabajo para mayor organización, usa el nombre que desees.
•
Y dentro del directorio anterior (CA), crearemos dos directorios mas. En “certificados” almacenaremos todos los certificados que firmemos, y en “privado” guardaremos nuestra clave privada.
•
Crearemos un archivo que contendra los numeros de serie de nuestros certificados, iniciando con el 01. # echo ‘01’ > serial
• •
Y un archivo que sera la base de datos en base a nuestros numeros de serie de los certificados. •
# touch index.txt
•
Me devuelvo al directorio “/etc/ssl” y en mi caso particular hare una copia del archivo de configuración del openssl.
•
Borrare el contenido del archivo de configuración, NO el de la copia.
•
Y editaremos el archivo a nuestra conveniencia, aqui les dejo una muestra básica del archivo que se uso en este caso: # ******************************************************* ****************************** # www.redes.net #
[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 sección CA_default [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial # archivo que guarda el siguiente número de serie
database = $dir/index.txt # archvio que guarda la bd de certificados new_certs_dir = $dir/certificados # dir que guarda los certificados generados certificate = $dir/cacert.pem # nombre del archivo del certificado raíz private_key = $dir/privado/cakey.pem # llave privada del certificado raíz default_md = md5 # algoritmo de dispersión usado preserve = 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 certificado certopt = default_ca policy = policy_match # indica el nombre de la seccion # donde se especifica que campos son # obligatorios, opcionales y cuales deben ser # iguales al certificado raíz # seccion de politicas para la emision de certificados [ policy_match ] countryName = match # match, obligatorio stateOrProvinceName = match organizationName = match organizationalUnitName = optional # optional, campo opcional commonName = supplied # supplied, debe estar en la petición emailAddress = optional # seccion que indica como los certificados deben ser creados [ req ] default_bits = 1024 # tamaño de la llave, si no se indica 512
default_keyfile = key.pem # nombre de la llave privada default_md = md5 # algoritmo de dispersión a utilizar string_mask = nombstr # caracteres permitidos en la mascara de la llave distinguished_name = req_distinguished_name # seccion para el nombre distinguido (DN) req_extensions = v3_req # seccion con mas extensiones que se añaden 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 organizacion 0.organizationName_default = Redes, S.A. organizationalUnitName = Departamento o division emailAddress = Correo electronico emailAddress_max = 40 localityName = Ciudad o distrito localityName_default = Medellin stateOrProvinceName = Estado o provincia stateOrProvinceName_default = Antioquia countryName = Codigo del pais (dos letras) countryName_default = CO countryName_min =2 countryName_max =2 commonName = 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 raíz con autoridad para # firmar o revocar otros certificados basicConstraints = CA:TRUE
# especifica bajo que metodo identificar a la llave publica que sera certificada subjectKeyIdentifier = 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 CA subjectKeyIdentifier = hash # ******************************************************* ******************************
•
Ahora moveremos nuestro archivo al directorio CA.
•
Listaremos el contenido de nuestro directorio CA.
•
Ahora crearemos nuestro certificado, que es el que nos permitirá realmente ser una Entidad Certificadora (por lo cual a este certificado se le conoce como “certificado raíz”). Al darle este comando nos solicitara una contraseña “passphrase”, que lo ideal seria que fuera una combinación de caracteres alfaumericos, simbolos especiales y rotando entre mayúscula y minúscula.
Una pequeña explicación de los parámetros usados en la creación de un certificado raíz. req -new -x509 à sirve para crear un nuevo certificado autofirmado (y ya que somos nuestra propia entidad certificadora…). -extensions v3_caà sirve para crear el certificado raíz CA (Entidad certificadora). -keyoutà sirve para especificar el nombre y donde se guardara la llave privada. -out à sirve para mostrar el nombre del certificado raíz CA.
-days 3650à sirve para especificar el periodo de validez del certificado (3650 dias=10 años). Sino se especifica el tiempo el certificado tendrá una duración de 30 dias. -configà sirve para especificar el archivo de configuración a usar para relacionar datos. •
Ahora nos solicitara la passphrase para validar el certificado. Recuerda, entre mas compleja mejor.
•
Nos preguntara los datos necesarios para crear el certificado.
•
•
Lo anterior nos generara dos archivos diferentes: o El certificado raíz CA (cacert.pem). o La llave privada, la cual se almacenara en /etc/ssl/CA/privado/cakey.pem**. o **PEM—>Privacy Enhanced Message==Mensaje Mejorado de Privacidad. Visualicemos un poco estos dos archivos. El siguiente archivo (cacert.pem), es el que le enviaremos a nuestros clientes para que lo importen en sus browsers.
•
Ahora deberemos crear una solicitud de firmado de certificado, el mas conocido como CSR (Certificate Signing Request). Pues ya que ahora estamos validados como CA con el certificado raíz. Ademas crearemos una llave privada y firmaremos la solicitud para generar un certificado autofirmado. El comando es muy parecido al anterior pero esta vez no nos pedirá contraseña, pero si se creara una llave privada para la solicitud.
•
Nos volverá a pedir los datos necesarios, que deberán ser de conformidad a las políticas del archivo de configuración “openssl.cnf”, y lo mas importante es que el CN sea igual en este paso como en el anterior. Es decir, www.redes.net.
•
Especifiquemos los parámetros usados aquí reqà de request en ingles, solicitando un certificado nuevo. -out à es el nombre del certificado que deseamos firmar. -config àsirve para especificar el archivo de configuración a usar.
-nodesà sirve para especificar que no deseamos contraseña en la llave privada de la solicitud. •
Este paso anterior nos generara dos archivos:
•
redes-cert.pemà es el csr. o key.pemàla llave privada. Visualicemos ahora el csr.
•
Ahora firmaremos la solicitud anterior. Para esto deberemos
o
indicar la contraseña que tecleamos en el paso de la creación del certificado raíz, que nos señala como una autentica CA, y que por tal tenemos la autoridad de firmar certificados.
•
Nos preguntara si deseamos firmar el certificado, a lo que responderemos que si.
•
Nos preguntara si accedemos a almacenarlo en la base de datos, a lo que responderemos que si.
Parametros usados en este paso: -out à será el archivo “certificado-redes.pem”. -configà usara las opciones del archivo de configuración dado “openssl.cnf”. -infilesà será la solicitud de firmado tomando datos del archivo creado anteriormente “redescert.pem” •
Comprobaremos que el numero de serie aumento a 2, i.e. el siguiente certificado que firmemos será ese numero.
•
Comprobaremos que en index.txt se están almacenando los datos del certificado recién creado, y el numero de serie 01.
•
En el directorio “certificados” se almacenara el correspondiente numero de serie 01.pem y que complementa la base de datos de certificados.
•
Ahora, lo que haremos será configurar el servidor Apache con la intención de darle seguridad a través de SSL.
•
Ahora, solo debere agregar en
/*para que escuche por todas las interfaces a través del puerto 443 (ssl).
•
Añadire el “ServerAdmin [email protected]”; el cual es el correo donde deben reportarse los problemas.
•
• •
“ServerName www.redes.net”. Mi servidor web. “DocumentRoot /home/web/”. El directorio donde se halla mi sitio web. Antes de termianr el archivo de configuración añadiremos estas líneas para implementar el SSL.
Donde “SSLEngine on” à es encender el motor de SSL. “SSLcertificateFile” àla ruta donde se lamacena nuestro cetificado firmado. (/etc/ssl/CA/certificado-redes.pem). “SSLCertificateKeyFile” àla ruta donde se almacen la llave privada. (/etc/ssl/CA/key.pem).
•
Editaremos el archivo siguiente con la intención de poner a escuchar al Apache por SSL –443.
•
Ahora deberemos cargar el modulo SSL para establecer que el Apache sea seguro, mediante el comando “a2enmod”, lo logramos. Y le daremos “ssl”.
•
El mismo nos pedirá que forcemos el inicio de Apache2, por lo que.
•
Ahora haremos la prueba desde nuestra maquina local, i.e., el servidor (127.0.0.1). Nos pedirá el certificado. OK.
•
Detalles del certificado.
•
Prueba por IP (192.168.0.144).
•
Prueba por nombre de dominio.
PRUEBAS DESDE UN CLIENTE WINDOWS •
Primero en la interfaz de red del cliente, nos añadiremos como DNS.
•
Accederemos mediante nuestra IP. (Recordemos bajar el firewall, por ahora, mientras no sepamos como configurarlo).
•
Nos presenta la excepción, del certificado.
•
Añadiremos la excepción.
•
E importaremos el certificado de nuestra CA.
•
Aquí lo hacemos con el nombre del dominio www.redes.net.
•
Hacemos igual.
•
Detalles del certificado.
•
Aquí confirmamos la excepción y nos mostrara https://www.redes.net.
•
Con esto hemos concluido la instalación y configuración de un servidor web con ssl.
Bibliografia. http://www.google.com.co
http://www.linuxtotal.com.mx/index.php?cont =info_seyre_001 http://anduran.blogspot.com/2008/05/how-toopenssl-y-apache-como-servidor.html Hecho por Daniel Contreras Rey. Aprendiz Administracion de Redes de Computadores. SENA-Regional Antioquia. CESGE.