通常我們會在web.config中放入很多設定值,其中不乏帳密之類的機密資料。按理說,這支檔案是無法被截取的,不過為了安全起見,倘若可以做更多加密處理,也能更加放心。
這次客戶提供的web.config就有加密處理,並且因為沒有RSA Key的原因,整個程式無法順利編譯。因此我將這個RSA加密web.config的方式記錄下來。
使用RAS Key加密,必須用到Visual Studio的一個執行檔(aspnet_regiis.exe),所以必須將cmd用管理者權限執行後,將路徑移動到那個執行檔的資料夾。
C:\Windows\Microsoft.NET\Framework\v4.0.30319,這是我使用的資料夾。
在HelloWorld中加上讀取appSettings的內容,確認加密前後程式可以正常編譯。
[WebMethod]
public string HelloWorld()
{
string temp = ConfigurationManager.AppSettings["test"];
return temp;
}
一、以本機的RSA Key加解密:
這個方法比較簡單,不過一旦將檔案移到別的主機上,就會發生最前面所述,整個程式無法編譯的問題,所以自己玩一下可以,並不是那麼實用。
加密:
1.在命令列執行aspnet_regiis.exe -pef appSettings "專案的web.config所在資料夾"
以本機RAS Key加密 |
2.確認web.config加密後內容
web.config加密後內容 |
3.編譯執行程式,看看是否可以順利讀到appSettings內容
解密:
1.在命令列執行aspnet_regiis.exe -pdf appSettings "專案的web.config所在資料夾"
以本機RAS Key解密 |
2.確認web.config是否解密還原最初的內容
二、以固定的RSA Key加解密
1.確認使用本機或是取得其他RSA Key加密
1.1使用本機的RSA Key加解密
這應該是最常見的狀態,使用本機的RSA Key加密後,提供這把Key給其他使用者。
aspnet_regiis.exe關於說明建立RSA Key說明 |
在命令列執行建立RSA金鑰 |
之後修改專案的web.config內容,加入一段設定指定金鑰加密的部分。
<configProtectedData>
<providers>
<add name="RuitingtechProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" keyContainerName="金鑰名稱" useMachineContainer="true"/>
</providers>
</configProtectedData>
web.config設定特定RSA金鑰加密 |
在命令列輸入加密命令,aspnet_regiis.exe -pef 加密區段 "web.config資料夾路徑" -prov "RuitingtechProvider"
在命令列輸入使用特定RSA金鑰對web.config特定區域加密 |
web.config加密後內容 |
在命令列輸入解密命令 |
在命令列輸入匯出xml檔案命令 |