App.config 연결 문자열 보호 오류
-
09-06-2019 - |
문제
이전에 겪었던 문제가 발생했습니다.문제 해결 방법에 대한 참조를 찾을 수 없습니다.
여기에 문제가 있습니다.아래 코드를 사용하여 클라이언트 애플리케이션에 대한 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
나는 나 자신에 대한 원래의 대답보다 더 우아한 해결책을 찾았습니다.방금 응용 프로그램을 설치하고 구성 파일 연결 문자열을 암호화한 사용자로 방금 로그인한 후 commadn 프롬프트에서 .net 프레임워크 디렉터리로 이동하여 실행했는지 확인했습니다.
aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"
이는 다른 사용자에게 RSA 암호화 키 컨테이너에 액세스할 수 있는 권한을 부여한 다음 다른 사용자에 대해 작동합니다.
이 문제를 우리 개발자 블로그에 게시했다고 생각했는데 여기서 발견했기 때문에 여기에 추가하고 싶었습니다. 따라서 다시 찾아봐야 할 경우를 대비해 여기에 있을 것입니다.이 스레드에도 개발 블로그 지점에 대한 링크를 추가할 예정입니다.
다른 팁
http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603
복사해서 붙여넣으세요 :D
2007년 2월 12일 월요일 오전 12:15 Naica 작성
답장:보호된 구성을 사용하여 구성 파일 암호화
다음은 내 PC에서 두 섹션을 암호화한 다음 이를 WebServer에 배포하기 위해 수행한 모든 단계의 목록입니다.아마도 누군가에게 도움이 될 것입니다...:
머신 수준 RSA 키 컨테이너를 생성하려면
aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
ConnectionStrings 섹션 앞에 web.config에 다음을 추가하십시오.
<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 />
위에서!여러 번 암호화/암호 해독을 할 때 중요Web.Config 파일 상단에 이 항목이 있는지 확인하세요.누락된 경우 추가하세요.
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
VS에서 Web.Config 파일을 저장하고 닫습니다(매우 중요!)
명령 프롬프트(내 로컬 PC) 창에서 다음으로 이동합니다.
C:\WINNT\Microsoft.NET\Framework\v2.0.50727
암호화:(앱의 실제 경로 변경을 주의하세요. 또는 -app 옵션을 사용하고 앱의 가상 디렉터리 이름을 지정하세요!내 PC에서 VS를 사용했기 때문에 다음 옵션을 선호했습니다.경로는 Web.config 파일의 경로입니다)
aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
암호를 해독하려면(필요한 경우에만!):
aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
키 컨테이너 삭제(필요한 경우에만!)
aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
위의 키를 로컬 PC에서 WebServer(UAT 또는 프로덕션)로 내보내려면 xml 파일에 저장하세요.
aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
WebServer 서버에서 키 컨테이너를 가져옵니다.
aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
웹 서버의 키에 대한 액세스 권한 부여
aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
IIS에서 ASP.NET 사용자를 확인하거나 다음을 사용하십시오.
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
제거 웹 서버의 키에 대한 액세스 권한 부여(필요한 경우에만!)
aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
암호화된 Web.config 파일을 복사하여 WebServer에 붙여넣습니다.
그래서 나는 그것을 작동하게 만들었습니다.
- 노트북에서 이전 사용자 계정을 제거했습니다.
- 섹션이 보호되지 않도록 app.config를 재설정하세요.
- 모든 사용자 컴퓨터 키에서 키 파일을 제거했습니다.
- 앱을 실행하고 섹션을 보호하도록 허용했습니다.
그러나 이 모든 것은 이 사용자에게 작동되도록 한 것뿐입니다.
이제 한 PC에서 여러 사용자가 애플리케이션을 사용할 수 있도록 섹션을 보호하기 위해 코드를 변경하려면 어떻게 해야 하는지 알아야 합니다.가상 PC가 여기 있습니다(내일부터 다음 수요일까지 휴가를 마치고 WDW로 갑니다)!
나는 이 RSA 암호화 유형에 대한 경험이 많지 않기 때문에 올바른 방향으로 나를 안내하는 데 도움이 되는 조언이 있습니다.
권한 문제인 것 같습니다.문제의 (신규) 사용자에게 app.config 파일에 대한 쓰기 권한이 있습니까?이전 사용자가 이 문제를 가릴 수 있는 로컬 관리자이거나 고급 사용자였습니까?