2008-09-03 12 views
2

이전에 문제가 있습니다. 그것을 해결하는 방법에 대한 나의 참조를 찾을 수 없습니다.App.config 연결 문자열 보호 오류

여기에 문제가 있습니다. 우리는 아래의 클라이언트 응용 프로그램을 사용하여 코드의의 app.config에서 연결 문자열 섹션을 암호화 :

 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 

문제는 우리가 영업 사원의 휴가를했다입니다. 오래된 노트북은 새로운 영업 사원에게 가고 새로운 사용자의 로그인 아래에서 이렇게하려고 할 때 오류가 발생합니다. 오류 :

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 
+2

Vista 이상인 경우 관리자 권한으로 실행하고 있는지 확인하십시오. –

답변

1

나 자신에 대한 내 원래의 대답에서보다 우아한 해결책을 발견했습니다. 난 그냥 orignally 응용 프로그램을 설치 euser 번째로 로그인하고 설정 파일 connectionstrings은 (는) 다른 사용자를 준

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

commadn 프롬프트에서 .NET 프레임 워크 디렉토리로 이동하여 실행 암호화되는 원인이 있다면 발견 RSA 암호화 키 컨테이너에 액세스 할 수있는 권한을 부여한 다음 다른 사용자 (들)도 사용할 수 있습니다.

dev에있는 블로그에서이 문제를 블로그에 올렸지 만 여기에서 찾은 것 같아서 다시 찾아야 할 경우에 대비하여 여기에 추가 할 것입니다. 이 쓰레드에서 개발자 블로그 포인트에 대한 링크를 추가 할 것입니다.

+0

이 오류는 ASP .NET 응용 프로그램에서 해당 오류를 가져올 때도 유용합니다. aspnet_Regiis -pa "NetFrameworkConfigurationKey ASPNET 감사합니다. – Jay

0

사용 권한 문제와 유사합니다. 해당 (새) 사용자는 app.config 파일에 대한 쓰기 권한이 있습니까? 이전 사용자가이 문제를 숨길 수있는 로컬 관리자 또는 고급 사용자였습니까?

+0

우리는 새로운 사용자를 위해 clickonce 설치를 사용하여 앱을 설치했습니다. 두 사용자는 PC의 관리자 그룹에있었습니다. 내가 온라인에서 찾은 것에서는 기본 RSA 키가 컴퓨터 고유의 것으로 보이며 여러 사용자가 app.config의 버전을 보호하기 위해이 키를 사용하면 오류가 발생합니다. 몇 가지 사용자 특정 키를 사용하여 보호해야한다고 생각합니다. 이제는 방법을 찾아야합니다. :) 답장을 보내 주셔서 감사합니다! Mike – MikeScott8

1

그래서 나는 그것을 얻었습니다.

  1. 제거 된 사용자 섹션
  2. 앱 실행하는 모든 사용자 컴퓨터 키에서
  3. 제거 키 파일을 보호하지 않은 랩톱에서
  4. 리셋의 app.config 계정과이 부분을 보호 할 수

하지만이 모든 것이이 사용자에게 효과적이었습니다.

지금 PC의 여러 사용자가 응용 프로그램을 사용할 수 있도록 섹션을 보호하기 위해 코드를 변경하려면 어떻게해야하는지 알아야합니다. 가상의 PC는 여기에 (나는 내일 다음 주 수요일을 통해 WDW에 휴가를 보낸 후에) 잘왔다.

올바른 방향으로 나를 가리켜 줄 수있는 조언.이 RSA 암호화 유형에 대해서는 경험이 많지 않습니다.

1

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

복사 및 붙여 넣기 : D

월요일, 2 월 12 일 Naica

다시 2007 오전 12시 15분 : 암호화 구성 파일을 사용하여 보호 구성 여기

입니다 내 PC에서 두 섹션을 암호화하고 WebServer에 배포하기 위해 수행 한 모든 단계 목록. 어쩌면 그것은 누군가를 도울 것입니다 ...:

,536,913 :

  1. aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp 
    
  2. 는 connectionStrings 섹션 이전의 web.config이 추가 컴퓨터 수준 RSA 키 컨테이너를 만들려면 63,210

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

    는 위에서 <clear />를 놓치지 마세요! encription/decripting을 여러 번 재생할 때 중요합니다.

  3. Web.Config 파일 맨 위에 확인하십시오. 없는 경우를 추가

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    
  4. 저장 및 VS 가까운 Web.Config 파일 (! 매우 중요) 명령 프롬프트에서

  5. (내 로컬 PC) 창을 이동하려면 :

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

  6. 암호화 :(응용 프로그램의 phisical 경로를 변경하거나 -app 옵션을 사용하고 응용 프로그램의 가상 디렉터리 이름을 제공하십시오! PC에서 VS를 사용했기 때문에 벨로우즈 옵션을 선호했습니다. 경로는 Web.config 파일의 경로)입니다

    경우 aspnet_regiis -pef "connectionStrings" "C : \ 쏴 \ 쏴 \ 쏴"-prov "DataProtectionConfigurationProvider"

    경우 aspnet_regiis -pef "system.web/회원" "C : \ 쏴 \ 쏴 \ 쏴"-prov "DataProtectionConfigurationProvider"

  7. 가 해독하는 (필요한 경우에만!) : (! 필요한 경우에만)

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" 
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla" 
    
  8. 키 컨테이너를 삭제

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys" 
    
  9. 웹 서버 서버에서 웹 서버 (UAT 또는 생산)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri 
    
  10. 가져 오기 키 컨테이너에 로컬 PC에서 내보낼하기 위해 XML 파일에 위의 키를 저장 :

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml 
    
  11. 웹 서버의 키에 대한 액세스 권한 부여

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User" 
    

    IIS에서 ASP를 참조하십시오.NET 사용자 또는 사용 : 웹 서버의 키에

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name 
    
  12. 제거 액세스 권한 부여는 (! 만 필요한 경우)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User" 
    
  13. 복사하여 암호화 된 Web.config 파일을 웹 서버에 붙여 넣습니다.