Configurando editores confiáveis do ClickOnce

 

Brian Noyes
Microsoft MVP

Abril de 2005

Aplica-se a:
   Visual Studio 2005

Resumo: A segurança do ClickOnce permite que você aproveite as proteções de segurança de runtime fornecidas pela Segurança de Acesso ao Código, ao mesmo tempo em que permite uma determinação dinâmica de permissões para um aplicativo específico no ponto em que o aplicativo é implantado por meio do ClickOnce. (11 páginas impressas)

Sumário

Editores Confiáveis e Assinatura de Aplicativo ClickOnce 101
Verificações de segurança do ClickOnce na inicialização
Entrar na zona
ClickOnce Trusted Publishers in Action
Automatizando o processo
Conclusão
Sobre o autor

A segurança do ClickOnce permite a elevação automática de privilégios para um aplicativo implantado pelo ClickOnce com base na solicitação do usuário ou em editores confiáveis. Quando você implanta um aplicativo com o ClickOnce, as operações executadas pelo aplicativo ou os recursos que ele tenta acessar podem exigir permissões cas (Segurança de Acesso ao Código) maiores do que o que ele seria concedido com base na política atual. Se esse for o caso, por padrão, o .NET Framework runtime no computador cliente solicitará ao usuário e perguntará se ele deseja instalar o aplicativo e conceder-lhe confiança elevada.

Em um ambiente corporativo em que os administradores possuem a área de trabalho e o controle de configuração sobre cada área de trabalho é possível, geralmente é preferível evitar a necessidade de solicitar decisões de confiança ao usuário. A maioria dos usuários não tem a sofisticação para entender as implicações de suas decisões de confiança e não sabe quando devem ou não conceder permissões de aplicativo. O ClickOnce fornece controle sobre esse problema, permitindo que os aplicativos ClickOnce elevem automaticamente seus próprios privilégios sem a solicitação do usuário, se os manifestos do aplicativo tiverem sido assinados por um editor confiável.

Editores Confiáveis e Assinatura de Aplicativo ClickOnce 101

Então, o que constitui um editor confiável? Primeiro, você deve sempre assinar a implantação do ClickOnce e os manifestos do aplicativo com um certificado de editor. Em seguida, o certificado usado para assinar um aplicativo ClickOnce deve ser configurado no repositório de certificados de Editores Confiáveis no computador do usuário. Por fim, a autoridade de certificação que emitiu o certificado deve ser configurada no repositório de certificados da Autoridade de Certificação Raiz Confiável no computador do usuário. Eu vou descascar as camadas de cada uma dessas três peças por sua vez.

Quando você cria pela primeira vez um aplicativo Windows Forms no Visual Studio 2005 e o publica com o ClickOnce, o Visual Studio gerará automaticamente um certificado de editor para você e o usará para assinar seu aplicativo quando ele for publicado. Quando ele faz isso, ele gera um arquivo de certificado pessoal (arquivo.pfx) e o adiciona ao seu projeto do Visual Studio com uma convenção de nomenclatura de arquivo padrão do <ProjectName>_TemporaryKey.pfx. O Visual Studio também adicionará esse certificado ao seu repositório de certificados pessoal e habilitará as configurações de projeto que definem esse certificado como aquele a ser usado para assinar manifestos do aplicativo ClickOnce. Como tudo isso acontece automaticamente, talvez você nem esteja ciente de que está ocorrendo.

Nota O Beta 1 permitiu que você nomeie fortemente seus manifestos usando um arquivo de chave de nome forte (arquivo .snk por convenção). Beta 2 e RTM não dão mais suporte a isso e você deve assinar seus manifestos com um certificado de editor, normalmente um arquivo .pfx que pode ou não ser protegido por senha.

O processo de assinatura usa as chaves públicas e privadas no certificado para aplicar uma Assinatura Digital XML aos arquivos de manifesto XML de implantação e aplicativo gerados para um aplicativo ClickOnce. Essa abordagem de assinatura digital garante que você saiba quem assinou uma determinada implantação de aplicativo ClickOnce com base na chave pública que é inserida no arquivo de manifesto e que o arquivo não foi adulterado ou seu conteúdo foi alterado de forma alguma desde que foi assinado. Isso impede que uma parte mal-intencionada adicione configurações ou arquivos não intencionais a um aplicativo ClickOnce depois que ele é publicado por uma autoridade confiável.

Os certificados do publicador vêm em dois tipos — autogeridos ou de terceiros — verificados (por Verisign, por exemplo). Um certificado é emitido por uma autoridade de certificação, que tem um certificado que o identifica como uma autoridade emissora de certificados. Um certificado autogerenciado é aquele que você cria para fins de desenvolvimento e basicamente se torna a autoridade de certificação e o editor que o certificado representa. Para ser usado para fins de produção, você deve usar um certificado gerado por terceiros, seja uma empresa externa como a Verisign ou uma autoridade interna, como o administrador de domínio em um ambiente corporativo.

Para ser considerado um editor confiável, o certificado do editor deve ser instalado no repositório de certificados de Editores Confiáveis no computador do usuário e a autoridade emissora do certificado do editor deve ter seu próprio certificado instalado no repositório de certificados da Autoridade de Certificação Raiz Confiável. Você pode usar o certificado certmgr.exe console de gerenciamento no Windows para gerenciar e instalar certificados nas lojas em seu computador e também pode instalá-los usando o Visual Studio 2005. Percorrerei o processo de uso do Visual Studio mais adiante neste artigo.

Verificações de segurança do ClickOnce na inicialização

Quando um aplicativo ClickOnce está sendo iniciado na área de trabalho de um usuário pela primeira vez, o runtime do .NET Framework primeiro marcar para garantir que os manifestos do aplicativo não tenham sido adulterados desde que foram assinados com qualquer certificado do editor usado para assinatura. Se eles passarem esse marcar, o runtime examinará o repositório da Autoridade de Certificação Raiz Confiável e verá se o certificado do emissor do certificado do editor está instalado nesse repositório. Em seguida, ele examinará quem é o editor no certificado e verá se o certificado deles está no repositório De fornecedores confiáveis. Se essas duas coisas forem verdadeiras, por padrão, o usuário não será solicitado e o aplicativo receberá todos os privilégios especificados no arquivo de manifesto do aplicativo. Uma relação de confiança do aplicativo para esse aplicativo será adicionada à política de segurança .NET Framework do usuário, o aplicativo será iniciado e executado e, se as permissões tiverem sido especificadas corretamente no manifesto do aplicativo, o usuário nunca deverá ver um prompt ou uma exceção de segurança.

Se o emissor do certificado e o publicador representado pelo certificado forem desconhecidos no computador cliente (com base nos certificados instalados nos repositórios), o usuário será solicitado com a caixa de diálogo mostrada na Figura 1 e poderá decidir se deseja permitir que o aplicativo obtenha os privilégios necessários, dependendo de qual zona o aplicativo está sendo iniciado. Se eles clicarem no link Mais Informações... na parte inferior, eles obterão a caixa de diálogo mostrada na Figura 2, o que fornece ao usuário um pouco mais de detalhes sobre o que está prestes a acontecer se ele clicar no botão Instalar , mas, em geral, provavelmente só vai assustá-los, como a maioria das caixas de diálogo de segurança fazem, porque ele fornece muito pouca informação sobre o que realmente está acontecendo.

Figura 1. Prompt de usuário de autoridade de certificação e editor não confiável

Figura 2. Caixa de diálogo Mais Informações

Se o certificado usado para assinar os manifestos do aplicativo for gerado por uma autoridade de certificação raiz confiável, mas o certificado do editor específico não estiver no repositório de editores confiáveis, o usuário ainda será solicitado, mas com um prompt um pouco mais amigável do que quando o emissor do certificado do editor for desconhecido (consulte a Figura 3). O prompt mais amigável indicará a organização do editor, pois com a tecnologia de certificado Authenticode e raízes confiáveis, você pode pelo menos confiar que a organização de publicação é quem eles dizem ser de acordo com o emissor do certificado. Se você confiar na autoridade emissora, então você pode confiar que o editor não está fingindo ser alguém que não é.

