Ads 468x60px

martes, 5 de marzo de 2013

Configurar Apache Para Soporte SSL/TLS

Si tienes montado un servidor web Apache donde hay transferencia de informacion entre usuarios, como registros, contraseñas, etc, haz de saber que toda informacion traspasda por la red esta en texto plano, por lo que un intruso podria obtener este tipo de informacion sin darnos cuenta. La mejor manera de ocultar la informacion transferida entre una red es encriptar dicho datos, para esto vamos a crear certificados SSL y habilitar el puerto SSL en Apache.

openssl

Bien, para poder continuar con este proceso vas a necesitar:
* OpenSSL
* ModSSL

Sino lo tienes, puedes descargarlo con el gestor de paquetes de tu distribucion linux. En caso que uses Centos o algun derivado de RedHat, la forma mas simple de instalar el mod_ssl es:

yum -y install mod_ssl

Esto te creara el siguiente archivo:

 /etc/httpd/conf.d/ssl.conf

El cual no hay que toquetear ni editar.

Ahora, vas a realizar todo el procedimiento como el usuario root. Lo primero que debes hacer es crear el directorio donde vas a almacenar los certificados SSL. Por motivos de seguridad, solo root debe tener accesibilidad a dicho directorio:



mkdir -m 0700 /etc/sslx

Si tienes directorios virtuales en Apache, te sugiero que si vas a utilizar SSL en ellos tengas una direccion IP publica para cada directorio, ya que por politicas de SSL y TLS estos, no es posible utilizar los mismos certificados SSL en distintos directorios virtuales usando la misma IP.


Ahora, vas a crear un directorio para almacenar los certificados SSL para tu sitio web, y nuevamente aplicaremos la misma tematica de seguridad, solo root debe tener accesibilidad:


mkdir -m 0700 /etc/sslx/tudominio.com


Accede al directorio que acabas de crear:

cd  /etc/sslx/tudominio.com

Una vez alli, crearas otro directorio base que servira como el lugar de trabajo:

mkdir -m 0755 /CA
cd CA

GENERANDO CLAVE Y CERTIFICADO
Bien, ahora tenemos que copiar el archivo de configuracion por defecto que usa openssl, al nuevo directorio creado /CA. Busca en tu distribucion linux el archivo openssl.cnf, en mi distribucion basada en Debian lo encontre en /etc/ssl/openssl.cnf, por lo que procedi con el copiado:

# cp /etc/ssl/openssl.cnf /etc/sslx/tudominio.com/CA
# chmod 0600 /etc/sslx/tudominio.com/CA/openssl.cnf
 
Luego tienes que crear los archivos que van a funcionar como bases de datos para el openssl:
# touch /CA/index.txt
# echo '01' > /CA/serial
  
Ahora si, ya es hora de crear el certificado autofirmado, el cual sera utilizado para firmar pedidos de certificados.
# cd /CA
# openssl req -config openssl.cnf -new -x509 -extensions v3_ca -keyout ca.key -out certs

Este comando crea un certificado válido por 5 años, se debe ingresar una contraseña para la clave privada. Aunque si utilizas este certificado, cada vez que vayan a reiniciar el servidor web Apache, sera necesario la introduccion de la password del certificado, de lo contrario el servidor Apache no arrancara, puedes evitarte esto creando un certificado sin Triple DES, el cual te permita iniciar Apache de forma normal sin interaccion de passwords.

Asi que vamos al directorio:

cd /etc/sslx/tudominio.com
openssl rsa -in server.key -out server.pem
 
Opcionalmente, puedes generar un certificado CSR (Certificate Signing Request) el cual 
se envia a una autoridad de certificados validada como Verisign, GoDaddy,etc. Quienes tras
el correspondiente pago, te reenvian un certificado server.crt firmado por dicha autoridad.
 
Sino se desea poseer un certificado firmado por una autoridad reconocida, puedes perfectamente crear uno propio que sea autofirmado. El unico inconveniente o molestia que esto genera, es que cada vez que un usuario ingrese por navegador a tu website, saldra un mensaje de advertencia alegando que el certificado SSL no esta firmado, y el usuario debera agregar una excepcion en la configuracion del navegador para saltarse este aviso.

Continuando con el tema, para generar un certificado autofirmado, valido por 730 dias ejecuta el siguiente comando:

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

Recuerda que solo root debe poder acceder a los certificados:

chmod 400 /etc/sslx/tudominio.com/server.*
 
Ya finalizado todo lo anterior, posees tus llaves de certificados SSL disponible.

CONFIGURACION EN APACHE
Lo primero que vas a realizar es habilitar el puerto SSL dentro de la configuracion de Apache buscando el archivo de configuracion httpd.conf:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>
 
 Vas a descomentar en caso que este comentada, la linea que dice Listen 443. Luego dentro del mismo documento httpd.conf  busca las siguientes lineas, descomentalas en caso que esten comentadas y edita las rutas de ubicacion de los certificados SSL acorde a tu configuracion:

		SSLEngine on
		SSLCertificateFile /etc/sslx/tudominio.com/server.crt
		SSLCertificateKeyFile /etc/sslx/tudominio.com/server.pem


No hay comentarios:

Publicar un comentario