sábado, 9 de mayo de 2009

XAMPP: SSL Cifrar la transmisión de las contraseñas con https




Si no ha habilitado la encriptación en una carpeta protegida por contraseña, la contraseña se enviará en texto plano – esto quiere decir que puede ser visualizada usando cualquier sniffer de red.

Es una buena idea encriptar dichas contraseñas. Hay dos pasos en el proceso, primero necesitamos crear certificados SSL, y después debemos asegurarnos de que las páginas protegidas por contraseña, sólo son accesibles con encriptación.

También es una buena idea importar sus certificados en todos los navegadores de los equipos en los que planee usar el acceso a su servidor, de otro modo verá una advertencia avisándole de que el certificado no procede de ninguna Entidad emisora de certificados de confianza.

Crear el certificado SSL y la Clave privada del servidor.
Para habilitar el encriptado de nuestra contraseña debemos crear un certificado SSL (conteniendo tu clave pública -public key) y una clave privada del servidor -private key. XAMPP nos provee de una clave/certificado por defecto que podemos usar, pero es mejor crear una nueva ya que la clave por defecto se encuentra disponible para cualquiera que descargue XAMPP. Si alguien conoce su clave, puede desencriptar sus paquetes.

XAMPP contiene un fichero batch para la creación de nuevos certificados/claves con claves de encriptación aleatorias. Para ejecutar el fichero batch, haga lo siguiente:

1.- Abra una ventana de comandos (inicio->Ejecutar, teclee “cmd” y pulse OK)
2.- cd c:\xampp\apache
3.- makecert


Verá algo como esto:
C:\xampp\apache>newcert
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
............................++++++
.....................................++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:

Introduzca su “frase contraseña” -pass phrase- para desencriptar su clave privada y presione Enter. Escriba su contraseña y no la olvide. A continuación se le pedirá que la verifique:

Verifying - Enter PEM pass phrase:

Introduzca su contraseña por segunda vez y verá algo como ésto:

-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:

Introduzca las dos letras del código de su país (España ES). Se le pedirán algunos items más (mostrados a continuación) todo lo que tiene que hacer es teclear lo que crea más adecuado, pero pare cuando le pregunten “Common Name”:

State or Province Name (full name) [Some-State]:NY
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Rob's Great Company
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:

En cuanto al “Common Name”, debe introducir el nombre DNS o la dirección IP de su servidor web. El nombre que introduzca aquí debe coincidir con el nombre de servidor que introducirá en su navegador para acceder a la página. Es importante que este nombre común coincida con la dirección que va en su navegador, de otro modo recibirá advertencias extras cuando navegue a sus páginas web seguras. Si quiere publicar su servidor web en Internet empleando direcciones IP que cambian a veces – IP dinámicas-, puede usar un servicio de DNS Dinámicas como dyndns.org para obtener un nombre de dominio gratuito que siempre apuntará a su servidor. Tras introducir el “common Name” se le pedirá más información. Introduzca la información que crea más adecuada o simplemente pulse ENTER para aceptar los valores por defecto. Eventualmente se le pedirá que introduzca la frase clave para privkey.pem:

Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Enter pass phrase for privkey.pem:
Introduzca la frase que ha creado anteriormente y verá algo como ésto:
writing RSA key
Loading 'screen' into random state - done
Signature ok
subject=/C=xx/ST=xx/L=xxxx/O=xxx/CN=commonname
Getting Private key

—–
Das Zertifikat wurde erstellt.
The certificate was provided.

Press any key to continue . . .

C:\xampp\apache>



Ha finalizado la creación de su certificado SSL y de su clave privada. El script makecert.bat copiará las clave privada de servidor y certificados en los directorios adecuados.

Importar el certificado en el navegador para cada cliente.

Debido a que el certificado es auto firmado, y no está firmado por una Autoridad de Certificados (CA) bien conocida, cuando navegue a las páginas protegidas recibirá un mensaje de adevertencia. Para eliminar esta advertencia, debería importar el certificado como una CA de confianza en los navegadores que planee emplear para acceder a su servidor.

Importando el certificado en IE 7
Herramientas->Opciones de Internet
Pestaña contenidos->Botón certificados
Pestaña Autoridad de Certificados de confianza ->Botón Importar
Verá el asistente para Importar Certificados
Pulse siguiente
Seleccione el nombre de fichero: c:\xampp\apache\conf\ssl.crt\server.crt
Pulse Siguiente
Deje por defecto para situar todos los certificados en el almacén de Certificados: Autoridades Certificadoras de certificados de confianza y pulse Siguiente.
Pulse Finalizar.

Importando el certificado en Firefox 2:
Herramientas->Opciones
Avanzadas->Pestaña Cifrado->Botón Ver Certificados
Pestaña Autoridades->Botón Importar
Authorities Tab->Import Button
Seleccione el fichero: c:\xampp\apache\conf\ssl.crt\server.crt, y pulse “Abrir”
Pulse “Confiar en esta CA para identificar sitios web”
Pulse OK
Pulse OK en Administrador de Certificados
Pulse OK en la ventana Opciones original para regresar a Firefox.

