2006年12月20日 星期三

加密 web.config

通常在設計ASP.NET2.0網頁程式的時候,我們會需要做一些連線資料庫的動作,對於資料庫的連線字串由於理面會紀錄Server位置或是名稱以及帳號密碼,所以通常都需要做到隱藏的動作,有兩種分是,方法一是在程式中使用到連線字串時由dll呼叫取得,另一種方式就是放在web.config之中,由於web.config是明碼,所以微軟提供了加密的機制,可參考下方的加密作法.

1.打開記事本,然後將下面的代碼複製到一個新文件中。

<%@ Page Language="C#" %>
<% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>

2.(關鍵一步)運行cmd,執行以下
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITYNETWORK SERVICE"
說明:註冊默認的 RsaProtectedConfigurationProvider 的RSA 密鑰容器,
NetFrameworkConfigurationKey 是 RsaProtectedConfigurationProvider 的默認provider。
成功!

3.現在,可以加密web.config ,運行:
加密:aspnet_regiis -pe "connectionStrings" -app "/Myweb"
說明:"connectionStrings" 是要加密的節,"/Myweb"是的web目錄
解密:aspnet_regiis -pd "connectionStrings" -app "/Myweb"
成功!

4.這樣就可以在程序裡調用了:
string connstr= ConfigurationManager.ConnectionStrings["myConnstr"].ConnectionString.ToString();
同樣的,也可以用創建自己的RSA 密鑰容器,如下:
(1)創建 "MyKeys" 密鑰容器,運行:aspnet_regiis -pc "MyKeys" -exp
(2)在web.config裡加入以下:

<protectedData>
<providers>
<add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d0a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" />
</providers>
</protectedData>

(3)授予帳戶對計算機級別的 "MyKeys" RSA 密鑰容器的訪問權限,運行:
aspnet_regiis -pa "MyKeys" "NT AUTHORITYNETWORK SERVICE"
(4)現在,可以加密web.config ,運行:
加密:aspnet_regiis -pe "connectionStrings" -app "/Myweb" -prov "MyProvider"
說明:"connectionStrings" 是要加密的節,"/Myweb"是的web目錄,"MyProvider" 自己密鑰容器
解密:aspnet_regiis -pd "connectionStrings" -app "/Myweb" -prov "MyProvider"

沒有留言: