Como instalar un servidor web seguro

Por José Manuel Gómez, jmg@kriptopolis.com

31 Mayo 2000
DESCARGO DE RESPONSABILIDAD
Como puede imaginarse, este curso de choque (que se proporciona completo y de forma gratuita) NO TIENE GARANTÍA de ninguna clase, y si usted decide seguirlo lo hace BAJO SU EXCLUSIVA RESPONSABILIDAD. De ninguna manera podemos responder por posibles daños en su sistema, ni podemos comprometernos a prestarle asesoramiento individualizado de ninguna clase. Por tanto ESTAS INSTRUCCIONES SE PROPORCIONAN TAL CUAL, DE FORMA GRATUITA Y SIN GARANTIA DE NINGUNA CLASE.




INTRODUCCION

El objetivo de este tutorial será construir un servidor seguro gratuito (Apache + SSL) en nuestro ordenador personal bajo Linux. El planteamiento del tutorial es puramente didáctico y recreativo. Si bien todo lo dicho bien pudiera aplicarse a la creación de un servidor web seguro destinado a dar servicio al público, nosotros mantendremos un ámbito más limitado para el mismo: un servidor seguro que funcione -en principio- sólo en nuestra propia máquina. Para ello, incluso lo dotaremos de un certificado también construido por nosotros mismos, pero que carecería de cualquier validez fuera de nuestra máquina, al no estar reconocido por ninguna autoridad de certificación externa. Aunque -insistimos- todo lo dicho aquí sería de aplicación a un servidor web real (disponible para conexión y uso público), en ese caso la configuración debería afinarse mucho más de lo que aquí se dice.

Lógicamente, los servidores seguros no son privativos del entorno Linux, pero en esos otros casos no resulta posible trabajar -como aquí- a nivel del propio código de los programas, y siempre nos veremos obligados a utilizar "cajas negras", cuyo funcionamiento y características nunca podremos estudiar, comprender ni modificar, y mucho menos a los niveles que Linux nos permite.

REQUISITOS PREVIOS

1. Un sistema Linux instalado y funcionando. No debe haber problema en esto: un mes sí y otro también, las principales revistas de informática regalan alguna de las distribuciones más recientes. Si no tiene ninguna de ellas a mano, descargar Linux gratis desde Internet es también posible, pero resulta bastante más práctico adquirir, por muy poco dinero, alguna distribución completa y reciente. En este artículo hemos utilizado Esware 1.1, distribución española basada en Red Hat.

2. A pesar de que en su distribución Linux puedan venir incorporadas versiones anteriores de los paquetes necesarios, recomendamos descargar desde Internet las versiones más recientes de los siguientes ficheros:

1) Servidor web APACHE:

http://www.apache.org/dist/
Versión 1.3.12 en el momento de escribir este artículo:
fichero apache_1.3.12.tar.gz (1709 Kb)

2) OpenSSL:

http://www.openssl.org
Código criptográfico para SSL v.2/v.3 y TLs v.1.
Versión 0.9.5 en este momento:
fichero openssl-0.9.5.tar.gz (1886 Kb)

3) Parche SSL para Apache:

http://www.apache-ssl.org
Parches que permitirán disfrutar SSL en Apache.
fichero apache_1.3.12+ssl_1.39.tar.gz (47 Kb)

Existen también distribuciones RPM que ya contienen todo lo necesario en un solo paquete y cuya instalación es sencillísima. No obstante, usted suele perder el control sobre lo que instala. Alguna de ellas incorpora incluso extensiones para Microsoft FrontPage 2000. Dado que estamos tratando de un tema de estricta seguridad, y donde podemos disfrutar del lujo de disponer del código fuente de todo lo que instala, aquí preferiremos seguir el camino más largo y renunciar de antemano a tales comodidades. Dados los frecuentes fallos de seguridad de los productos Microsoft, esa combinación en concreto no se diferenciaría mucho (en nuestra opinión) de encargar al zorro que vigile a las gallinas.

 

PRIMEROS PASOS

1. En primer lugar, procederemos a descomprimir el fichero que contiene el código fuente del servidor web Apache. Para ello, sitúese en el directorio a donde descargó su fichero apache_1.3.12.tar.gz y escriba en su terminal lo siguiente:

cp apache_1.3.12.tar.gz /usr/local/src
cd /usr/local/src
tar xvfz apache_1.3.12.tar.gz

(NOTA: el directorio de instalación puede ser cualquiera de su elección, distinto -por tanto- del aquí indicado.)

Observará que existe un nuevo directorio /usr/local/src/apache_1.3.12, que contiene varios ficheros y directorios en su interior. Correcto.

2. Ahora instalaremos las librerías criptográficas que nos permitirán disponer de SSL en el servidor que estamos construyendo. Desde su directorio de download, teclee lo siguiente:

cp openssl-0.9.5.tar.gz /usr/local/src
cd /usr/local/src
tar xvfz openssl-0.9.5.tar.gz

Como en el apartado anterior, existirá ahora un nuevo directorio llamado /usr/local/src/openssl-0.9.5. Sitúese en él y ejecute el script de configuración:

cd /usr/local/src/openssl-0.9.5
./config

Procedemos ahora a compilar estas librerías:

make
make test
make install

Si todo fue bien, ahora dispondremos de un directorio /usr/local/ssl, conteniendo todo lo necesario para que SSL pueda funcionar en su servidor.

