Está en la página 1de 10

Cmo puedo configurar parcialmente el sitio con SSL? [Parte I] Visin General Las instalaciones estandar de Joomla!

, anteriores a la versin 1.0.13, no soportan del todo bien las conexiones SSL por carpetas individuales, como por ejemplo pueda pasar con la carpeta administrator. Es decir, o tenemos todo el sitio funcionando con SSL, o, tenemos que toquetear por aqu y por all partes del cdigo y recurrir a otros trucos, para lograr sitios parcialmente configurados con conexin segura (navegacin https) A partir de la versin 1.0.13, el asunto ha mejorado bastante y sin tener que modificar archivos de Joomla!, se pueden lograr resultados ms que aceptables. Con la versin de Joomla! 1.5, de la cual no disponemos an de versin estable, la integracin total o parcial con HTTPS, an es mucho ms pausible. Si bien ha de haber muchos modos de abarcar y cubrir este tema, partiremos de la permisa que uno tiene un mismo dominio configurado tanto para funcionar con HTTP como con HTTPS (atendiendo a un mismo espacio web por distintos puertos, como puedan ser el 80 y el 443 respectivamente), y, lo que desde aqu va a aplicarse sobre la carpeta administrator, luego, tras adaptarlo, ha de poder aplicarse sobre otras carpetas en particular. Una vez tenemos acceso https por toda la web, vamos a poder automatizar (o no, si lo forzamos), el cambio de http a https o viceversa segn nos interese. As mismo, vamos a revisar como precisar, redirigir y automatizar el acceso https por el sitio, por ejemplo, para habilitar automticamente https para registrarse o enviar un correo, y, habilitar automticamente http para leer artculos, FAQs, etc. A partir de estas bases, sobre una configuracin simple pero efectiva, se podrn inferir otras combinaciones. Requisitos Joomla! 1.0.13 o posterior Tener tambien habilitado todo el espacio web dedicado a HTTP de Joomla!, para poder funcionar con SSL y disponer de un certificado. Poder usar archivos .htaccess junto con el mod_rewrite. (tambin podra llevarse a cabo desde el archivo de configuracin principal/virtual de Apache) Restricciones Las conexiones seguras, no protegen contra las intrusiones no deseadas, en todo caso y tras aceptarse el certificado, "encriptaran un ataque". Lo que s que hacen es garantizar con mayor seguridad que, la informacin, viajar del cliente al servidor o viveversa de manera cifrada, con lo cual, obtener nuestra informacin por "interceptacin del paquete", se puede tornar muy complicado. Observaciones Las pruebas, se han realizado sobre Apache/2.0.55 (apache2handler), PHP/5.1.2, mod_ssl/2.0.55, OpenSSL/0.9.8.a. Sobre todo, cuando se trate de Apache 1, las instrucciones a introducir y modo de configurarlo todo, podran variar (en esos casos, se debera averigurar cuales son las intrucciones a usar para las distintas

ocasiones que pudieran surgir, tanto para otras condiciones de Apache1 como de Apache 2 y su compilacin) Si ya haba un archivo .htaccess en alguna ruta donde quieras implementar SSL, no olvides el hacerte una copia de seguridad de ese archivo antes de editarlo (por seguridad, no dejes copias de archivos dentro del espacio web. Mueve las copias de los archivos fuera de tu espacio web y proteje este tipo de archivos contra el acceso)

