En este ejemplo usaremos apache como servidor web en un servidor de debian squeeze.
A la hora de activar la navegación segura en un virtualhost de apache necesitamos tener un certificado valido y firmado por una CA (Certificate Authority) para que nuestro navegador automaticamente lo reconozca y no de el error de suplantación de identidad que normalmente ofrece cuando estos no están firmados.
En este ejemplo vamos a usar los mismos certificados que trae apache por defecto para el montaje del sitio, en otra entrada hablaremos sobre como crear tu propia CA para autofirmar los certificados que necesites.
Lo primero es habilitar el modulo SSL de esta forma:
server# a2enmod ssl
De estar habilitado mostrara el mensaje "Module ssl already enabled" de lo contrario despues de habilitarlo tendremos que reiniciar el servicio.
server# /etc/init.d/apache2 restart
Ya tenemos el modulo habilitado y lo podemos probar habilitando el virtualhost por defecto que trae nuestro servidor apache de esta forma:
server# a2ensite default-ssl
Despues de esto volvemos a reiniciar el servidor para que cargue la configuración y ya podemos ver el sitio por defecto de forma segura.
Para un nuevo sitio solo necesitamos crear el virtualhost, para esto vamos a copiar el que trae por defecto de esta forma
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/misitio
y editamos la configuración interna con el editor que mas nos guste, yo particularmente uso "nano" para esto.
El contenido sera parecido o igual al siguiente:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
<Directory>
<Directory /var/www/>
AllowOverride None
Order allow,deny
allow from all
<Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
<Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Pero este virtualhost no tiene habilitado el SSL por defecto asi que al modificarlo para el funcionamiento del servidor quedaría de la siguiente forma:
ServerAdmin webmaster@misitio.com
ServerName misitio.com
DocumentRoot /var/www/misitio
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/misitio/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/misitio-access.log combined
</VirtualHost>
Lo habilitamos para que se muestre en el navegador de la siguiente forma:
server# a2ensite misitio
server# /etc/init.d/apache2 restart
Ya en este si tenemos habilitado el SSL para que se muestre de forma segura, el único inconveniente es que si un usuario no lo pide de la forma https://misitio.com le mostraría un error el navegador.
Si quisieramos redireccione automaticamente de http a https la configuración debería ser la siguiente.
Habilitamos el modulo para reescribir URL:
server# a2enmod rewrite
despues de esto reinciamos el servidor apache
server# /etc/init.d/apache2 restart
y modificamos la entrada de nuestro virtualhost para que quede de la siguiente forma:
<VirtualHost *:80>
ServerAdmin webmaster@misitio.com
ServerName misitio.com
DocumentRoot /var/www/misitio
#Reescribir URL
RewriteEngine on
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@misitio.com
ServerName misitio.com
DocumentRoot /var/www/misitio
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/misitio/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/misitio-access.log combined
</VirtualHost>
Ya con esto nuestro sitio siempre se verá de forma segura aunque los usuarios no lo pidan de esa forma, si tenemos mas de un sitio que use navegación segura en nuestro servidor debemos editar el fichero /etc/apache2/ports.conf para que quede de la siguiente forma:
NameVirtualHost *:80
NameVirtualHost *:443
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Después de este ultimo paso ya podemos usar nuestro sitio de forma segura. Espero les sirva y entiendan paso a paso todo.
Saludos,
No hay comentarios:
Publicar un comentario