...More Simple More Efficient... ☞ Guest Book enSimple.net ?
Home Study Q & A Knowledge Base Free Board News

   More C#
[작성자 : chang]  5/25/2006 3:02:46 PM  에 남기신 글입니다.

제목 : 구성 섹션(web.config) 암.복호화

구성파일 (web.config) 암/복호화

기본적으로 제공되는 빌트 인 구성 암호화 제공자는 아래의 두가지 이다.

  • RsaProtectedConfigurationProvider
  • DataProtectionConfigurationProvider

이 제공자들은 machine.config에서 확인할 수 있다.

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider"> <providers> <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" /> <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy="" /> </providers> </configProtectedData>

예를 들어 /test/web.config 가 아래와 같고, 이를 암/복호화 하려면,

<connectionStrings> <add name="connstr" connectionString= "data source=.\sqlexpress;initial catalog= northwind;integrated security=true" /> </connectionStrings>

vs.net command prompt에서

aspnet_regiis -pe "구성섹션이름" -app "가상디렉토리" [-site "사이트이름"]

IIS에서 여러 사이트를 호스팅하는 경우 -SITE 옵션을 명시해줍니다. 명시된 가상디렉토리 root의 web.config 파일 내 해당 구성섹션이 암호화 됨

aspnet_regiis -pe "connectionStrings" -app "/test"

암호화된 섹션은 아래와 같다.

 <!-- 구성 섹션 암호화 테스트 용 -->

<CONFIGURATION> <APPSETTINGS /> <CONNECTIONSTRINGS configProtectionProvider="RsaProtectedConfigurationProvider"> <ENCRYPTEDDATA xmlns="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element"> <ENCRYPTIONMETHOD Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KEYINFO xmlns="http://www.w3.org/2000/09/xmldsig#"> <ENCRYPTEDKEY xmlns="http://www.w3.org/2001/04/xmlenc#"> <ENCRYPTIONMETHOD Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KEYINFO xmlns="http://www.w3.org/2000/09/xmldsig#"> <KEYNAME>Rsa Key</KEYNAME> </KEYINFO> <CIPHERDATA> <CIPHERVALUE>Ln9cewaXzKvsGLOWLKsTY3cMzfjYUNj1EvnoFZI4Gd+oLzLfE9Sy3e9nTtjITfurvF1M+VNmYrhiBkn2R9dFsXXeekacuRBfuzGDs3RFyRqXbknPP6BzpkNiScj5vcrUbwZT1j4XR4TD/qhFaY8FHXym7CA/2d1G3MOizfhwCs0=</CIPHERVALUE> </CIPHERDATA> </ENCRYPTEDKEY> </KEYINFO> <CIPHERDATA> <CIPHERVALUE>LqzsDVxT3HMiQE7m+joQ1b9pq2Eq6jE8w4ezbSL+Q3JC6OYZITXf6wg4UVq7V7cVa1goh9UtRhKifgzvoybkP6hOy+495p7ewr2ARCBbDgwdtL/Of39/jXGWBSrTcHgu9tVlpnJGN57iX9Je33QQ0xYu+8NhuXtIhCdmrSpBpMuld/jxNQoT4lDiwrfiVIu08xoeP4v/00TTwjy+RgvnHnc+W1QqypsQK58yiikhuc0=</CIPHERVALUE> </CIPHERDATA> </ENCRYPTEDDATA> </CONNECTIONSTRINGS>

구성섹션을 다시 복호화

aspnet_regiis -pd "connectionStrings" -app "/test"

프로그래밍 적으로 구성섹션을 암호화 하려면,

Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.ConnectionStrings; 
if (!section.SectionInformation.IsProtected)
{
< /STRONG > section.SectionInformation.ProtectSection ("RsaProtectedConfigurationProvider"); section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
}

프로그래밍 적으로 구성섹션을 복호화 하려면,

Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.ConnectionStrings;
if (section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
}

이런식으로 간단하게 구성섹션을 암/복호화 할 수 있다.

끝.

List
□ 한줄의 평 이름:

□ 관련 게시물 목록
번호 제            목 글쓴이 등록일 조회 받음
57 구성 섹션(web.config) 암.복호화    QuickView chang 2006-05-25 03:02 2235 0
(re) IIS 풀 계정이 NETWORK SERVICE 일 경우, 구성 섹션(web.config) 암.복호화 추가 팁    QuickView chang 2006-11-09 06:23 2005 0
(re) (re) "RSA 키 컨테이너를 찾을 수 없습니다." 에러 발생 시    QuickView chang 2007-11-22 01:14 1561 0