22 ag. 2008

Apache + SSL

Aumentar la seguridad en nuestros servidores es una tarea a veces ardua, pero necesaria. En este pequeño manual encontraréis como configurar un servidor apache con certificados SSL.

Primero de todo será necesario instalar algunos paquetes, gracias a apt, no será necesario recompilar el programa:

# apt-get install apache2 libapache-mod-ssl

Una vez instalado el módulo lo podremos ver en /etc/apache2/mods-available, ahora necesitaremos habilitar el módulo, así que usaremos a2enmod, para deshabilitarlo usaríamos a2dismod. Una vez activado el módulo estará en /etc/apache2/mods-enabled.

# a2enmod ssl

Ahora tendremos que decirle al apache que escuche al puerto del https por defecto, el 443, y le diremos que use el módulo ssl:

# vi /etc/apache2/ports.conf
Listen 80


Listen 443


Tendremos que añadir estas líneas para que quede el fichero de esta forma, añado que si deseamos que nuestro apache escuche a mas puertos, tendremos que definirlo aquí.

A continuación tendremos que decirle al apache que cada vez que alguien entre por el puerto 443 use el certificado.
Copiaremos el fichero que está por defecto en sites-enabled a otro que se llamará por ejemplo ssl (el nombre da igual, ya que apache carga todos los ficheros que se encuentren en el directorio).

Haremos las siguientes modificaciones:

# cd /etc/apache2/sites-enabled/
# cp 000-Default ssl

# vi ssl
NameVirtualHost *:443


ServerAdmin webmaster@localhost
SSLEngine On

En esta primera parte tendremos que dejar el fichero así, le indicamos a apache que esta configuración se aplica a todos las conexiones que vengan del puerto 443 (podrías hacer distintas configuraciones y redirecciones usando otros puertos).
Además destaco la linea SSLEngine On, que le decimos que tiene que estar al tanto de usar las librerías del SSL.

Justo después del SSLEngine On, deberemos añadir un par de líneas mas:

SSLCertificateFile /etc/apache2/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/apache2/apache-ssl/apache.pem

DocumentRoot /var/www/

Las dos primeras lineas es dónde tenemos nuestros certificados (que ahora crearemos), y luego en DocumentRoot tenemos que definir cuál será el directorio raíz de las conexiones https.

Antes de seguir vamos a crear los certificados. Para generar los certificados es necesario un paquete llamado openssl, que en la gran mayoria de sistemas ya viene instalado por defecto.

# cd
# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....................++++++
.................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for server.key:

Ahora aquí tienes que introducir tu clave, que para cuestiones de seguridad se recomienda que sea mas larga de 8 caracteres y alfanumérica. Deberás escribir la frase dos veces. Se generará un fichero llamado server.key

Si deseásemos no usar encriptación para la clave podremos usar este otro comando, esta clave se usaría para crear un servidor con https, pero sin un certificado firmado.

# openssl rsa -in server.key -out server.key.insecure
en este caso se generaría un server.key.insecure

Ahora tendremos que crear un .csr, el certificado para firmar

# openssl req -new -key server.key -out server.csr

Se genera un server.csr
A continuación lo firmaremos

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Se genera un server.crt

Ahora para que podamos usar los certificados los copiaremos al directorio /etc/ssl

# cp server.crt /etc/ssl/certs
# cp server.key /etc/ssl/private


Y finalmente para que el apache pueda usar los certificados, le diremos que cargue de nuevo la configuración y que se reinicie.

# /etc/init.d/apache2 force-reload
# /etc/init.d/apache2 restart


Pues esto es todo, si hay algún problema, comentadlo y así irán saliendo distintas soluciones.

2 comentaris:

Nickman ha dit...

Muy buena informacion, muchas gracias, mañana lo probare en nuestra empresa. Saludos.

Blackhold ha dit...

en nuevas instalaciones que he ido haciendo simplemente en hacer un

# cd /etc/apache2/sites-enabled/
# ln -s ../sites-available/default-ssl ssl

el https ya funciona, luego ahí si queremos podemos apuntar a nuestro certificado modificando los valores del fichero que se encuentra en /etc/apache2/sintes-enabled/ssl

Publica un comentari a l'entrada