ShowProgramCode

2021年9月7日 星期二

C# ASP.NET web.config的RSA加密

 通常我們會在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說明


參考上述的說明內容,在命令列執行aspnet_regiis.exe -pc "金鑰名稱" -exp,如下圖。

在命令列執行建立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加密後內容


















   
    1.2使用其他裝置密鑰加密
    這邊就不特別實作,大致應該是把金鑰檔匯入本機中,其他的動作應該是差不多的。

確認加密後程式可以正常編譯、執行。

2.確認使用本機或取得其他RSA Key解密
    2.1使用本機特定金鑰解密
    在命令列輸入解密命令,aspnet_regiis.exe -pdf 解密區域 "web.config所在資料夾路徑"
在命令列輸入解密命令









    web.config恢復未加密內容。

    2.2使用其他裝置密鑰解密
    這邊不特別實作,先將金鑰匯入本機中,其他動作應該是差不多的。
將其他裝置金鑰的xml匯入命令參考







3.將RSA Key匯出xml檔案給其他裝置使用
aspnet_regiis.exe -px “金鑰名稱” 金鑰xml路徑 -pri
在命令列輸入匯出xml檔案命令








尋找一下這個位置是否產生了xml的金鑰檔案。



最後補充一下刪除金鑰容器的說明。
 aspnet_regiis -pz "金鑰名稱"




參考網頁:
https://dotblogs.com.tw/wasichris/2016/01/01/235040
https://www.itread01.com/content/1549832402.html
以及C# Asp.Net官方文件