Compartir a través de


Configuración de editores de confianza de ClickOnce

 

Brian Noyes
Microsoft MVP

Abril de 2005

Se aplica a:
   Visual Studio 2005

Resumen: La seguridad clickOnce le permite aprovechar las protecciones de seguridad en tiempo de ejecución proporcionadas por la seguridad de acceso al código, a la vez que permite una determinación dinámica de permisos para una aplicación determinada en el momento en que la aplicación se implementa a través de ClickOnce. (11 páginas impresas)

Contenido

Editores de confianza y firma de aplicaciones ClickOnce 101
Comprobaciones de seguridad clickOnce en el inicio
Entrar en la zona
Editores de confianza clickOnce en acción
Automatización del proceso
Conclusión
Acerca del autor

La seguridad clickOnce permite la elevación automática de privilegios para una aplicación implementada por ClickOnce en función de los editores de confianza o de solicitud de usuario. Al implementar una aplicación con ClickOnce, las operaciones que realiza la aplicación o los recursos a los que intenta acceder pueden requerir permisos de seguridad de acceso de código (CAS) mayores que lo que se concedería en función de la directiva actual. Si ese es el caso, de forma predeterminada, el entorno de ejecución de .NET Framework en el equipo cliente le pedirá al usuario y le preguntará si desea instalar la aplicación y concederle confianza elevada.

En un entorno empresarial donde los administradores poseen el control de configuración y escritorio sobre cada escritorio, generalmente es preferible evitar tener que pedir al usuario decisiones de confianza. La mayoría de los usuarios no tienen la sofisticación para comprender las implicaciones de sus decisiones de confianza y no saben cuándo deben o no conceder permisos de aplicación. ClickOnce le proporciona control sobre este problema al permitir que las aplicaciones ClickOnce elevan automáticamente sus propios privilegios sin que el usuario solicite, si los manifiestos de aplicación han sido firmados por un editor de confianza.

Editores de confianza y firma de aplicaciones ClickOnce 101

¿Qué constituye un editor de confianza? En primer lugar, siempre debe firmar los manifiestos de aplicación e implementación de ClickOnce con un certificado de publicador. A continuación, el certificado usado para firmar una aplicación ClickOnce debe configurarse en el almacén de certificados editores de confianza en el equipo del usuario. Y, por último, la entidad de certificación que emitió el certificado debe configurarse en el almacén de certificados de la entidad de certificación raíz de confianza en el equipo del usuario. Despejaré las capas de cada una de estas tres piezas a su vez.

Al crear por primera vez una aplicación de Windows Forms en Visual Studio 2005 y publicarla con ClickOnce, Visual Studio generará automáticamente un certificado de publicador y lo usará para firmar la aplicación cuando se publique. Cuando lo hace, genera un archivo de certificado personal (archivo .pfx) y lo agrega al proyecto de Visual Studio con una convención de nomenclatura de archivos predeterminada de <ProjectName>_TemporaryKey.pfx. Visual Studio también agregará este certificado al almacén de certificados personal y habilitará la configuración del proyecto que establece este certificado como el que se usará para firmar manifiestos de aplicación ClickOnce. Dado que todo esto sucede automáticamente, es posible que ni siquiera sea consciente de que se está produciendo.

Nota Beta 1 le permitió asignar un nombre seguro a los manifiestos mediante un archivo de clave de nombre seguro (archivo .snk por convención). Beta 2 y RTM ya no admiten esto, y debe firmar los manifiestos con un certificado de publicador, normalmente un archivo .pfx que puede o no estar protegido con contraseña.

El proceso de firma usa las claves públicas y privadas del certificado para aplicar una firma digital XML a los archivos de manifiesto XML de implementación y aplicación generados para una aplicación ClickOnce. Este enfoque de firma digital garantiza que sepa quién firmó una implementación de aplicación ClickOnce determinada basada en la clave pública que se incrusta en el archivo de manifiesto y que el archivo no se ha alterado o que su contenido ha cambiado de ninguna manera desde que se firmó. Esto evita que una entidad malintencionada agregue archivos o configuraciones no deseadas a una aplicación ClickOnce después de publicarla una autoridad de confianza.

Los certificados de publicador vienen en dos tipos, autogenerados o comprobados por terceros (por ejemplo, verisign). Un certificado lo emite una entidad de certificación, que tiene un certificado que lo identifica como una entidad emisora de certificados. Un certificado autogenerado es aquel que se crea para fines de desarrollo y básicamente se convierte en la entidad de certificación y el publicador que representa el certificado. Para usarse con fines de producción, debe usar un certificado generado por un tercero, ya sea una empresa externa como Verisign o una autoridad interna, como el administrador de dominio en un entorno empresarial.

Para considerarse un publicador de confianza, el certificado de publicador debe instalarse en el almacén de certificados editores de confianza en el equipo del usuario y la entidad emisora del certificado de publicador debe tener su propio certificado instalado en el almacén de certificados de la entidad de certificación raíz de confianza. Puede usar la consola de administración de certificados de certmgr.exe en Windows para administrar e instalar certificados en los almacenes de la máquina y también puede instalarlos mediante Visual Studio 2005. Le paso a paso por el proceso de uso de Visual Studio más adelante en este artículo.

Comprobaciones de seguridad clickOnce en el inicio

Cuando se inicia una aplicación ClickOnce en el escritorio de un usuario la primera vez, el entorno de ejecución de .NET Framework comprobará primero para asegurarse de que los manifiestos de la aplicación no se han alterado, ya que se han firmado con cualquier certificado de publicador que se usó para firmar. Si pasan esa comprobación, el tiempo de ejecución buscará en el almacén de la entidad de certificación raíz de confianza y verá si el certificado del emisor del certificado del publicador está instalado en ese almacén. A continuación, examinará quién es el publicador del certificado y verá si su certificado está en el almacén editores de confianza. Si esas dos cosas son verdaderas, de forma predeterminada no se le pedirá al usuario y se concederá a la aplicación los privilegios especificados en el archivo de manifiesto de aplicación. Se agregará una confianza de aplicación para esta aplicación a la directiva de seguridad de .NET Framework del usuario, la aplicación se iniciará y ejecutará y, si los permisos se especificaron correctamente en el manifiesto de aplicación, el usuario nunca debería ver un aviso o una excepción de seguridad.

Si tanto el emisor del certificado como el publicador representado por el certificado son desconocidos en el equipo cliente (en función de los certificados instalados en los almacenes), se le pedirá al usuario el cuadro de diálogo que se muestra en la figura 1 y puede decidir si desea permitir que la aplicación obtenga los privilegios necesarios, dependiendo de la zona desde la que se inicia la aplicación. Si hace clic en el vínculo Más información... en la parte inferior, obtendrá el cuadro de diálogo que se muestra en la figura 2, lo que proporciona al usuario un poco más detalles sobre lo que está a punto de suceder si hace clic en el botón Instalar , pero en general probablemente solo va a asustarlos ,como lo hacen la mayoría de los diálogos de seguridad, ya que proporciona muy poca información sobre lo que realmente está ocurriendo.

Figura 1. Aviso de usuario de publicador y entidad de certificación que no es de confianza

Ilustración 2. Cuadro de diálogo Más información

Si el certificado usado para firmar los manifiestos de aplicación se genera mediante una entidad de certificación raíz de confianza, pero el certificado de publicador específico no está en el almacén de editores de confianza, se le pedirá al usuario, pero con un aviso ligeramente más descriptivo que cuando se desconoce el emisor del certificado de publicador (consulte la figura 3). El aviso más descriptivo indicará la organización del publicador, ya que con la tecnología de certificado Authenticode y raíces de confianza, puede confiar al menos en que la organización de publicación es quien dicen que son según el emisor del certificado. Si confía en la autoridad emisora, puede confiar en que el publicador no pretende ser alguien que no lo sea.

Figura 3. Aviso del usuario de la entidad de certificación de confianza

Una vez creada una confianza de aplicación para una aplicación determinada, ya sea debido a la configuración automática basada en un certificado de publicador de confianza, o en función del usuario que se le solicite y permita que la aplicación se instale, las versiones posteriores de la misma aplicación no tendrán que volver a preguntar a menos que cambien los permisos de seguridad solicitados.

Entrar en la zona

Hay cinco zonas de seguridad integradas que se usan en CAS para las decisiones de confianza basadas en el origen: MyComputer, LocalIntranet, Internet, TrustedSites y UntrustedSites. Estas mismas zonas se usan para determinar qué tipo de solicitud se debe permitir para los usuarios con respecto a la elevación de los permisos de la aplicación ClickOnce. Cada zona corresponde al contexto desde el que se inicia una aplicación ClickOnce, que viene determinada por la dirección de ruta de acceso completa que se usó para el manifiesto de implementación (archivo.application) para la aplicación ClickOnce.

En la tabla 1 se muestran algunos ejemplos de zonas de inicio basadas en la dirección usada para el manifiesto de implementación. Lo que básicamente se desglosa es si la dirección es una ruta de acceso de archivo local a una unidad no en red, la aplicación se iniciará en la zona MyComputer. Si la dirección usa un protocolo de red (recurso compartido de archivos HTTP o UNC) y la parte del servidor de la dirección es un nombre de equipo único, se evaluará que procede de la zona LocalIntranet. Si la parte del nombre del servidor de la dirección contiene puntos, se evalúa como procedente de la zona de Internet. TrustedSites y UntrustedSites dependen de direcciones individuales configuradas como parte de la configuración de seguridad Sitios de confianza y Sitios restringidos de Internet Explorer.

Tabla 1. Ejemplos de zona de inicio de ClickOnce

Dirección de inicio Zona de inicio
http://deploymentserver/MyClickOnceApp/MyClickOnceApp.application LocalIntranet
\\deploymentserver\MyClickOnceApp\MyClickOnceApp.application LocalIntranet
http://some.dotted.servername/Apps/MyClickOnceApp.application Internet
\\127.0.0.1\sharefolder\MyClickOnceApp.application Internet
C:\inetpub\wwwroot\MyClickOnceApp\MyClickOnceApp.application Miequipo

De forma predeterminada, los sitios MyComputer, LocalIntranet y TrustedSites están configurados para permitir al usuario solicitar privilegios de seguridad de una aplicación ClickOnce si esa aplicación no está firmada por un editor de confianza. El valor predeterminado de la zona de Internet es que si el manifiesto de aplicación está firmado por un certificado de publicador emitido por una entidad raíz de confianza, esa aplicación puede solicitar al usuario permisos elevados si es necesario (es decir, el certificado de publicador no está instalado también en el almacén editores de confianza). Si una aplicación iniciada por interne no está firmada con un certificado emitido por una entidad raíz de confianza, la aplicación no podrá ejecutarse. El valor predeterminado de la zona UntrustedSites es que si la aplicación no está firmada por un certificado de publicador de confianza emitido por una entidad raíz de confianza, la aplicación no podrá ejecutarse (es decir, no se permite ningún usuario que solicite).

Esta configuración se puede modificar si lo desea para su empresa mediante la configuración de una clave del Registro oculta que ClickOnce comprobará para determinar la directiva de solicitud de usuario. Cada uno de los comportamientos descritos anteriormente corresponde a un valor que puede establecer para cada una de las zonas a través de esta clave del Registro.

Clave del Registro \HKLM\Software\Microsoft\. NETFramework\Security\TrustManager\PromptingLevel es el que permite personalizar el comportamiento de solicitud. Esta clave no está presente de forma predeterminada después de una instalación de .NET Framework 2.0, por lo que tendrá que crearla manualmente si desea personalizar esta configuración.

En esa clave del Registro, puede agregar cualquiera de los cinco valores de cadena, denominados MyComputer, LocalIntranet, Internet, TrustedSites y UntrustedSites. Estos corresponden a sus respectivas zonas. Como valor para estos, puede establecer una de las tres cadenas: Enabled, Disabled o AuthenticodeRequired. Habilitado es el valor predeterminado para las zonas MyComputer, LocalIntranet y TrustedSites. El valor predeterminado de Internet es AuthenticodeRequired y el valor predeterminado UntrustedSites es Disabled. En la tabla 2 se muestran los valores que puede establecer para cada zona y sus efectos. En la figura 4 se muestran los valores de clave del Registro establecidos en su comportamiento predeterminado, pero tenga en cuenta que esta clave no existe de forma predeterminada, por lo que normalmente solo la creará si va a establecerlos en valores diferentes de los predeterminados.

Tabla 2. PromptingLevel Registry Key Value Launch Effects

Value No es una entidad raíz de confianza Certificado emitido por la entidad raíz de confianza Entidad raíz de confianza y certificado de publicador de confianza
habilitado Aviso de usuario no amistoso Aviso de usuario descriptivo Sin aviso; permisos concedidos y inicios de aplicaciones
AuthenticodeRequired Aplicación deshabilitada Aviso de usuario descriptivo Sin aviso; permisos concedidos y inicios de aplicaciones
Disabled Aplicación deshabilitada Aplicación deshabilitada Sin aviso; permisos concedidos y inicios de aplicaciones

Figura 4. Valores de clave del Registro de solicitud de usuario

Editores de confianza clickOnce en acción

Para probarlo, deberá configurar certificados en el equipo de desarrollo. El primer paso es tener un certificado que se usará para firmar las aplicaciones ClickOnce y configurar ese certificado en los almacenes de certificados deseados en el equipo de desarrollo o prueba. Como se mencionó anteriormente, Visual Studio generará un nuevo certificado para cada proyecto ClickOnce, a menos que configure un certificado para firmar manifiestos ClickOnce antes de publicar primero la aplicación. Recomiendo generar un nuevo certificado de prueba, guardarlo en una ubicación conocida y, a continuación, usarlo para firmar todos los proyectos de ClickOnce de desarrollo para que no tenga que cargar sus almacenes de certificados con un montón de certificados de prueba. El certificado que se genera automáticamente no está protegido por contraseña y recomiendo encarecidamente usar solo los archivos de certificado protegidos por contraseña.

Para generar un nuevo archivo de certificado en Visual Studio 2005 protegido con contraseña, vaya a la ventana de propiedades del proyecto (haga doble clic en el nodo Propiedades de Explorador de soluciones o haga clic con el botón derecho en el nodo del proyecto y seleccione Propiedades en el menú contextual). Active la pestaña Firma , active la casilla Firmar los manifiestos clickOnce y haga clic en el botón Crear certificado de prueba... (vea la figura 5). Se le pedirá una contraseña y se agregará un nuevo archivo pfx con un nombre predeterminado al proyecto. Este certificado también se establecerá como el certificado usado para firmar los manifiestos y se instalará en el almacén de certificados personal en Windows. A continuación, puede cambiar el nombre del archivo, copiarlo en una ubicación reutilizable y, a continuación, configurar ese certificado como certificado para cualquier aplicación presionando el botón Seleccionar desde archivo... en la pestaña Firma .

Figura 5. Propiedades del proyecto de firma

Una vez que tenga un certificado y haya identificado cuál usar para firmar los manifiestos clickOnce en las propiedades del proyecto de firma, puede publicar la aplicación desde Visual Studio y los manifiestos se firmarán con ese certificado. Si tiene un certificado de publicador "real" (es decir, un Verisign uno o uno que su organización de desarrollo usa firmado por alguna otra entidad raíz de confianza), puede usarlo en su lugar, ya sea desde un archivo como se ha descrito anteriormente, o apuntando al certificado en el almacén personal de certificados mediante el botón Seleccionar desde almacén... en las propiedades del proyecto de firma.

Para ver cómo puede evitar un aviso de usuario con una implementación de editor de confianza, debe configurar el certificado de publicador en la máquina donde se iniciará la aplicación con ClickOnce, que suele ser la máquina de desarrollo con fines de prueba y desarrollo. Si ha generado el certificado usted mismo como se ha descrito anteriormente (o mediante la utilidad de línea de comandos makecert.exe que viene con Visual Studio), deberá agregar ese certificado al almacén de entidades de certificación raíz de confianza. Esto se debe a que no solo es el publicador, sino que también es el emisor del certificado. Después, también querrá instalar el mismo certificado en el almacén editores de confianza, que es el paso final que permite que la aplicación se inicie sin preguntar.

Para que esto sea concreto, veamos un ejemplo por los números. Inicie un nuevo proyecto de aplicación de Windows en Visual Studio 2005 y asígneles el nombre ClickOnceTrustedPub. Una vez creado el proyecto, vaya a las propiedades del proyecto haciendo doble clic en el nodo Propiedades del árbol de Explorador de soluciones en el nodo del proyecto y seleccione la pestaña Firma.

A continuación, seleccione el cuadro para firmar los manifiestos ClickOnce. Presione el botón Crear certificado de prueba... y escriba una contraseña para el certificado. El archivo que se creará y agregará al proyecto se denominará ClickOnceTrustedPub_TemporaryKey.pfx. Cambie el nombre a devcert.pfx en Explorador de soluciones. Esto también sería un buen momento para copiar el archivo en alguna carpeta de desarrollo común en el equipo para que pueda reutilizarlo para proyectos posteriores y no tener que volver a generar y configurar los certificados. Al crear el archivo de certificado, Visual Studio también lo instaló en el almacén personal de certificados.

Para agregar este certificado a los almacenes de entidades de certificación raíz de confianza y Editor de confianza, haga clic en el botón Más detalles de la pestaña Propiedades del proyecto de firma. Esto abre el cuadro de diálogo de información del certificado (vea la figura 6). Haga clic en el botón Instalar certificado... en la parte inferior de la pestaña General y se le presentará el Asistente para importación de certificados.

Figura 6. Cuadro de diálogo de información del certificado

En el segundo paso del asistente, seleccione el botón de radio Para colocar todos los certificados en el siguiente almacén y presione el botón Examinar (vea la figura 7). Se abrirá un cuadro de diálogo donde puede seleccionar en la lista de almacenes de certificados (vea la figura 8).

Ilustración 7. Selección del almacén del Asistente para certificados

Figura 8. Selección del almacén de certificados (cuadro de diálogo)

La primera vez a través de este proceso, seleccione el almacén Entidades de certificación raíz de confianza , haga clic en Siguiente y, a continuación, en Finalizar en el asistente. Se le pedirá un cuadro de diálogo detallado de advertencia de seguridad sobre los peligros de instalar un certificado de entidad de certificación raíz. Continúe y haga clic en o no podrá probar la funcionalidad del editor de confianza de ClickOnce, pero asegúrese de que comprende el riesgo que describe. Si otra persona obtuvo el certificado, firmó una aplicación con ella y, a continuación, la iniciaría en el equipo, Windows trataría esa aplicación como publicada por una empresa que ha sido comprobada por una entidad de confianza.

Repita el proceso descrito a partir del botón Más detalles , pero esta vez instale el mismo certificado en el almacén editores de confianza.

Una vez hecho esto, puede publicar la aplicación con ClickOnce. Para ello, seleccione Publish ProjectName ( Publicar<proyecto)> en el menú Compilar de Visual Studio y haga clic en Finalizar en el asistente que aparece. Esto compilará la aplicación, la publicará con la configuración de publicación predeterminada de ClickOnce y le presentará una página web desde la que puede probar la instalación como cliente haciendo clic en el botón Instalar de la página web. Si hace clic en ese botón, la aplicación debe descargarse y ejecutarse en el escritorio sin ninguna forma de preguntar. Los permisos predeterminados solicitados por una aplicación ClickOnce no están restringidos (plena confianza) y el vínculo predeterminado del botón Instalar presentado usa una dirección URL de zona LocalIntranet. Por lo tanto, si repitió este mismo proceso sin haber configurado el certificado de publicador de confianza, se le habría indicado el cuadro de diálogo que se muestra en la figura 1.

Automatización del proceso

