RSA 金鑰對Web.config資料庫連線字串加密

Select *
Program
Published in
May 8, 2021

使用aspnet_regiis.exe建立RSA金鑰,將 web.config 裡的資料庫連線字串等較為敏感的內容做加密。

步驟

  • 建立RSA金鑰
  • Web.config加入configProtectedData
  • 對 Web.config 內容加密
  • 匯出RSA金鑰
  • 匯入RSA金鑰

建立RSA金鑰

以系統管理員身分執行 Windows 命令提示字窗,切換至 aspnet_regiis.exe 的目錄下

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

建立一個名稱TheKey的金鑰容器,最後的-exp 為設定允許匯出

aspnet_regiis.exe -pc "TheKey" -exp

Web.config加入configProtectedData

在 Web.config 檔的< configuration>中加入 <configProtectedData> 區塊,指定名稱為TheKeyProtectedProvider、金鑰名稱為TheKey。

對 Web.config 內容加密

使用 TheKeyProtectedProvider對 Web.config 裡的<connectionStrings>區段加密,CMD輸入:
aspnet_regiis.exe -pef "要加密的區段" "Web.config所在路徑" -prov "provider名稱"

aspnet_regiis.exe -pef "connectionStrings" "C:\MyProject" -prov "TheKeyProtectedProvider"

加密後<connectionStrings>會被加密成如下圖

若要解碼回原本的connectionStrings,CMD輸入:

aspnet_regiis.exe -pdf "connectionStrings" "C:\MyProject"

匯出RSA金鑰

將建立的RSA金鑰匯出成Xml檔,CMD輸入:
aspnet_regiis.exe -px "金鑰容器名稱" 檔案匯出位置

aspnet_regiis.exe -px "TheKey" C:\TheKey.xml -pri

匯入RSA金鑰

若其他台主機要跑該專案(Web.config已加密),將Xml檔移至主機內並匯入,CMD輸入:
aspnet_regiis.exe -pi "金鑰容器名稱" Xml檔所在位置

aspnet_regiis.exe -pi "TheKey" C:\TheKey.xml

後記

若程式執行,出現錯誤訊息「無法開啟 RSA 金鑰容器」,表示無存取權限。

主機設定存取權限:

aspnet_regiis.exe -pa "TheKey" "主機名稱"

IIS設定存取權限:

aspnet_regiis.exe -pa "TheKey" "IIS AppPool\DefaultAppPool"

--

--