Web.config 암호화
asp.net 2.0 에서는 민감한 데이터를 암호화를 하기 위해서 Aspnet_regiis.exe 툴을 사용할 수 있습니다.
db 연결 문자열 부분을 말하는 거죠...
web.config 나 machine.config 파일 부분에서 사용이 가능합니다.
web form에서 다중의 서버상에 사용되는 configuration 파일들을 암호화하기 위해
부분적으로 RSA 암화화를 효과적으로 만들어 줍니다.
web.config 에서 connectionStrings 세션부분에 암호화를 해볼까요..
아래는 connectionStrings 세션부분에 db를 연결하는 부분을 기술했습니다.
<connectionStrings>
<add name = "MyLocalSQLServer"
connectionString = "Initial Catalog = aspnetdb ;
data source = localhost ; Integrated Security = SSPI ;"
providerName = "System.Data.SqlClient"/>
</connectionStrings>
이 세션부분에 대해서 암호화를 하기 위새서 먼저 명령 프롬프트를 실행시키시고,
aspnet_regiis -pe "connectionStrings" -app "/MachineRSA"
실행하면 암호화가 됩니다. 여기서 -app 다음에 MachineRSA 라고..가상디렉토리명을 기재하기고.
-pe는 구성섹션을 암호화 하는 것을 의미합니다.
aspnet_regiis.exe -pef "connectionStrings" C:\Projects\MachineRSA
-pef 인수를 사용해서 직접 물리적인 경로로 암호화를 할 수 있습니다.
영문 .net framework 일 경우 아래와 같은 결과값을 반환해 줍니다.
Encrypting configuration section..
Succeeded!
복고화는 아래와 같이 -pd를 사용해서 해제하면 됩니다.
aspnet_regiis.exe -pd "connectionStrings" C:"\Projects\MachineRSA
디폴트는 RSA암호화 방식을 사용하는데 이 키가 machine.config 파일에 있습니다.
하지만 iis용 계정인 network service 계정이 이 키에 대한 접근 권한이 없다면 에러가 날 수 있습니다.
아래와 같은 명령어로 권한을 주면 해결이 가능하답니다.
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Auhority\Network Service"
실행하면 아래와 같은 내용으로 출력 해줍니다.
Adding ACL for access to the RSA Key container...
Succeeded!
구성 오류
설명: 이 요청을 제공하는 데 필요한 구성 파일을 처리하는 동안 오류가 발생했습니다. 아래의 오류 정보를 확인한 다음 구성 파일을 적절하게 수정하십시오.
파서 오류 메시지: 'RsaProtectedConfigurationProvider' 공급자를 사용하여 암호를 해독하지 못했습니다. 공급자의 오류 메시지: RSA 키 컨테이너를 열 수 없습니다.
대부분의 경우, RSA 키 컨테이너가 실행하는 서버에 등록되어 있지 않기 때문입니다.
다음을 통해 키 컨테이너를 등록합니다.
물론, 실행할 서버에서 하는 작업입니다.
OR
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"
여기서 해결 될 수도 있지만, 또 다시 에러가 발생할 수 있습니다.
파서 오류 메시지: 'RsaProtectedConfigurationProvider' 공급자를 사용하여 암호를 해독하지 못했습니다. 공급자의 오류 메시지: 잘못된 데이터
아마도 키 컨테이너가 상이해서 발생하는 에러가 아닌가 싶습니다.
이렇게 되면, 암호화 작업을 로컬이 아닌 서버에서 직접 작업하도록 합니다.
-p는 암호화하고자 하는 섹션명
-pe 는 Encryption
-pd 는 Dectryption
-app는 가상디렉토리
<기타 옵션>
-pe 섹션 구성 섹션을 암호화합니다. 선택적 인수:
[-prov provider] 이 공급자를 사용하여 암호화합니다.
[-app virtual-path] 이 가상 경로에서 암호화합니다. 가상 경로는 슬래시로 시작해야 합니다. 가상 경로가 '/'인 경우 해당 사이트의 루트를 나타냅니다. -app를 지정하지 않으면 루트 web.config가 암호화됩니다.
[-site site-name-or-ID] -app에 지정한 가상 경로의 사이트입니다. 지정하지 않으면 기본 웹사이트가 사용됩니다.
[-location sub-path] 위치 하위 경로입니다.
[-pkm] web.config 대신 machine.config를 암호화/해독합니다.
-pd 섹션 구성 섹션의 암호를 해독합니다. 선택적 인수:
[-app virtual-path] 이 가상 경로에서 암호를 해독합니다. 가상 경로는 슬래시로 시작해야 합니다. 가상 경로가 '/'인 경우 해당 사이트의 루트를 나타냅니다. -app를 지정하지 않으면 루트 web.config가 복호화됩니다.
[-site site-name-or-ID] -app에 지정한 가상 경로의 사이트입니다. 지정하지 않으면 기본 웹 사이트가 사용됩니다.
[-location sub-path] 위치 하위 경로입니다.
[-pkm] web.config 대신 machine.config를 암호화/해독합니다.
-pef 섹션 web-app-physical-dir
구성 섹션을 암호화합니다. 선택적 인수:
[-prov provider] 이 공급자를 사용하여 암호화합니다.
-pdf 섹션 web-app-physical-dir
구성 섹션의 암호를 해독합니다.
-pc 컨테이너 ContainerName에 RSA 키 쌍을 만듭니다. 선택적 인수:
[-size key-size] 키 크기입니다. 기본값은 1024입니다.
[-pku] 시스템 컨테이너가 아니라 사용자 컨테이너를 사용합니다.
[-exp] 개인 키를 내보낼 수 있도록 만듭니다.
[-csp provider] 사용할 Csp 공급자입니다.
-pz 컨테이너 ContainerName을 삭제합니다. 선택적 인수:
[-pku] 시스템 컨테이너가 아니라 사용자 컨테이너를 사용합니다.
-pi 컨테이너 파일 Xml
http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx