Criar aplicativos ClickOnce para outros implantarem

Nem todos os desenvolvedores que estão criando implantações do ClickOnce planejam implantar os próprios aplicativos. Muitos deles apenas empacotam seu aplicativo usando o ClickOnce e, em seguida, entregam os arquivos para um cliente, como uma grande corporação. O cliente passa a ser o responsável por hospedar o aplicativo em sua rede. Este tópico discute alguns dos problemas inerentes a essas implantações em versões do .NET Framework anteriores à versão 3.5. Em seguida, descreve uma nova solução fornecida usando o novo recurso "usar manifesto para confiança" no .NET Framework 3.5. Finalmente, ele conclui com estratégias recomendadas para criar implantações do ClickOnce para clientes que ainda estão usando versões mais antigas do .NET Framework.

Problemas envolvidos na criação de implantações para clientes

Vários problemas ocorrem quando você planeja fornecer uma implantação para um cliente. A primeira questão diz respeito à assinatura de código. Para ser implantado em uma rede, o manifesto de implantação e o manifesto do aplicativo de uma implantação do ClickOnce devem ser assinados com um certificado digital. Isso levanta a questão de usar o certificado do desenvolvedor ou o certificado do cliente ao assinar os manifestos.

A questão de qual certificado usar é crítica, pois a identidade de um aplicativo ClickOnce é baseada na assinatura digital do manifesto de implantação. Se o desenvolvedor assinar o manifesto de implantação, isso pode levar a conflitos se o cliente for uma grande empresa e mais de uma divisão da empresa implantar uma versão personalizada do aplicativo.

Por exemplo, digamos que a Adventure Works tenha um departamento financeiro e um departamento de recursos humanos. Ambos os departamentos licenciam um aplicativo ClickOnce da Microsoft Corporation que gera relatórios a partir de dados armazenados em um banco de dados SQL. A Microsoft fornece a cada departamento uma versão do aplicativo que é personalizada para seus dados. Se os aplicativos são assinados com o mesmo certificado Authenticode, um usuário que tenta usar ambos os aplicativos encontrará um erro, como ClickOnce consideraria o segundo aplicativo como sendo idêntico ao primeiro. Neste caso, o cliente pode experimentar efeitos colaterais imprevisíveis e indesejados que incluem a perda de quaisquer dados armazenados localmente pelo aplicativo.

Um problema adicional relacionado à assinatura de código é o deploymentProvider elemento no manifesto de implantação, que informa ao ClickOnce onde procurar atualizações de aplicativos. Esse elemento deve ser adicionado ao manifesto de implantação antes de assiná-lo. Se esse elemento for adicionado posteriormente, o manifesto de implantação deverá ser assinado novamente.

Exigir que o cliente assine o manifesto de implantação

Uma solução para esse problema de implantações não exclusivas é fazer com que o desenvolvedor assine o manifesto do aplicativo e o cliente assine o manifesto de implantação. Embora esta abordagem funcione, introduz outras questões. Como um certificado Authenticode deve permanecer um ativo protegido, o cliente não pode simplesmente dar o certificado ao desenvolvedor para assinar a implantação. Embora o cliente possa assinar o manifesto de implantação usando ferramentas disponíveis gratuitamente com o SDK do .NET Framework, isso pode exigir mais conhecimento técnico do que o cliente está disposto ou capaz de fornecer. Nesses casos, o desenvolvedor geralmente cria um aplicativo, site ou outro mecanismo através do qual o cliente pode enviar sua versão do aplicativo para assinatura.

O impacto da assinatura do cliente na segurança do aplicativo ClickOnce

Mesmo que o desenvolvedor e o cliente concordem que o cliente deve assinar o manifesto do aplicativo, isso levanta outros problemas que cercam a identidade do aplicativo, especialmente quando se aplica à implantação de aplicativos confiáveis. (Para obter mais informações sobre esse recurso, consulte Visão geral da implantação de aplicativos confiáveis.) Digamos que a Adventure Works queira configurar seus computadores clientes para que qualquer aplicativo fornecido a eles pela Microsoft Corporation seja executado com total confiança. Se a Adventure Works assinar o manifesto de implantação, o ClickOnce usará a assinatura de segurança da Adventure Work para determinar o nível de confiança do aplicativo.