Sugerencias Dentro de la carpeta administrator, creamos o editamos un archivo .htaccess y colocamos las siguientes lneas de cdigo en su interior: Cita: # Activamos el modulo rewrite. Si esto ya esta activado en un mismo archivo .htaccess, debes dejar solo una linea (la ubicada mas arriba en el archivo) y borrar la otra, o te pude provocar errores internos del servidor por intentar activar lo mismo por dos veces RewriteEngine on # Si no es un acceso por el puerto 443.. RewriteCond %{SERVER_PORT} !443$ # ...automaticamente, cambiamos de http a https esa misma URL ejecutando la linea de mas abajo. Si ya era una URL https, no se ejecuta la linea de mas abajo. RewriteRule ^(.*)$ https://www.tudominio.com/administrator/$1 [L,R] Si el puerto para atender SSL es otro distinto al 443, se deber sustituir donde corresponda, y el nombre de dominio "www.tudominio.com" tambin. Dentro del directorio raz (donde el archivo configuration.php de Joomla!), procedemos tambin a crear o editar un archivo .htaccess, para introducirle estas lneas: Cita: # Activamos el modulo rewrite. Si esto ya esta activado en un mismo archivo .htaccess, debes dejar solo una linea (la ubicada mas arriba en el archivo) y borrar la otra, o te pude provocar errores internos del servidor por intentar activar lo mismo por dos veces RewriteEngine on # Si no es un acceso por el puerto 80.. RewriteCond %{SERVER_PORT} !80$ # ...automaticamente, cambiamos de https a http esa misma URL ejecutando la linea de mas abajo. Si ya era una URL http, no se ejecuta la linea de mas abajo. RewriteRule ^(.*)$ http://www.tudominio.com/$1 [L,R] Si el puerto para atender HTTP es otro distinto al 80, se deber sustituir donde corresponda, y el nombre de dominio "www.tudominio.com" tambin. De este modo, cada vez que entremos en la carpeta administrator sin SSL, automticamente, se reescribira la URL con "https" (aunque lo modifiquemos manualmente desde el navegador). Y lo mismo suceder cuando salgamos de la administracin de joomla, o bien al pulsar "logout" que se nos reescribir la URL a la

pgina de inicio con "http", o bien cuando, manualmente, modifiquemos la URL desde la administracin a una ubicacin que est fuera de la misma. Es decir, como tanto podemos acceder a la web por via HTTP como HTTPS, porque no estamos "forzando SSL" propiamente dicho, lo que hacemos desde cada uno de estos archivos .htaccess es controlar que el tipo de conexin se establezca de un modo o del otro, en unas u otras partes del sitio. Bueno, llegados hasta aqu y como se ha comentado anteriormente, la conexin SSL no frusta los intentos de intrusin a la web. En lugar de automatizar el acceso a la carpeta administrator, tal vez, convendra ms "forzar SSL sin redireccionamiento automtico" para que, aquellos que intenten acceder a la web con conexin HTTP, reciban siempre un "forbidden" (que no redireccin automtica con conexin SSL) Para "forzar SSL", es decir, que solo se pueda acceder a ese espacio web con "https", bastar con aadir a las lneas que ya tenamos en el ".htaccess de la administracin" un SSLRequireSSL, tras lo cual, el archivo quedara de este modo: Cita: SSLRequireSSL RewriteEngine on RewriteCond %{SERVER_PORT} !443$ RewriteRule ^(.*)$ https://www.tudominio.com/administrator/$1 [L,R]

Vale, todo lo anterior, est muy bien.. tenemos acceso http a todo el sitio y https a toda la administracin (incluso podemos "automatizar" los cambios de http a https, o forzarlo); pero: Y si queremos, en el sitio, acceder a segn que partes por medio de http y a segn que otras con https? "No problemo", as como lo tenemos (sin forzar el sitio a SSL y atendiendo a la web por puertos distintos e independientes), solo ser cuestin de precisar y redirigir a las cosas que quedarn con http o con https. Lo "no precisado y no redirigido" sera accesible de ambos modos, porque no tenemos el sitio "forzado"(el que solo la administracin est forzada a SSL, no interfiere con el sitio, el cual, queda "mixto por defecto"). Para ello, nuestros archivos .htaccess de la administracin y del sitio, van a necesitar incrementarse o modificarse en algunas lneas. En el .htaccess de la administracin (a ubicar dentro de la carpeta administrator) agregamos a lo que ya tenamos lo destacado en verde: Cita: # Opcional. Si no queremos forzar la conexin SSL en la administracion, la linea de mas abajo, se tiene que comentar o borrar. SSLRequireSSL # Activamos el modulo rewrite. Si esto ya esta activado en un mismo archivo .htaccess,

