Pergunta

Estou enfrentando um problema que tive antes;não consigo encontrar minha referência sobre como resolvê-lo.

Aqui está o problema.Criptografamos a seção de strings de conexão no app.config para nosso aplicativo cliente usando o código abaixo:

        config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        If config.ConnectionStrings.SectionInformation.IsProtected = False Then
            config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)

            ' We must save the changes to the configuration file.'
            config.Save(ConfigurationSaveMode.Modified, True)
        End If

O problema é que um vendedor saiu.O laptop antigo está indo para um novo vendedor e no login do novo usuário, quando tenta fazer isso obtemos um erro.O erro é:

Unhandled Exception: System.Configuration.ConfigurationErrorsException: 
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. 
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
Foi útil?

Solução 2

Encontrei uma solução mais elegante que na minha resposta original para mim mesmo.Descobri que acabei de fazer login como o usuário que instalou originalmente o aplicativo e fez com que as strings de conexão do arquivo de configuração fossem criptografadas e vá para o diretório .net framework em um prompt de comando e execute

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"

deu permissão ao outro usuário para acessar o contêiner da chave de criptografia RSA e, em seguida, funciona para o(s) outro(s) usuário(s).

Só queria adicioná-lo aqui porque pensei ter postado esse problema em nosso blog de desenvolvimento, mas o encontrei aqui, então, caso eu precise pesquisar novamente, ele estará aqui.Adicionaremos um link para o nosso blog de desenvolvimento neste tópico também.

Outras dicas

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

copie e cole :D

Segunda-feira, 12 de fevereiro de 2007 12h15 por Naica

ré:Criptografando arquivos de configuração usando configuração protegida

Aqui está uma lista de todas as etapas que executei para criptografar duas seções no meu PC e depois implantá-las no servidor Web.Talvez ajude alguém...:

  1. Para criar um contêiner de chave RSA em nível de máquina

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. Adicione isto ao web.config antes da seção connectionStrings:

     <add name="DataProtectionConfigurationProvider"
    
          type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
    
                   Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
    
                   processorArchitecture=MSIL"
    
          keyContainerName="DataProtectionConfigurationProviderKeys"
    
          useMachineContainer="true" />
    

    Não perca o <clear /> de cima!Importante ao brincar com criptografia/descriptografia muitas vezes

  3. Verifique se isso está no topo do arquivo Web.Config.Se faltar adicione:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
  4. Salve e feche o arquivo Web.Config no VS (muito importante!)

  5. Na janela do prompt de comando (meu PC local), vá para:

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727

  6. Criptografar:(Esteja ciente de alterar o caminho físico do seu aplicativo ou use a opção -app e forneça o nome do diretório virtual do aplicativo!Como usei o VS no meu PC, preferi a opção abaixo.O caminho é o caminho para o arquivo Web.config)

    aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

  7. Para descriptografar (apenas se necessário!):

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. Exclua o contêiner de chaves (apenas se necessário!)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. Salve a chave acima em um arquivo xml para exportá-la do seu PC local para o WebServer (UAT ou Produção)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. Importe o contêiner de chaves nos servidores WebServer:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. Conceda acesso à chave no servidor web

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    Veja no IIS o usuário ASP.NET ou use:

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. Remover Conceda acesso à chave no servidor web (somente se necessário!)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. Copie e cole no WebServer o arquivo Web.config criptografado.

Então eu fiz funcionar.

  1. removeu conta de usuário antigo do laptop
  2. redefinir app.config para ter a seção não protegida
  3. arquivo de chave removido de todas as chaves de máquina dos usuários
  4. executou o aplicativo e permitiu que ele protegesse a seção

Mas tudo o que isso fez foi fazê-lo funcionar para esse usuário.

AGORA preciso saber o que devo fazer para alterar o código de proteção da seção para que vários usuários em um PC possam usar o aplicativo.Virtual PC aí vou eu (bem depois das férias para o WDW de amanhã até a próxima quarta-feira)!

algum conselho para me ajudar a apontar a direção certa, já que não tenho muita experiência nesse tipo de criptografia RSA.

Parece um problema de permissões.O (novo) usuário em questão tem permissões de gravação no arquivo app.config?O usuário anterior era um administrador local ou usuário avançado que poderia ter mascarado esse problema?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top