Figura 3. Prompt de usuário de autoridade de certificação confiável

Depois que uma confiança de aplicativo tiver sido criada para um determinado aplicativo, devido à configuração automática com base em um certificado de editor confiável ou com base no usuário sendo solicitado e permitindo que o aplicativo seja instalado, as versões subsequentes do mesmo aplicativo não precisarão solicitar novamente, a menos que as permissões de segurança solicitadas sejam alteradas.

Entrar na zona

Há cinco zonas de segurança internas que são usadas no CAS para decisões de confiança baseadas em origem: MyComputer, LocalIntranet, Internet, TrustedSites e UntrustedSites. Essas mesmas zonas são usadas para determinar que tipo de solicitação deve ser permitida para os usuários em relação à elevação das permissões do aplicativo ClickOnce. Cada zona corresponde ao contexto do qual um aplicativo ClickOnce é iniciado, que é determinado pelo endereço de caminho completo que foi usado para o manifesto de implantação (.arquivo de aplicativo) para o aplicativo ClickOnce.

A Tabela 1 mostra alguns exemplos de zonas de inicialização com base no endereço usado para o manifesto de implantação. O que ele basicamente divide é se o endereço for um caminho de arquivo local para uma unidade não em rede, o aplicativo será iniciado na zona MyComputer. Se o endereço usar um protocolo de rede (http ou compartilhamento de arquivos UNC) e a parte do servidor do endereço for um único nome de computador, ele será avaliado como proveniente da zona LocalIntranet. Se a parte do nome do servidor do endereço contiver os ponto, ela será avaliada como proveniente da zona da Internet. TrustedSites e UntrustedSites dependem de endereços individuais configurados como parte das configurações de segurança Sites Confiáveis e Sites Restritos da Internet Explorer.

Tabela 1. Exemplos de zona de inicialização do ClickOnce

Endereço de Inicialização Zona de Inicialização
http://deploymentserver/MyClickOnceApp/MyClickOnceApp.application Intranet Local
\\deploymentserver\MyClickOnceApp\MyClickOnceApp.application Intranet Local
http://some.dotted.servername/Apps/MyClickOnceApp.application Internet
\\127.0.0.1\sharefolder\MyClickOnceApp.application Internet
C:\inetpub\wwwroot\MyClickOnceApp\MyClickOnceApp.application Meucomputador

Por padrão, MyComputer, LocalIntranet e TrustedSites são configurados para permitir que o usuário solicite privilégios de segurança elevados de um aplicativo ClickOnce se esse aplicativo não for assinado por um editor confiável. O padrão da zona da Internet é que, se o manifesto do aplicativo for assinado por um certificado de publicador emitido por uma autoridade raiz confiável, esse aplicativo poderá solicitar ao usuário permissões elevadas, se necessário (ou seja, o certificado do editor também não está instalado no repositório de Editores Confiáveis). Se um aplicativo iniciado pelo Interne não for assinado com um certificado emitido por uma autoridade raiz confiável, o aplicativo não poderá ser executado. O padrão da zona UntrustedSites é que, se o aplicativo não for assinado por um certificado de editor confiável emitido por uma autoridade raiz confiável, o aplicativo não poderá ser executado (em outras palavras, nenhuma solicitação de usuário é permitida).

Essas configurações podem ser modificadas se desejarem para sua empresa configurando uma chave oculta do Registro que será verificada pelo ClickOnce para determinar a política de solicitação do usuário. Cada um dos comportamentos descritos acima corresponde a um valor que você pode definir para cada uma das zonas por meio dessa chave do Registro.

A chave do Registro \HKLM\Software\Microsoft\. NETFramework\Security\TrustManager\PromptLevel é aquele que permite personalizar o comportamento de solicitação. Essa chave não está presente por padrão após uma instalação do .NET Framework 2.0, portanto, você precisará criá-la manualmente se quiser personalizar essas configurações.

Nessa chave do Registro, você pode adicionar qualquer um dos cinco valores de cadeia de caracteres, chamados MyComputer, LocalIntranet, Internet, TrustedSites e UntrustedSites. Elas correspondem às respectivas zonas. Como um valor para eles, você pode definir uma das três cadeias de caracteres: Enabled, Disabled ou AuthenticodeRequired. Habilitado é o padrão para as zonas MyComputer, LocalIntranet e TrustedSites. O padrão da Internet é AuthenticodeRequired e o padrão UntrustedSites é Desabilitado. A Tabela 2 mostra os valores que você pode definir para cada zona e seus efeitos. A Figura 4 mostra os valores de chave do Registro definidos como seu comportamento padrão, mas tenha em mente que essa chave não existe por padrão, portanto, você normalmente só os criará se quiser defini-los para valores diferentes dos padrões.

Tabela 2. Efeitos de inicialização do valor da chave do registro PromptLevel

Valor Autoridade raiz não confiável Certificado emitido pela Autoridade Raiz Confiável Autoridade raiz confiável e certificado de editor confiável
habilitado Prompt de usuário hostil Prompt de usuário amigável Sem prompt; permissões concedidas e inicializações de aplicativos
AuthenticodeRequired Aplicativo desabilitado Prompt de usuário amigável Sem prompt; permissões concedidas e inicializações de aplicativos
Desabilitado Aplicativo desabilitado Aplicativo desabilitado Sem prompt; permissões concedidas e inicializações de aplicativos

Figura 4. Valores de chave do Registro de Solicitação de Usuário

ClickOnce Trusted Publishers in Action

Para testar isso, você precisará configurar certificados em seu computador de desenvolvimento. A primeira etapa é ter um certificado a ser usado para assinar seus aplicativos ClickOnce e configurar esse certificado nos repositórios de certificados desejados em seu computador de desenvolvimento ou teste. Conforme mencionado anteriormente, o Visual Studio gerará um novo certificado para cada projeto clickOnce, a menos que você configure um certificado a ser usado para assinar manifestos do ClickOnce antes de publicar o aplicativo pela primeira vez. É recomendável gerar um novo certificado de teste, salvá-lo em um local conhecido e, em seguida, usá-lo para assinar todos os seus projetos do ClickOnce de desenvolvimento para que você não precise armazenar seus repositórios de certificados com vários certificados de teste. O certificado gerado automaticamente não é protegido por senha e recomendo que você use apenas arquivos de certificado protegidos por senha.

Para gerar um novo arquivo de certificado no Visual Studio 2005 protegido por senha, acesse a janela propriedades do projeto (clique duas vezes no nó Propriedades no Gerenciador de Soluções ou clique com o botão direito do mouse no nó do projeto e selecione Propriedades no menu de contexto). Selecione a guia Assinatura, marcar a caixa Assinar os Manifestos do ClickOnce marcar e clique no botão Criar Certificado de Teste... (consulte a Figura 5). Você será solicitado a fornecer uma senha e um novo arquivo pfx com um nome padrão será adicionado ao seu projeto. Esse certificado também será definido como o certificado usado para assinar os manifestos e ele será instalado em seu repositório de certificados pessoal no Windows. Em seguida, você pode renomear o arquivo, copiá-lo para um local reutilizável e configurar esse certificado como o certificado para qualquer aplicativo pressionando o botão Selecionar do Arquivo... na guia Assinatura .

Figura 5. Assinatura de propriedades do projeto

Depois de ter um certificado e tiver identificado qual deles usar para assinar os manifestos do ClickOnce nas propriedades do projeto de Assinatura, você poderá publicar seu aplicativo no Visual Studio e os manifestos serão assinados com esse certificado. Se você tiver um certificado de editor "real" (ou seja, um Verisign ou um que sua organização de desenvolvimento usa assinado por alguma outra autoridade raiz confiável), você pode usá-lo em vez disso, de um arquivo, conforme descrito acima, ou apontando para o certificado em seu repositório pessoal de certificados usando o botão Selecionar do Repositório... nas propriedades do projeto de Assinatura.

