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.
Muy buena informacion, muchas gracias, mañana lo probare en nuestra empresa. Saludos.
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