debes dejar solo una linea (la ubicada mas arriba en el archivo) y borrar la otra, o te pude provocar errores internos del servidor por intentar activar lo mismo por dos veces RewriteEngine on # Si no es un acceso por el puerto 443.. RewriteCond %{SERVER_PORT} !443$ # ...automaticamente, cambiamos de http a https esa misma URL ejecutando la linea de mas abajo. Si ya era una URL https, no se ejecuta la linea de mas abajo. RewriteRule ^(.*)$ https://www.tudominio.com/administrator/$1 [L,R] # Si no es un acceso por el puerto 80.. RewriteCond %{SERVER_PORT} !80$ # ...cuando la URL contenga a la cadena option=logout.. RewriteCond %{QUERY_STRING} (option=logout)+ # ...automaticamente, cambiamos de https a http y salimos de la administracion. Si la URL, no contiene a la cadena option=logout, o, el puerto por el que atendiamos ya era el 80 la linea de abajo, no se ejecuta. RewriteRule ^(.*)$ http://www.tusitio.com/$1 [L,R] (acurdate de adaptar a tus circunstancias lo destacado en rojo!!) En el .htaccess del sitio (a ubicar dentro de la carpeta raz). En este caso y para liarla lo menos posible, vamos a quitar lo que anteriormente pusimos y lo reescribimos todo de nuevo. Quitamos en el .htaccess del sitio Cita: # Activamos el modulo rewrite. Si esto ya esta activado en un mismo archivo .htaccess, debes dejar solo una linea (la ubicada mas arriba en el archivo) y borrar la otra, o te pude provocar errores internos del servidor por intentar activar lo mismo por dos veces RewriteEngine on # Si no es un acceso por el puerto 80.. RewriteCond %{SERVER_PORT} !80$ # ...automaticamente, cambiamos de https a http esa misma URL ejecutando la linea de mas abajo. Si ya era una URL http, no se ejecuta la linea de mas abajo. RewriteRule ^(.*)$ http://www.tudominio.com/$1 [L,R] Agregamos en el .htaccess del sitio Cita: #Bloque para redirigir URLs del sitio a HTTPS # Activamos el modulo rewrite. Si esto ya esta activado en un mismo archivo .htaccess, debes dejar solo una linea (la ubicada mas arriba en el archivo) y borrar la otra, o te pude provocar errores internos del servidor por intentar activar lo mismo por dos veces RewriteEngine on # Si no es un acceso por el puerto 443