Para ver como você pode evitar um prompt de usuário com uma implantação de editor confiável, você precisa configurar o certificado do editor no computador em que o aplicativo será iniciado com o ClickOnce, que geralmente é seu computador de desenvolvimento para as primeiras avaliações e finalidades de desenvolvimento. Se você mesmo gerou o certificado conforme descrito acima (ou usando o utilitário de linha de comando makecert.exe fornecido com o Visual Studio), será necessário adicionar esse certificado ao repositório autoridades de certificação raiz confiáveis. Isso ocorre porque você não é apenas o editor, mas também é o emissor do certificado. Em seguida, você também desejará instalar o mesmo certificado no repositório de Editores Confiáveis, que é a etapa final que permite que o aplicativo seja iniciado sem solicitar.

Para tornar tudo isso concreto, vamos percorrer um exemplo pelos números. Inicie um novo projeto de Aplicativo do Windows no Visual Studio 2005 e nomeie-o como ClickOnceTrustedPub. Depois que o projeto for criado, vá para as propriedades do projeto clicando duas vezes no nó Propriedades na árvore Gerenciador de Soluções no nó do projeto e selecione a guia Assinatura.

Em seguida, selecione a caixa para Assinar os manifestos do ClickOnce. Pressione o botão Criar Certificado de Teste... e insira uma senha para o certificado. O arquivo que será criado e adicionado ao projeto será nomeado ClickOnceTrustedPub_TemporaryKey.pfx. Renomeie-o para devcert.pfx em Gerenciador de Soluções. Esse também seria um bom momento para copiar o arquivo para alguma pasta de desenvolvimento comum em seu computador para que você possa reutilizá-lo para projetos subsequentes e não precisar continuar regenerando e configurando seus certificados. Ao criar o arquivo de certificado, o Visual Studio também o instalou em seu repositório pessoal de certificados.

Para adicionar esse certificado aos repositórios Trusted Root Certificate Authority e Trusted Publisher, clique no botão Mais Detalhes na guia Assinatura de propriedades do projeto. Isso abre a caixa de diálogo de informações do certificado (consulte a Figura 6). Clique no botão Instalar Certificado... na parte inferior da guia Geral e você receberá o Assistente de Importação de Certificados.

Figura 6. Diálogo de informações de certificado

Na segunda etapa do assistente, selecione o botão de opção Para Colocar todos os certificados no repositório a seguir e pressione o botão Procurar (consulte Figura 7). Isso abrirá uma caixa de diálogo na qual você pode selecionar na lista de repositórios de certificados (consulte a Figura 8).

Figura 7. Seleção do repositório do Assistente de Certificado

Figura 8. Caixa de diálogo de seleção do Repositório de Certificados

Na primeira vez nesse processo, selecione o repositório Autoridades de Certificação Raiz Confiáveis , clique em Avançar e, em seguida, Concluir no assistente. Você será solicitado com uma caixa de diálogo detalhada de aviso de segurança sobre os riscos de instalação de um certificado de autoridade raiz. Vá em frente e clique em Sim ou você não poderá experimentar a funcionalidade de editor confiável do ClickOnce, mas certifique-se de entender o risco que ele está descrevendo. Se outra pessoa obteve seu certificado, assinou um aplicativo com ele e o iniciou em seu computador, o Windows trataria esse aplicativo como tendo sido publicado por uma empresa que foi verificada por uma autoridade confiável.

Repita o processo descrito começando com o botão Mais Detalhes , mas desta vez instale o mesmo certificado no repositório De fornecedores confiáveis.

Depois de fazer isso, você pode publicar seu aplicativo com o ClickOnce. Para fazer isso, selecione Publicar<ProjectName> no menu Compilar no Visual Studio e clique em Concluir no assistente que aparece. Isso criará seu aplicativo, o publicará com as configurações de publicação padrão do ClickOnce e apresentará uma página da Web da qual você poderá testar a instalação como um cliente clicando no botão Instalar na página da Web. Se você clicar nesse botão, o aplicativo deverá baixar e executar na área de trabalho sem qualquer forma de solicitação. As permissões padrão solicitadas por um aplicativo ClickOnce são irrestritas (confiança total) e o link padrão do botão Instalar apresentado usa uma URL da zona LocalIntranet. Portanto, se você repetisse esse mesmo processo sem ter configurado o certificado de editor confiável, teria sido solicitado com a caixa de diálogo mostrada na Figura 1.

Automatizando o processo

Em um ambiente operacional com muitos computadores de usuário para manter, você não terá o Visual Studio disponível em cada computador para configurar certificados do editor, portanto, você precisará usar o certificado console de gerenciamento (certmgr.exe) incluídos no Windows. Se você apenas executar certmgr.exe sem argumentos de uma linha de comando, será exibida uma janela do MMC (Console de Gerenciamento da Microsoft) que permitirá que você adicione ou remova certificados de qualquer uma das lojas no computador local. Mas mesmo com isso, talvez você não queira ter que tocar em todos os computadores para configurar os certificados. O processo também pode ser automatizado usando certmgr.exe com alguns parâmetros de linha de comando.

Primeiro, você precisa exportar a parte pública de um certificado para um arquivo de certificado (.cer) do certmgr usando o botão Exportar :

Figura 9. Certmgr.exe exportar certificados

Depois de fazer isso, você pode copiar esse arquivo de certificado para um computador de destino e executar certmgr.exe na linha de comando. Você precisará passar o nome do arquivo junto com qual repositório colocá-lo como parâmetros de linha de comando com as opções apropriadas e que instalará o certificado no computador:

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

Tudo isso pode ser roteirizado ou adicionado a um instalador personalizado por meio de um projeto de Instalação e Implantação do Visual Studio (ou alguma outra forma de instalador), e o pacote resultante do Windows Installer (.msi arquivo) pode ser adicionado ao bootstrapper para seu aplicativo ClickOnce. Para obter mais informações sobre o bootstrapper, consulte o artigo de Sean Draine Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation na edição de outubro de 2004 da MSDN Magazine.

Conclusão

A segurança do ClickOnce permite que você aproveite as proteções de segurança de runtime fornecidas pela Segurança de Acesso ao Código, ao mesmo tempo em que permite uma determinação dinâmica de permissões para um aplicativo específico no ponto em que o aplicativo é implantado por meio do ClickOnce. No entanto, essa flexibilidade tem um preço: você precisa decidir se deseja permitir que o usuário seja o responsável por elevar as permissões de aplicativo por meio de solicitações e se deseja que essa solicitação seja baseada na origem do certificado do editor. O comportamento padrão do ClickOnce é o mais fácil de entender. Um aplicativo elevará automaticamente suas permissões porque está sendo implantado de um editor confiável ou solicitará que o usuário permita que ele decida se deseja confiar no editor. Em ambientes mais controlados, talvez você queira restringir a solicitação do usuário e este artigo explicou como você pode fazer isso usando a chave do Registro PromptLevel e configurando certificados de autoridade raiz confiáveis e publicadores no computador do usuário. Entender os efeitos dos vários valores e como eles se comportam com diferentes configurações de repositório de certificados é importante para empregar corretamente as proteções de segurança do ClickOnce.

 

Sobre o autor

Brian Noyes é MVP da Microsoft e conhecido palestrante, treinador, escritor e consultor da IDesign, Inc. (www.idesign.net). Ele fala em TechEd EUA e Malásia, Visual Studio Connections, VSLive!, DevEssentials e outras conferências, e é um dos palestrantes mais bem avaliados no INETA Speakers Bureau. Ele publicou vários artigos sobre .NET Framework desenvolvimento para a MSDN Magazine, Visual Studio Magazine, asp.netPRO, The Server Side .NET, CoDe Magazine, .NET Developer's Journal e outras publicações. Seu último livro, Data Binding in Windows Forms 2.0, parte do Addison-Wesley .NET Development Series, chegará às prateleiras no outono de 2005. Brian começou a programar para estimular seu cérebro enquanto pilotava F-14 Tomcats na Marinha, aplicando suas habilidades e interesse em programar aeronaves e simulações aviônicas, protótipos e aplicativos de apoio, enquanto estimulava suas glandeses suprenais frequentando Top Gun e a Escola Piloto de Teste Naval dos EUA.