3. Nos resta instalar nuestro tercer fichero, es decir, el parche que permitirá que nuestro flamante Apache pueda hacer uso de las librerías que acabamos de compilar en el paso anterior. El proceso es similar; vaya a su directorio de download (donde descargó el fichero) y escriba:

cp apache_1.3.12+ssl_1.39.tar.gz /usr/local/src/apache_1.3.12

cd /usr/local/src/apache_1.3.12

tar xvfz apache_1.3.12+ssl_1.39.tar.gz

En el fichero README.SSL contenido en este directorio aparecen las instrucciones a seguir ahora. La opción más sencilla es escribir:

FixPatch

y el parche ajustará todo lo necesario.

ENSAMBLANDO EL CONJUNTO

A estas alturas, disponemos del código fuente de Apache listo para ser compilado; le hemos aplicado el parche que le enseña a hacer uso de SSL y disponemos de estas librerías criptográficas a punto en su propio directorio. Sólo nos resta unirlo todo.

Para ello, procederemos a compilar nuestro servidor Apache. Es tan sencillo como desplazarnos al directorio donde instalamos los fuentes:

cd /usr/local/src/apache_1.3.12

y escribir los comandos habituales:

config
make
make install

Al final del proceso, tendremos nuestro flamante Apache-SSL prácticamente a punto.

AJUSTES FINALES

Necesitaremos ahora un certificado digital para nuestro servidor seguro, que garantice su legitimidad a quien se conecte a él.

Como ya dijimos al principio, lo construiremos nosotros mismos y nos servirá para nuestras pruebas, sin necesidad de pagar a una autoridad externa para que nos certifique un servidor que -recuerde- en principio sólo utilizaremos nosotros mismos.

Escriba:

cd /usr/local/ssl/bin

openssl req -new > new.cert.csr

Responda a las preguntas que se le plantean ahora. En primer lugar, se le pide una contraseña para proteger su clave. Decida una y confírmela. Ahora responda con las iniciales de su país, provincia, ciudad, organización, sección, nombre y e-mail. Resultarán dos nuevos ficheros: new.cert.csr y privkey.pem.

Escriba ahora:

openssl rsa -in privkey.pem -out new.cert.key

Vamos a firmar nuestro certificado con:

openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365

El nuevo fichero new.cert.cert contiene ahora su certificado de prueba.

Creemos un directorio para almacenar nuestros certificados:

mkdir /usr/local/httpsd/certs

Y traslademos allí nuestros flamantes certificados y clave:

cp /usr/local/ssl/bin/new.cert.key /usr/local/httpsd/certs

cp /usr/local/ssl/bin/new.cert.cert /usr/local/httpsd/certs

Para informar a Apache sobre esta localización de los certificados tendremos que modificar su fichero de configuración (/usr/local/httpsd/conf/httpsd.conf). Lo abriremos con un editor y añadiremos hacia el final del mismo las siguientes líneas:

SSLSessionCacheTimeout 300

SSLCACertificatePath /usr/local/httpsd/certs

SSLCertificateKeyFile /usr/local/httpsd/certs/new.cert.key

SSLCACertificateFile /usr/local/httpsd/certs/new.cert.cert

SSLCertificateFile /usr/local/httpsd/certs/new.cert.cert

Ahora Apache ya sabe dónde buscar.

VAMOS ACABANDO...

Casi todo está a punto, pero antes de arrancar nuestro flamante servidor seguro hay que resolver otra cuestión: ¿podemos usar un servidor web seguro y otro no seguro en la misma máquina? Por suerte, la respuesta es sí. Es posible correr dos demonios del servidor web, pero es mucho más sencillo definir un servidor virtual seguro y otro no seguro.

La forma de hacer esto es editar nuestro fichero de configuración del servidor (/usr/local/httpsd/conf/httpsd.conf). En su sección final (Sección 3) añadiremos unas cuantas líneas que definirán ambos hosts virtuales (seguro y no seguro). Existe un fichero de ejemplo en:http://www.apache-ssl.org/httpd.conf.example, que incluye también lo relativo a localización de certificados (párrafo anterior). Adapte este fichero a sus necesidades específicas.

De esta forma, cuando escribamos en nuestro navegador la dirección http://127.0.0.1 nuestro servidor deshabilitará el uso de SSL, mientras que cuando escribamos https://127.0.0.1 se tratará de una transferencia segura.

EN MARCHA

Para probar nuestro servidor web tendremos que arrancarlo mediante el comando:

/usr/local/httpsd/bin/httpsdctl start

Abra su navegador y teclee las direcciones comentadas en el párrafo anterior. Si todo va bien, se abrirá la página por defecto de Apache (que luego podrá sustituir por sus propios documentos). En caso de error, revise todos los puntos anteriores y (si eso no basta) acuda a las fuentes recomendadas al final de este artículo.

Para detener el servidor escriba:

killall httpsd

FUENTES DE INFORMACION RECOMENDADAS

Ha resultado de gran ayuda para la elaboración de este trabajo el artículo "Páginas web seguras y dinámicas con Apache", firmado por Felipe Corsino en el número de Marzo de la revista "PC World". Su lectura es muy recomendable para conocer más detalles sobre algunos de los pasos seguidos en nuestro artículo, especialmente para aquellos lectores que quieran aprovechar la ocasión para instalar a la vez soporte PHP para páginas web dinámicas. Lamentablemente, el artículo no parece estar disponible on-line en estos momentos, ni hemos recibido respuesta alguna a nuestra pregunta sobre su posible disponibilidad futura.