RewriteCond %{SERVER_PORT} !443$ ...cuando la URL contenga a la cadena option=com_contact, o, option=com_user, o, option=com_login, o, option=com_registration.. RewriteCond %{QUERY_STRING} (option=com_contact)+ [OR] RewriteCond %{QUERY_STRING} (option=com_user)+ [OR] RewriteCond %{QUERY_STRING} (option=com_login)+ [OR] RewriteCond %{QUERY_STRING} (option=com_registration)+ ...automaticamente, cambiamos de http a https a esa misma URL Si la URL, no contiene a ninguna de las cadenas de mas arriba, o, el puerto por el que atendiamos ya era el 443, la linea de abajo, no se ejecuta. RewriteRule ^(.*)$ https://www.tudominio.com/$1 [L,R] #Bloque para redirigir URLs del sitio a HTTP # Si no es un acceso por el puerto 80 RewriteCond %{SERVER_PORT} !80$ ...cuando la URL contenga a la cadena option=com_content, o, option=com_weblink, o, option=com_wrapper, o, option=com_newsfeeds, o, option=com_search, o, option=com_frontpage.. RewriteCond %{QUERY_STRING} (option=com_content)+ [OR] RewriteCond %{QUERY_STRING} (option=com_weblink)+ [OR] RewriteCond %{QUERY_STRING} (option=com_wrapper)+ [OR] RewriteCond %{QUERY_STRING} (option=com_newsfeeds)+ [OR] RewriteCond %{QUERY_STRING} (option=com_search)+ [OR] RewriteCond %{QUERY_STRING} (option=com_frontpage)+ ...automaticamente, cambiamos de https a http a esa misma URL Si la URL, no contiene a ninguna de las cadenas de mas arriba, o, el puerto por el que atendiamos ya era el 80, la linea de abajo, no se ejecuta. RewriteRule ^(.*)$ http://www.tudominio.com/$1 [L,R] Puedo redirigir ms URLs de http a https o viceversa? S, se puede. Lo que no se deben usar son "trminos comunes", porque se generaran incoherencias que desenvocaran en "error interno del servidor" Por ejemplo, la cadena "/index.php", es un trmino comn que aparece tanto en las URLs que te redirigen al "com_frontpage" como "com_login". Por lo tanto, ubicar en uno u otro bloque de redireccin de URLs a http o a https un: Cita: RewriteCond %{QUERY_STRING} (/index.php)+ [OR] Provocara un "internal server error", por no poder atender a esa solicitud (la tendria que reescribir al mismo tiempo como "http" y como "https", lo cual, no es posible) Ahora bien, si se dan otros trminos no comunes a las URL "http<->https", se pueden agregar, en su correspondiente bloque, tantas como vayamos a necesitar. Si, por ejemplo, tenemos el componente de terceros llamado por medio de la URL como

"com_micomponente", se puede agregar al bloque para redirigir URLs correspondiente (siguiendo el patrn, al inicio de las sentencias "QUERY_STRING") un: Cita: RewriteCond %{QUERY_STRING} (option=com_micomponent)+ [OR] Lograramos un mismo objetivo. Tambin puedes mover "QUERY_STRINGs" de un bloque al otro, tal vez, no te interese que, para enviar un correo, se tenga que establecer conexin SSL.. bien, mueve la lnea del "com_contact" al otro bloque y listos. Las opciones que ofrece SSL y la reescritura de URLs son bastante ms amplias. El tema se ha tratado de un modo bsico. Lo vemos funcionado con un video? ADICIONALMENTE Puedes proteger tu carpeta administrator( o cualquier otra) por contrasea. Siendo que el control de acceso + cifrado SSL nos ofrecera, en la administracin, doble proteccin por contrasea + SSL.. se aplicara un buen incremento a la seguridad de tu sitio. Un ejemplo de proteccin por contrasea + SSL, a complementar al .htaccess que tenemos en la administracin, sera: Cita: SSLRequireSSL AuthUserFile /home/usuario/privado/.htpasswd AuthGroupFile /dev/null AuthType Basic AuthName "Privado" Require valid-user RewriteEngine on RewriteCond %{SERVER_PORT} !443$ RewriteRule ^(.*)$ https://www.tudominio.com/administrator/$1 [L,R] RewriteCond %{SERVER_PORT} !80$ RewriteCond %{QUERY_STRING} (option=logout)+ RewriteRule ^(.*)$ http://www.tusitio.com/$1 [L,R]

Cmo puedo proteger directorios por contrasea usando .htaccess? Visin General La seguridad del servidor, es un tema bastante amplio. Si bien esta informacin surge a modo de referencia para intentar cubrir con una parte, cada cual, debe buscar la

