IT_Programming/ASP.NET (WEB)

[펌] ASP.NET Web.config의 ConnectionString 암호/복호화 방법

JJun ™ 2009. 4. 8. 11:49

 

 

출처: http://mygeni.tistory.com/

 

일반적으로 웹 프로그램을 개발시 DB연동과 관련된 Connection 정보를 소홀하게 관리하는 경우가 많이 있다.

MS의 ASP.NET에서는 이러한 중요한 정보를 암호화할 수 있도록 설정하여 응용 프로그램의 보안을 향상시킨수 있는 방법을 제공해준다. aspnet_regiis.exe를 사용하여 web.config파일의 특정 섹션을 암호화하고 암호화 키를 관리할 수 있다

* 사전 요구 사항
해당 내용에 대한 설정을 완료하기 위해서는 다음과 같은 요건을 갖춰야 한다.

1. 사이트를 호스팅하는 컴퓨터에 Microsoft IIS(인터넷 정보 서비스)가 설치 및 구성되어 있어야 한다.

2. ASP.NET 웹 사이트


* Web.config의 <connectionStrings> 자식 요소 및 <machineKey> 자식 요소 암호화 방법

  1. 텍스트 편집기에서 응용 프로그램에 대한 Web.config 파일을 엽니다.

    • ASP.NET 응용 프로그램에 대한 Web.config 파일이 없으면 텍스트 편집기를 열고 예제 구성을 새 파일로 복사한 다음 새 파일을 ASP.NET 응용 프로그램 디렉터리에 web.config로 저장합니다.

  2. 다음 예제와 같이 <system.web> 요소에 대한 <connectionStrings> 자식 요소와 <machineKey> 자식 요소가 모두 있어야 합니다.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>

       <system.web>

         <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
           decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" />

       </system.web>
    </configuration>

     
  3. Web.config 파일을 닫습니다.

  4. 명령 프롬프트에서 다음 명령을 입력하여 디렉터리를 .NET Framework 버전 2.0 디렉터리로 변경합니다.

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

    1. 명령 프롬프트에서 다음 옵션을 사용하여 aspnet_regiis.exe를 실행합니다.
    2. -pe 옵션과 "connectionStrings" 문자열을 사용하여 응용 프로그램에 대한 Web.config 파일의 connectionStrings 요소를 암호화합니다.

    • -app 옵션과 응용 프로그램의이름을 사용합니다.

    1. 예를 들어 다음 명령은 MyApplication이라는 응용 프로그램에 대한 Web.config 파일의 <connectionStrings> 섹션을 암호화합니다.
    2. aspnet_regiis -pe "connectionStrings" -app "/MyApplication"
    3. 다음 예제와 같이 <system.web> 요소의 <machineKey> 자식 요소에 대해 이전 단계를 반복합니다.

      aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"

      명령 프롬프트 창을 닫지 마십시오.

    4. Web.config를 열고 암호화된 내용을 확인합니다.

      다음 예제의 Web.config 파일과 비슷한 내용이 표시될 것입니다.

    <configuration>

       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <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>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>

       <system.web>
         <machineKey configProtectionProvider="RsaProtectedConfigurationProvider">
           <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <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>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM=
                   </CipherValue>
                 </CipherData>
               </EncryptedKey>
             </KeyInfo>
             <CipherData>
               <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL
               </CipherValue>
             </CipherData>
           </EncryptedData>
         </machineKey>

       </system.web>
    </configuration>

    *  Web.config의 <connectionStrings> 자식 요소 및 <machineKey> 자식 요소 복호화 방법

    필요한 경우 -pd 옵션으로 aspnet_regiis.exe를 실행하여 암호화된 Web.config 파일 내용을 해독할 수 있습니다. 암호 해독 구문은 -pe 옵션으로 Web.config 파일 내용을 암호화할 때와 동일하지만 보호되는 구성 공급자를 지정하지 않는다는 점이 다릅니다. 해당 공급자는 protected 섹션의 configProtectionProvider 요소로 식별됩니다. 예를 들어 다음 명령은 MyApplication이라는 ASP.NET 응용 프로그램에 대한 Web.config 파일에서 <connectionStrings> 요소 및 <system.web> 요소의 <machineKey> 자식 요소를 해독합니다.

     

    aspnet_regiis -pd "connectionStrings" -app "/MyApplication"

    aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"

    - 출처 : MSDN