Criar implantações de clientes usando o manifesto de aplicação para estabelecer confiança

ClickOnce no .NET Framework 3.5 contém um novo recurso que oferece aos desenvolvedores e clientes uma nova solução para o cenário de como os manifestos devem ser assinados. O manifesto do aplicativo ClickOnce oferece suporte a um novo elemento chamado <useManifestForTrust> que permite que um desenvolvedor indique que a assinatura digital do manifesto do aplicativo é o que deve ser usado para tomar decisões de confiança. O desenvolvedor usa ferramentas de empacotamento ClickOnce — como Mage.exe, MageUI.exee Visual Studio — para incluir esse elemento no manifesto do aplicativo, bem como para incorporar o nome do Publisher e o nome do aplicativo no manifesto.

Ao usar <useManifestForTrust>, o manifesto de implantação não precisa ser assinado com um certificado Authenticode emitido por uma autoridade de certificação. Em vez disso, ele pode ser assinado com o que é conhecido como um certificado autoassinado. Um certificado autoassinado é gerado pelo cliente ou pelo desenvolvedor usando ferramentas padrão do SDK do .NET Framework e, em seguida, aplicado ao manifesto de implantação usando as ferramentas de implantação padrão do ClickOnce. Para obter mais informações, consulte MakeCert.

O uso de um certificado autoassinado para o manifesto de implantação apresenta várias vantagens. Ao eliminar a necessidade de o cliente obter ou criar seu próprio certificado Authenticode, <useManifestForTrust> simplifica a implantação para o cliente, permitindo que o desenvolvedor mantenha sua própria identidade visual no aplicativo. O resultado é um conjunto de implantações assinadas que são mais seguras e têm identidades de aplicativo exclusivas. Isso elimina o conflito potencial que pode ocorrer com a implantação do mesmo aplicativo para vários clientes.

Para obter informações passo a passo sobre como criar uma implantação do ClickOnce com <useManifestForTrust> habilitado, consulte Passo a passo: implantar manualmente um aplicativo ClickOnce que não requer nova assinatura e que preserva as informações de marca.

Como funciona o manifesto da aplicação relativo à confiança em tempo de execução

Para compreender melhor como a utilização do manifesto de aplicação para confiança funciona em tempo de execução, considere o exemplo a seguir. Um aplicativo ClickOnce destinado ao .NET Framework 3.5 é criado pela Microsoft. O manifesto do aplicativo usa o <useManifestForTrust> elemento e é assinado pela Microsoft. A Adventure Works assina o manifesto de implantação usando um certificado autoassinado. Os clientes Adventure Works são configurados para confiar em qualquer aplicativo assinado pela Microsoft.

Quando um usuário clica em um link para o manifesto de implantação, ClickOnce instala o aplicativo no computador do usuário. O certificado e as informações de implantação identificam o aplicativo exclusivamente para ClickOnce no computador cliente. Se o usuário tentar instalar o mesmo aplicativo novamente de um local diferente, ClickOnce pode usar essa identidade para determinar que o aplicativo já existe no cliente.

Em seguida, o ClickOnce examina o certificado Authenticode usado para assinar o manifesto do aplicativo, que determina o nível de confiança que o ClickOnce concederá. Como a Adventure Works configurou seus clientes para confiar em qualquer aplicativo assinado pela Microsoft, esse aplicativo ClickOnce recebe confiança total. Para obter mais informações, consulte Visão geral da implantação de aplicativos confiáveis.

Criar implantações de clientes para versões anteriores de software

E se um desenvolvedor estiver implantando aplicativos ClickOnce para clientes que estão usando versões mais antigas do .NET Framework? As seções a seguir resumem várias soluções recomendadas, juntamente com os benefícios e desvantagens de cada uma.

Assinar implementações em nome do cliente

Uma estratégia de implantação possível é que o desenvolvedor crie um mecanismo para assinar implantações em nome de seus clientes, usando a própria chave privada do cliente. Isso evita que o desenvolvedor tenha que gerenciar chaves privadas ou vários pacotes de implantação. O desenvolvedor apenas fornece a mesma implantação para cada cliente. Cabe ao cliente personalizá-lo para seu ambiente usando o serviço de assinatura.

Uma desvantagem deste método é o tempo e a despesa necessários para implementá-lo. Embora esse serviço possa ser criado usando as ferramentas fornecidas no SDK do .NET Framework, ele adicionará mais tempo de desenvolvimento ao ciclo de vida do produto.

Como observado anteriormente neste tópico, outra desvantagem é que a versão do aplicativo de cada cliente terá a mesma identidade do aplicativo, o que pode levar a conflitos. Se isso for uma preocupação, o desenvolvedor pode alterar o campo Nome usado ao gerar o manifesto de implantação para dar a cada aplicativo um nome exclusivo. Isso criará uma identidade separada para cada versão do aplicativo e eliminará possíveis conflitos de identidade. Este campo corresponde ao -Name argumento para Mage.exee ao campo Nome na guia Nome em MageUI.exe.

Por exemplo, digamos que o desenvolvedor criou um aplicativo chamado Application1. Em vez de criar uma única implantação com o campo Nome definido como Application1, o desenvolvedor pode criar várias implantações com uma variação específica do cliente nesse nome, como Application1-CustomerA, Application1-CustomerB e assim por diante.

Implantar usando um pacote de instalação

Uma segunda estratégia de implantação possível é gerar um projeto de instalação da Microsoft para executar a implantação inicial do aplicativo ClickOnce. Isso pode ser fornecido em um dos vários formatos diferentes: como uma implantação MSI, como um executável de instalação (.EXE) ou como um arquivo de gabinete (.cab) juntamente com um script em lote.

Usando essa técnica, o desenvolvedor forneceria ao cliente uma implantação que inclui os arquivos do aplicativo, o manifesto do aplicativo e um manifesto de implantação que serve como modelo. O cliente executaria o programa de instalação, que solicitaria uma URL de implantação (o servidor ou local de compartilhamento de arquivos a partir do qual os usuários instalarão o aplicativo ClickOnce), bem como um certificado digital. O aplicativo de instalação também pode optar por solicitar opções de configuração adicionais do ClickOnce, como intervalo de verificação de atualização. Uma vez que essas informações são coletadas, o programa de instalação geraria o manifesto de implantação real, assiná-lo e publicar o aplicativo ClickOnce no local do servidor designado.

Há três maneiras de o cliente assinar o manifesto de implantação nessa situação:

  1. O cliente pode usar um certificado válido emitido por uma autoridade de certificação (CA).

  2. Como variação dessa abordagem, o cliente pode optar por assinar seu manifesto de implantação com um certificado autoassinado. A desvantagem disso é que ele fará com que o aplicativo exiba as palavras "Unknown Publisher" quando o usuário for perguntado se deseja instalá-lo. No entanto, a vantagem é evitar que os clientes mais pequenos tenham de gastar o tempo e o dinheiro necessários para obter um certificado emitido por uma autoridade de certificação.

  3. Finalmente, o desenvolvedor pode incluir seu próprio certificado autoassinado no pacote de instalação. Isso introduz os possíveis problemas com a identidade do aplicativo discutidos anteriormente neste tópico.

    A desvantagem do método de projeto de implantação é o tempo e a despesa necessários para criar um aplicativo de implantação personalizado.

Instruir o cliente a gerar o manifesto de implantação

Uma terceira estratégia de implantação possível é entregar apenas os arquivos e o manifesto do aplicativo ao cliente. Nesse cenário, o cliente é responsável por usar o SDK do .NET Framework para gerar e assinar o manifesto de implantação.

A desvantagem desse método é que ele requer que o cliente instale as ferramentas do SDK do .NET Framework e tenha um desenvolvedor ou administrador de sistema que seja hábil em usá-las. Alguns clientes podem exigir uma solução que exija pouco ou nenhum esforço técnico da sua parte.