combinacin de posibilidades que mejor se adapte a sus necesidades. Si no estais familiarizados con este tipo de configuraciones, es muy recomendasble leer esta informacin y mirar el tema de encriptacin (o cualquiera que os pueda ayudar a salir de una duda) Tngase en cuenta que, la "Autentificacin Bsica" solo sirve para proteger contra el acceso; pero, al no cifrarse los datos, una vez se ha accedido, stos, no quedan protegidos debido a que circulan por internet sin cifrar. An as, a la autentificacin bsica, se la puede considerar como a un gran bloqueador de intentos de intrusin no deseados por parte de ataques automatizados que no contemplan el toparse de por medio con este tipo de proteccin. Lo suyo, es disponer de autentificacin y control de acceso + encriptacin de la informacin que navega por internet, en cuyo caso, se le podr dar un sentido ms riguroso al concepto de seguridad por esta via. Como podemos encontrar a Apache configurado de varios modos (o configurarlo nosotros si somos propietarios), vamos a revisar dos mtodos: Mtodo Basic: Cuando introducimos un nombre de usuario y contrasea en la pgina de acceso, esa informacin viaja hacia el servidor sin cifrar. En ese trayecto, la informacin que viaja sin cifrar puede ser capturada por terceros con intenciones maliciosas. Mtodo Digest: El usuario y la contrasea se envian cifrados desde el cliente hasta el servidor. Cuando protegemos una carpeta por contrasea, salvo que se indique lo contrario, todas sus subcarpetas quedan tambin protegidas. Requisitos Debemos contar con los siguientes mdulos cargados en el servidor: mod_auth.c para la autentificacin bsica, mod_auth_digest.c para la autentificacin encriptada de usuarios y contraseas, mod_ssl.c para poder activar SSL (navegacin con https://) Tienes que poder usar archivos .htaccess. Ante la duda, contacta o revisa las FAQs de tu hospedaje. Necesitars, si quiers acceder con conexin segura a las carpetas restringidas, de un certificado o estar habilitado por quien te sirve el hospedaje para poder establecer conexiones cifradas o navegacin "https" Restricciones Cuando se trate de utilizar el mtodo Digest se debe tener en cuenta que, algunas versiones antiguas de los navegadores, no lo van a soportar. Obviamente, cuando por nuestras circunstancias de hospedaje o de interaccin con las configuraciones, nos veamos privados de habilitar este mtodo de

proteccin, deberemos quitarnos de la cabeza el intentarlo, o, buscar un servicio de hospedaje que nos permita llevarlo a buen trmino. Observaciones Siempre ser mejor poder configurar este tipo de cosas directamente desde el archivo configuracin principal de Apache y por medio de la directiva Directory que, a travs de archivos .htaccess, porque se puede obtener un mejor rendimiento web y una mayor proteccin contra el acceso a su configuracin. Directivas a combinar Dominio y tipo de autentificacin AuthName: Sirve para indicar el nombre del dominio de autentificacin y tambin se corresponde con el texto que se muestra cuando se nos solicita introducir un nombre de usuario y contrasea vlidos. Por ejemplo, AuthName "carpeta_restringida", o, AuthName "privado". Este nombre asignado(carpeta_restringida, privado, etc), cuando creamos el archivo de usuarios/contraseas para funcionar con el mtodo Digest, deber coincidir exactamente con el del parmetro requerido a la hora de aadir usuarios con la aplicacin htdigest o htpasswd. Un ejemplo de uso para su creacin: htdigest -c /ruta_al_archivo/nombre_del_archivo_de_claves valor_de_AuthName nombre_de_usuario Cuando se trate del mtodo Basic, este nombre asignado, podr ser cualquiera que os parezca orientativo.. porque al aadir usuarios, con la aplicacin htpasswd y el mtodo Basic, no es necesario introducir un parmetro coincidente con el valor de "AuthName". Por ejemplo: htpasswd -c /ruta_al_archivo/nombre_del_archivo_de_claves nombre_de_usuario (En ambos casos, la opcion "-c" solo se debe usar la primera vez, luego, para aadir mas usuarios, se tiene que omitir o se sobreescribiran a los existentes) AuthType: Sirve para indicar el tipo de autentificacin (Basic, Digest). Por ejemplo, AuthType Basic, o, AuthType Digest Control de individuos AuthUserFile: Sirve para indicar donde se encuentra el archivo con los usuarios y las claves que tienen privilegio de acceso (/ruta/hacia/el/archivo/el_fichero). Require: Sirve para indicar que usuarios tienen acceso y hay varias posibilidades de combinarlo: valid-user cualquier usuario que est en el archivo de claves. user De los usuarios que pueda haber en el archivo de claves, solo pueden acceder los usuarios que, separados por espacios, esten declarados explcitamente desde la directiva user, como por ejemplo, Require user pepepotamo espinete

joomlafiera (que permitira solo acceder a estos tres usuarios, por muchos que haya de autorizados en el archivo de claves.) Control de grupos Si queremos trabajar con grupos, necesitamos de la directiva AuthGroupFile. AuthGroupFile sirve para indicar donde se encuentra el archivo con la definicin de los grupos.(/ruta/hacia/el/archivo/el_fichero) Ahora, la directiva Require, podra usarse tambin para autorizar por grupos; es decir, si los usuarios pepepotamo, espinete y joomlafiera pertenecieran al grupo administradores, Require group administradores , autorizara el acceso a todos los usuarios pertenecientes al grupo administradores. Si, aparte del grupo "administradores", tuviramos al grupo "autores" con otros tantos usuarios definidos en su interior.. Require group administradores autores (distintos grupos separados por espacios), tras validarse correctamente, se permitira el acceso a todos los usuarios dentro del grupo "administradores" y a todos los usuarios dentro del grupo "autores". Si no queremos trabajar con grupos, podemos indicarlo explcitamente desde el archivo .htaccess con la siguiente lnea: Cdigo:
AuthGroupFile /dev/null

Sugerencias Decide donde poner el archivo .htaccess dentro de tu espacio web. Recuerda que la proteccin actuar recursivamente. Si ya hay un archivo .htaccess en la ubicacin elegida, recuerda el hacerte una copia de seguridad de ese archivo antes de modificarlo. Tras crearlos, decide donde vas a poner tus archivos .htpasswd y/o .htgroups. Recuerda, esos archivos NUNCA deben estar ubicados dentro del espacio web. Debes ubicarlos por encima de tu espacio web. En un lugar al que tengas acceso. Por ejemplo, si tu espacio web, empieza en la carpeta "public_html", en ruta: Cdigo:
/home/usuario/public_html/

Ubica esos archivos, por encima de "public_html" (si fuera necesario, creando un nuevo directorio llamado "privado" o como prefieras llamarlo) en la ruta:

/home/usuario/privado/.htpasswd Si quieres autorizar grupos: /home/usuario/privado/.htgroups Agrega el siguiente cdigo al archivo .htaccess file. Recuerda, debes ajustar las rutas u otros datos del ejemplo destacados en rojo a las que se correspondan con las de tu servidor/configuracin. Cita: AuthUserFile /home/usuario/privado/.htpasswd AuthGroupFile /dev/null AuthType Basic AuthName "Privado" require valid-user Con esta combinacin: Usamos la autentificacin bsica, permitiendo el acceso a cualquier usuario agregado dentro del archivo de claves ".htpasswd" y no usamos los grupos. Si queremos forzar la conexin SSL, en el mismo archivo .htaccess, se pueden agregar estas lneas: Cita: RewriteEngine on RewriteCond %{SERVER_PORT} !443$ RewriteRule ^(.*)$ https://www.ejemplo.com/$1 [L,R] (el puerto 443 es el que se usa normalmente para el servicio SSL, si usas el 444, u otro distinto, debers sustituirlo donde se remarca en rojo. La URL de tu dominio, tambin) Es muy importante que borres cualquier archivo de respaldo del archivo .htaccess de dentro del espacio pblico.

También podría gustarte