Editar la configuración de Apache para permitir acceder sólo con encriptación a las carpetas protegidas por contraseña.

Ahora configuramos Apache para acceder a las carpetas protegidas por contraseña únicamente mediante encriptación SSL. Esto se hace en dos pasos. En primer lugar configuramos los ficcheros de configuración de Apache para esas carpetas para que sólo se pueda acceder a ellas con encriptación SSL. Después redirigimos cualquier tráfico “http” a esas páginas a “https” (esto es opcional).

Hacer las carpetas accesibles sólo con encriptacióon SSL

Primero, necesitamos informar a Apache de que las carpetas que quiere encriptar deberían usar siempre encriptación (y nunca ir en texto plano). Esto se consigue poniendo una directiva SSLRequireSSL dentro de cada deseado <Directory> listado en el fichero de configuración (lo usual es ponerlo al final, justo antes de la etiqueta de finalizicón </Directory>. El texto rojo, a continuación le muestra cómo hacerlo.

Alias /web_folder_name “C:/xampp/foldername”

<Directory “C:/xampp/foldername“>





SSLRequireSSL

</Directory>

Le sugiero hacerlo para las siguientes carpetas (si todavía las tiene):

Fichero de configuración c:\xampp\apache\conf\extra\httpd-xampp.conf
c:\xampp\phpmyadmin

c:\xampp\htdocs\xampp

c:\xampp\webalizer

c:\xampp\security\htdocs
Config File: c:\xampp\webdav

c:\xampp\webdav

Redireccionar “http” a “https” para ciertas carpetas

El siguiente paso opcional es redirigir las solicitudes “http” a solicitudes “https” para las páginas que queremos asegurar. Esto es mucho mas amigable para el usuario y le permite continuar empleando http cuando teclee la dirección (y automáticamente cambiar a https:// y encriptación). S no hace esto, y usa SSLRequireSSL, sólo podrá acceder a estas páginas tecleando https://. Esto está bien y es probablemente un poco más seguro, pero no es tan amigable para el usuario. Para conseguir la redirección, usaremmos el mod_rewrite para que no tenga que utilizar el nombre del servidor en esta parte del archivo de configuración. Esto ayuda a mantener pocos lugares en los archivos de configuración dónde sea necesario escribir el nombre del servidor (haciendo que sea más fácil de mantener los ficheros de configuración).

Primero, necesitamos asegurarnos de que está habilitado el modo mod_rewrite. Para hacerlo, edita c:\xampp\apache\conf\httpd.conf y elimine el carácter de comentario (# carácter) en esta línea:

#LoadModule rewrite_module modules/mod_rewrite.so

para hacer que se muestre tal y como se ve a continuación:

LoadModule rewrite_module modules/mod_rewrite.so

Ahora, pegue el siguiente texto en el comienzo del fichero c:\xampp\apache\conf\extra\httpd-xampp.conf:


<IfModule mod_rewrite.c>

    RewriteEngine On



    # Redirect /xampp folder to https

    RewriteCond %{HTTPS} !=on

    RewriteCond %{REQUEST_URI} xampp

    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]



    # Redirect /phpMyAdmin folder to https

    RewriteCond %{HTTPS} !=on

    RewriteCond %{REQUEST_URI} phpmyadmin

    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]



    # Redirect /security folder to https

    RewriteCond %{HTTPS} !=on

    RewriteCond %{REQUEST_URI} security

    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]



    # Redirect /webalizer folder to https

    RewriteCond %{HTTPS} !=on

    RewriteCond %{REQUEST_URI} webalizer

    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]

</IfModule>



Si tiene otras carpetas que quiera redireccioinar a https://, añada el siguiente texto a continuación (pero substituya el nombre de su carpeta):

# Redirect /folder_name folder to https

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} folder_name
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]


Si va a albergar un servidor webdav, es probablemente mejor no tener esta redireccción y simplemente requerir https://. De este modo, la gente sólo puede usar https:// cuando direccione su carpeta webdav. He intentado usar redirección para servidores webdav tanto en XP como en MAC OS X y no funcionó cuando se require encriptación.
Algo que debe tener presente con la redirección es que si tiene hosts virtuales, necesita poner el código de recirección ( con el RewriteCon y el RewriteRule) dentro de cada declaración de host virtual, de otro modo la redirección no funcionará.

Enlaces:
Este texto es una traducción del artículo http://robsnotebook.com/xampp-ssl-encrypt-passwords de Rob July 15th, 2007

3 comentarios:

Fenrir dijo...

Gracias por esta informacion, me va a ser muy util, apenas voy empezado con xampp y descubriendo sus cualidades

Anónimo dijo...

excelente explicacion; pero voy a intentarlo en linux espero sea algo parecido :)

Anónimo dijo...

Muy objetiva la explicacion la pondre en practica...Gracias por el aporte.