문제

나는 dev_entlib.config라는 외부 파일에 저장된 응용 프로그램 블록을 암호화하는 방법을 알아 내기 위해 오랫동안 노력하고 있습니다.

Entlib (4.1)에서는 기본 보호 제공 업체를 사용하여 블록을 암호화 할 수 있지만 다른 서버 에이 응용 프로그램을 배포해야하므로 응용 프로그램 블록을 해당 응용 프로그램 블록을 암호화하는 데 사용한 키 전문가를 내보내야합니다. 서버.

지금까지 수행 한 것은 Machine.config 파일에 사용자 정의 보호 구성 제공자를 .NET v2.0*에 추가하는 것입니다.* 모든 폴더 (및 모든 대상 서버)

커스텀 제공 업체는 다음과 같습니다

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

그것은 다른 기본 제공 업체 옆에 잘 자리 잡고 있으며 Entlib 구성 도구에서 설계 시간 지원도 있습니다. 그런 다음 암호화하려는 각 블록의 보호 제공 업체를 선택합니다.

dev_entlib.config를 보면 실제로 블록이 내 공급자와 암호화되었음을 보여줍니다. 내 공급자가 내 핵심 컨테이너를 사용합니다. 따라서 주요 컨테이너를 사용하여 블록을 암호화해야합니다. 그런 다음 "mykey"를 XML 파일로 내보내고 다음을 사용합니다.

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -px "MyKey" "C:\keys.xml" -pri
Exporting RSA Keys to file...
Succeeded!

이 키 파일은 내 Systest 서버에 복사되어 가져 오는 서버가 가져오고 "NT Authority Network Services"및 "ASPNET"에 대한 액세스 권한이 부여됩니다.

그런 다음 암호화 된 web.config 및 dev_entlib.config를 복사하고 .net configurationManager를 사용하여 ConnectionStrings Collection을 가져 와서 페이지에 표시하는 작은 페이지에 연결 문자열을 표시하려고합니다. 이 페이지는 IIS에서 실행 중이며 프로세스의 신원은 "NT Authority Network Services"입니다.

문제는 작동하지 않는다는 것입니다! 데이터 오류가 잘못되거나 "제공자 MyCompanyProvider를 사용하여 해독하지 못했습니다"가 있습니다.

이 접근법은 나에게 논리적으로 의미가있는 것처럼 보이지만 여전히 실패합니다.

다른 제안이 있습니까?

도움이 되었습니까?

해결책

Enterprise Library 구성 도구를 사용하여 Custom RSA 키 컨테이너를 사용하여 외부 엔터프라이즈 라이브러리 구성 파일을 암호화하십시오.

  • Entlib (4.1)는 기본 보호 제공 업체를 사용합니다 rsaprotectedConfigurationProvider. 그러나 구성 파일 내 에서이 공급자를 제거하고 동일한 이름으로 교체하여 사용자 정의 키 제공 업체를 가리킬 수 있습니다. "미키".
  • 당신은 이것을 추가해야합니다 configProtectedData 암호화하려는 영역이있는 구성 파일의 섹션 (예 : 외부 파일 : *dev_entlib.config *). 수정할 필요가 없습니다 machine.config 전혀 파일.
  • 그런 다음 선택할 수 있습니다 rsaprotectedConfigurationProvider Enterprise Library 구성 응용 프로그램에서 데이터 액세스 애플리케이션 블록 ProtectionProvider.
  • 당신은 이것을 열어야합니다 entlibconfig.exe ~와 함께 관리자로 실행하십시오 Vista, Windows 7, Windows 2008에있는 경우.
    • 그렇지 않으면 오류가 발생합니다.
      • Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Object already exists.
  • 그런 다음이 암호화 된 * dev_entlib.config *와 함께 복사 할 수 있습니다. web.config 귀하의 구성 파일 Systest 섬기는 사람. 열기 web.config 엔터프라이즈 라이브러리 구성 도구가있는 파일 Systest 서버 ~ 아니다 오류 받기 :
    • Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Bad Data.

web.config

이 파일은 거의 비어 있으며 외부 데이터 구성 파일을 가리 킵니다.

<!-- web.config -->
<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="External Data Configuration File Source">
    <sources>
      <add name="External Data Configuration File Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        filePath="dev_entlib.config" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>
</configuration>

dev_entlib.config

이 파일에는 연결 문자열과 보호 제공 업체가 있습니다.

<!-- dev_entlib.config -->
<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
 </configSections>
    <dataConfiguration defaultDatabase="MyConnectionStringName" />
 <connectionStrings>
  <add name="cnHnicMediaLibrary" connectionString="Server=MyDbServer; Database=MyDbName; Integrated Security=SSPI"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
  <configProtectedData>
    <providers>
      <remove name="RsaProtectedConfigurationProvider" />
      <add    name="RsaProtectedConfigurationProvider"
        keyContainerName="MyKey"
        useMachineContainer="true"
        description="Uses our own encryption key container so that it will work in a Web Farm setting. We need to trick Enterprise Library, which wants to use the default RsaCryptoServiceProvider to encrypt and decrypt, by replacing this default provider with our own while this configuration is processed!"
        type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </configProtectedData>
</configuration>

기반 :

나는 이것이 당신이 가진 오류 메시지와 그것을 고치는 방법을 설명했기를 바랍니다.

다른 팁

아직 가능하지 않은 것 같습니다. 내 해결책은 Web.config의 일부로 블록을 암호화 한 다음 해당 블록을 외부 Entlib.config 파일에 복사하여 붙여 넣는 것입니다. 그런 다음이 블록은 내보낸 키로 대상 서버에서 해독 할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top