lunes, 12 de noviembre de 2012

Manejar el contenedor de Claves RSA

En mi entrada anterior he explicado brevemente qué es el Contenedor de claves RSA, en esta entrada veremos como trabajar con él.

Las operaciones que voy a explicar en esta entrada son:
  • Creación
  • Exportación
  • Importación
  • Conceder permisos
  • Denegar permisos
  • Eliminación del contenedor
Todas estas operaciones se realizarán desde el CMD del equipo en cuestión. Todas estas operaciones se realizan con el comando aspnet_regiis, este comando se encuentra en la carpeta Microsoft.NET dentro de la carpeta de Windows. Dentro de la carpeta Microsoft.NET hay que buscar la carpeta exacta, ya que cambia en función de si el equipo tiene una arquitectura de 32 o 64 bits. La ruta exacta suele ser C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727

Creación de un nuevo contenedor

Dentro de una única máquina se pueden tener diversos contenedores, cada vez que se cree uno se generará una clave nueva y a este nuevo contenedor se le pueden asignar permisos a diferentes usuarios o grupos.

La sintaxis para crear un nuevo contenedor es la siguiente:

aspnet_regiis -pc "appKeys" -exp

Dónde:
  • aspnet_regiis es el comando del CMD.
  • -pc es el parámetro que indica que se crea un nuevo contenedor.
  • "appKeys" es el nombre que se le ha dado al contenedor.
  • -exp es el parámetro que indica que el contenedor es exportable.

El parámetro -exp es especialmente importante para permitir utilizar este contenedor en despliegues en otras máquinas.

Exportación de un contenedor

Una vez creado un contenedor se puede exportar a un fichero xml. Este fichero se utilizará posteriormente para utilizar este mismo contenedor en una segunda máquina.

La sintaxis para exportar un contenedor es la siguiente:

aspnet_regiis -px "appKeys" "D:\ExportContainers\appKeys.xml" -pri


Dónde:
  • aspnet_regiis es el comando del CMD.
  • -px es el parámetro que indica que se exporta el contenedor.
  • "appKeys" es el nombre que se le ha dado al contenedor.
  • "D:\ExportContainers\appkeys.xml" es la ruta en la que se guardará el fichero de exportación.
  • -pri es el parámetro que indica que se deben incluir las claves privadas en el fichero de exportación. Sin esta información no se podrían hacer correctamente las importaciones en otras máquinas.

Importación de un contenedor

Una vez generado el xml de exportación del contenedor ya puedes importarlo en otras máquinas.
Para ello el primer paso es copiar el xml generado al disco de la máquina donde quieras importar el contenedor.

Una vez copiado has de utilizar el siguiente comando:

aspnet_regiis -pi "appKeys" "D:\ImportContainers\appKeys.xml"

Dónde:
  • aspnet_regiis es el comando del CMD.
  • -pi es el parámetro que indica que se importa un contenedor.
  • "appKeys" es el nombre que se le ha dado al contenedor.
  • "D:\ImportContainers\appkeys.xml" es la ruta en la que se encuentra el fichero a importar.

Conceder permisos sobre un contenedor

Una vez importado el contenedor, el siguiente paso es concederle los permisos adecuados. Estos permisos se deberán conceder al usuario de ejecución de la aplicación (por ejemplo el usuario configurado en IIS como usuario de aplicación) y a los usuarios que deban tener acceso al usuario, pro ejemplo los administradores de la aplicación que deben poder cambiar los valores de un fichero de configuración.

Estos permisos pueden concederse a un usuario concreto o a un grupo del Active Directory, para ambos casos la sintaxis es la misma.

aspnet_regiis -pa "appKeys" "domain\userName"

Dónde:
  • aspnet_regiis es el comando del CMD.
  • -pa indica que se le están concediendo permisos a un usuario o grupo.
  • "appKeys" es el nombre del contenedor sobre el que se están asignando permisos.
  • "domain\username" es el nombre del usuario o grupo (con el prefijo del dominio) al que se está concediendo acceso al contenedor.

Denegar permisos a un contenedor

De la misma forma que necesitamos conceder permisos a un usuario sobre un fichero, en un momento dado podemos necesitar denegarle esos permisos.

Para denegarle los permisos se usará esta sintaxis:

aspnet_regiis -pr "appKeys" "domain\userName"

Dónde:
  • aspnet_regiis es el comando del CMD.
  • -pr indica que se le están denegando permisos a un usuario o grupo.
  • "appKeys" es el nombre del contenedor sobre el que se están denegando permisos.
  • "domain\username" es el nombre del usuario o grupo (con el prefijo del dominio) al que se está denegando acceso al contenedor.

Eliminar un contenedor

En caso de querer eliminar un contenedor creado se debe utilizar la siguiente sintaxis:

aspnet_regiis -pz "appKeys"

Dónde:
  • aspnet_regiis es el comando del CMD.
  • -pz indica que se borra el contenedor indicado.
  • "appKeys" es el nombre del contenedor a borrar.

martes, 6 de noviembre de 2012

Contenedor de Claves RSA

Empecemos con qué es eso de RSA. RSA es un sistema criptográfico de clave única, apto tanto para cifrado de cadenas como para firmas digitales.

Este sistema de criptografía permite tanto el cifrado como el descifrado, por tanto es válido, por ejemplo, para el cifrado de fichero de configuración.

Como apunte, saber que existen otros cifrados de una sola dirección (one way) que no permiten descifrado. Es habitual utilizar estos algoritmos para cifrar contraseñas, ya que con comparar la contraseña  guardada ya cifrada con la cadena cifrada resultante de la introducción de la contraseña por parte del usuario es suficiente.

El sistema de cifrado RSA requiere de una clave privada a partir de la cual se generarán las cadenas cifradas y esta misma clave se usará para descifrar la cadena encriptada y recuperar el texto original. Sin conocer la clave privada no es posible descifrar los datos, por tanto, la seguridad de este algoritmo depende de la privacidad de la clave privada.

Windows crea asociado a cada usuario del Sistema Operativo un contenedor de claves para RSA. Este contenedor de claves simplemente es un repositorio protegido por usuario con un texto generado de manera automática por el sistema operativo al crear un nuevo almacén y que podrás utilizar desde tus aplicaciones como clave privada para los cifrados.

El problema inicial que tienen estos contenedores de claves es que están asociados al usuario y a la máquina en la que se generan, sin embargo, existe la posibilidad de exportarlos/importarlos y asignarles permisos a un usuario concreto. Utilizando estas funcionalidades puedes asignar un único contenedor al cifrado de archivos de aplicaciones distribuidas en diferentes máquinas y a los que tienen acceso diversos usuarios.

Además, tienen la ventaja de que puedes crear tantos contenedores como quieras, pudiendo dar permisos sobre un contenedor a un equipo y a otro equipo acceso a otro contenedor. De esta forma consigues determinar qué usuario o grupo de usuarios tienen acceso a unos ficheros concretos.