天天看點

關于asp.net 連接配接字元串加密

.NetFramework自帶兩種預定義的提供程式

  • DPAPIProtectedConfigurationProvider 使用Windows資料保護API(DPAPI)進行資料的加密和解密
  • RSAPIProtectedConfigurationProvider 使用RSA加密算法進行資料的加密和解密(預設的提供程式)。

我們可以使用一個常用的系統工具aspnet_regiis.exe(通常位于C:\Windows\Microsoft.NET\Framework64\v4.0.30319)

用法:啟動指令提示符工具,找到aspnet_regiis.exe并拖入指令提示符工具中,aspnet_regiis -pef connectionstrings "網站目錄的路徑"

加密前後配置檔案差別可以自行實驗檢視

解密的話,可以使用-pdf替代上述指令行的-pef參數

提示:使用受保護區段的内容頁面在運作于visual studio自帶的伺服器上不會出現任何問題。但如果位于實際的IIS虛拟目錄中,可能會出現RSA提供程式配置錯誤,為什麼胡這樣呢?

 基于RSA提供程式需要“密鑰容器”才能工作。預設密鑰容器NetFrameWorkConfigurationKey在安裝的時候就已經建立。aspnet_regiis工具提供了許多指令行參數,來添加、語移除和編輯密鑰容器。應在轉儲受RSA保護的配置提供程式前建立密鑰容器,這非常重要。該容器不僅要存在,而且要與要調用他的賬戶相關聯。系統賬戶(運作本地web伺服器所使用的賬戶)要與容器一并列出,但web伺服器上的asp.net賬戶則不必如此。假設在NETWORK SERVICE賬戶下運作asp.net,我們需要運作一下指令來為該使用者添加通路權限:

aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

指定完整的賬戶名稱很重要。注意,僅當使用RSA提供程式時,才有必要授權密鑰容器的通路權限。

RSA和DPAPI提供程式對敏感資料的加密都很有效。DPAPI提供程式在密鑰管理方面非常簡單--密鑰是基于計算機登入憑據生成的,同一台計算機上運作的所有程序都可以通路。也正是由于這個原因,在web Form中使用DPAPI提供程式就不理想了,因為相同的已加密web.config檔案會被部署到多台伺服器中,這時,要麼對多台伺服器上的web.config以手動方式逐一進行加密,要麼将同一容器的密鑰複制到所有伺服器中。為此,我們需要為應用程式建立密鑰容器,将其導入XML檔案,并将其逐一導入每台需要加密web.config問價的伺服器中。

要想建立密鑰容器,可以使用下述指令:

aspnet_regiis -pc 密鑰容器名稱 -exp

随後,将密鑰容器導入xml檔案:

aspnet_regiis -px 密鑰容器名稱 檔案名.XML

接着,将xml檔案複制到每台伺服器中,通過下面的指令将其導入

aspnet_regiis -pi 密鑰容器名稱 xml檔案

最後,将通路該容器的權限授予asp.net賬戶