Instalar el servidor Apache2 en Debian no es una tarea complicada sin duda, pero el ir puliendo algunos detalles para tener un mejor performance, seguridad y estabilidad en general, a veces lo es.
Supongamos que deseamos agregar un nuevo sitio pero que la comunicación entre el cliente y el servidor sea cifrada mediante el uso de https. Para esto necesitamos activar el cifrado ssl en apache, lo hacemos mediante la utilidad a2enmod ejecutando:
# a2enmod ssl
También debemos decir a apache que debe aceptar solicitudes en el puerto 443 que es el puerto estándar de https por lo que editamos el archivo /etc/apache2/ports.conf y agregamos la línea Listen 443, he aquí la configuración que tiene mi Apache2:
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default # This is also true if you have upgraded from before 2.2.9-3 (i.e. from # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and # README.Debian.gz NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
Es importante aclarar que al menos tanto el módulo SSL como el puerto 443 ya se encontraban ‘activados’ cuando instalé Apache2.
Ahora necesitamos crear los certificados que utilizaremos para el cifrado, para ello utilizaremos OpenSSL, deberemos instalarlo ejecutando:
# aptitude install openssl
Por si no lo tenemos instalado, una vez que lo tengamos, se crean dos certificados, el público y el privado:
# openssl req -new -newkey rsa:2048 -nodes -out /etc/ssl/certs/publico.pem -keyout /etc/ssl/private/privado.pem Country Name (2 letter code) [AU]: MX State or Province Name (full name) [Some-State]: Chiapas Locality Name (eg, city) []: Tuxtla Gutierrez Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mi Organización Organizational Unit Name (eg, section) []: Posh Inc Common Name (eg, YOUR name) []: www.dominiocifrado.com Email Address []: [email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Los archivos generados serían:
La petición de nuevo certificado, que una autoridad certificadora (CA) tendrá que firmar, en /etc/ssl/certs/publico.pem.
La clave privada del certificado en /etc/ssl/private/privado.pem.
Podemos usar CAcert.org para firmar la petición de certificado. Debido a que CAcert.org tan sólo puede verificar la información contenida en el Common Name, da igual lo que introduzcamos en los otros campos (el resto lo descarta).
El certificado resultante después de la firma de CACert.org lo dejaremos en el archivo /etc/ssl/certs/publico.pem con permisos 644 para el usuario y grupo root. La clave privada ya se encuentra en /etc/ssl/private/privado.pem con permisos 640 para el usuario root, pero debemos cambiarle el grupo a ssl-cert:
chgrp ssl-cert /etc/ssl/private/privado.pem
Para utilizar los servicios de CACert.org debemos realizar los siguientes pasos:
- Darnos de alta en su web.
- Una vez validados en su sistema, dar de alta nuestro dominio dominiocifrado.com
- Una vez verificado nuestro dominio, procederemos a realizar la solicitud del certificado usando el contenido del fichero /etc/ssl/certs/publico.pem.
En el caso de que no querramos firmar el certificado por CACert.org, podemos hacerlo nosotros mismos:
openssl x509 -req -days 3650 -signkey privado.pem -out publico.pem
Nota: Es altamente recomendable hacerlo con CACert.org ya que es un ente reconocido y el servicio es gratuito. Si requieren algo más profesional, pueden checar con VeriSign.
Nota2: Cuando ya se encuentre firmado nuestro certificado nos llegará un correo electrónico indicándonos el contenido de la firma, el contenido de dicha firma debemos ponerla en lugar del contenido del archivo que se encuentra en /etc/ssl/certs/publico.pem
Ahora nada más queda tener nuestro archivo de configuración dentro de /etc/apache2/sites-available/dominiocifrado.conf
Aquí la configuración del archivo dominiocifrado.conf
<VirtualHost *:443> ServerAdmin [email protected] ServerName dominiocifrado.com ServerAlias www.dominiocifrado.com DocumentRoot /home/web/cifrada #Aquí indicamos que será un canal cifrado y los certificados que antes creamos, aquí los ubicamos SSLEngine on SSLCertificateFile "/etc/ssl/certs/publico.pem" SSLCertificateKeyFile "/etc/ssl/private/privado.pem" ErrorLog /var/log/apache2/dominiocifrado.eror.log CustomLog /var/log/apache2/dominiocifrado.access.log combined <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /home/web/cifrada> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
Después procederemos a reiniciar nuestro servidor Apache con el siguiente comando:
# /etc/init.d/apache2 restart
Y entrar a nuestro nuevo sitio web cifrado:
https://dominiocifrado.com
Veremos nuestro certificado más o menos como esto:
Eso es todo, espero a alguien pueda parecerle útil esta información
Fuentes:
Thank you it is a very good tutorial, it is the best I have found… It worked very good with debian 5 and apache2
Perdón puse que usé debian5 y era debian 6