En un entorno operativo con una gran cantidad de máquinas de usuario que mantener, no va a tener Visual Studio disponible en cada máquina para configurar certificados de publicador, por lo que tendrá que usar la consola de administración de certificados (certmgr.exe) incluida en Windows. Si acaba de ejecutar certmgr.exe sin argumentos desde una línea de comandos, aparece una ventana de Microsoft Management Console (MMC) que le permitirá agregar o quitar certificados de cualquiera de los almacenes en el equipo local. Pero incluso con eso, es posible que no quiera tener que tocar todas las máquinas para configurar los certificados. El proceso también se puede automatizar mediante certmgr.exe con algunos parámetros de línea de comandos.

En primer lugar, debe exportar la parte pública de un certificado a un archivo de certificado (.cer) desde certmgr mediante el botón Exportar :

Figura 9. Certmgr.exe exportar certificados

Una vez hecho esto, puede copiar ese archivo de certificado en una máquina de destino y ejecutar certmgr.exe en la línea de comandos. Tendrá que pasar el nombre de archivo junto con el almacén en el que colocarlo como parámetros de línea de comandos con los modificadores adecuados y que instalará el certificado en el equipo:

certmgr –add alice.cer –s Root
certmgr –add alice.cer –s TrustedPublisher

Todo esto se puede incluir en un script o agregarlo a un instalador personalizado a través de un proyecto de instalación e implementación de Visual Studio (o algún otro tipo de instalador) y el paquete de Windows Installer resultante (.msi archivo) se puede agregar al programa previo de la aplicación ClickOnce. Para obtener más información sobre el programa previo, vea el artículo de Sean Draine Uso del programa previo de Visual Studio 2005 para Kick-Start su instalación en la edición de octubre de 2004 de MSDN Magazine.

Conclusión

La seguridad clickOnce le permite aprovechar las protecciones de seguridad en tiempo de ejecución proporcionadas por la seguridad de acceso al código, a la vez que permite una determinación dinámica de permisos para una aplicación determinada en el momento en que la aplicación se implementa a través de ClickOnce. Sin embargo, esta flexibilidad viene a un precio: tiene que decidir si permitir que el usuario sea el responsable de elevar los permisos de la aplicación mediante la solicitud y si desea que se base en dónde procede el certificado de publicador. El comportamiento predeterminado de ClickOnce es el más fácil de entender. Una aplicación va a elevar automáticamente sus permisos porque se implementa desde un publicador de confianza, o se le pedirá al usuario que decida si confía en el publicador. En entornos más controlados, es posible que quiera restringir la solicitud de usuario y en este artículo se ha escrito cómo puede hacerlo mediante la clave del Registro PromptingLevel y la configuración de certificados de autoridad raíz de confianza y publicadores en el equipo del usuario. Comprender los efectos de los distintos valores y cómo se comportan con diferentes configuraciones de almacén de certificados es importante emplear correctamente las protecciones de seguridad de ClickOnce.

 

Acerca del autor

Brian Noyes es un orador, entrenador, escritor y consultor de Microsoft con IDesign, Inc. (www.idesign.net). Habla en TechEd US y Malasia, Visual Studio Connections, VSLive!, DevEssentials, y otras conferencias, y es uno de los oradores mejor valorados en la Oficina de Oradores INETA. Ha publicado numerosos artículos sobre el desarrollo de .NET Framework para MSDN Magazine, Visual Studio Magazine, asp.netPRO, The Server Side .NET, CoDe Magazine, .NET Developer's Journal y otras publicaciones. Su último libro, Data Binding en Windows Forms 2.0, parte de la Addison-Wesley serie de desarrollo de .NET, alcanzará los estantes en la caída de 2005. Brian comenzó a programar para estimular su cerebro mientras volaba F-14 Tomcats en la Marina, aplicando sus habilidades e interés a programar simulaciones de aviones y aviónicos, prototipos y aplicaciones de apoyo mientras estimulaba sus glándulas url a asistir a Top Gun y la Escuela Piloto de Pruebas Navales de Ee. UU.