當前位置:
首頁 > 知識 > C基礎:.NET環境下WebConfig的加密

C基礎:.NET環境下WebConfig的加密

在將ASP.NET項目部署到伺服器上時,內網環境下Web.Config往往是直接複製過去。對於外網環境,則需要對Web.Config文件進行加密。

.NET環境下一共提供了2種方式的加密功能,分別是DpapiProtectedConfigurationProvider和RsaProtectedConfigurationProvider提供程序。

前者在本機加密Web.Config後,只能在本機進行解密,如果需要將Config文件複製到外部主機,則無法進行解密。後者在本機加密Config文件後,可以到處密鑰容器,當把Config文件複製到外部主機後,可對先前導出的文件進行導入功能,導入後既可自動解密。

由於經常需要複製Config文件到外部主機,因此Rsa保護程序更加適用於實際業務場景,本文將詳細介紹RsaProtectedConfigurationProvider程序的使用步驟。

1. 使用RsaProvider提供程序,需要首先進入.NET Framework運行環境,可以配置環境變數或使用cd指令。

cd C:WindowsMicrosoft.NETFrameworkv2.0.50727

2. 接著便可以使用aspnet_regiis.exe創建一個Rsa密鑰容器。密鑰容器分用戶級別和計算機級別兩種情況,由於使用用戶級別密鑰沒什麼益處,一般使用計算機級別既可。

aspnet_regiis -pc "MyKeys" -exp

3. 創建密鑰容器後,還需要設置密鑰容器的訪問許可權,下面的命令授予NETWORK SERVICE 帳戶對計算機級別的 「MyKeys」 RSA 密鑰容器的訪問許可權。msdn上有一個aspx程序會展示你的asp.net程序的用戶標誌,不過本人實際執行pa指令後會報錯。

aspnet_regiis -pa "MyKeys" "NT AUTHORITYNETWORK SERVICE"

4. 在Web.Config文件中加上如下配置節點,MyProvider為你的保護程序名稱,可隨意指定。keyContainerName為前面設置的密鑰容器名稱,useMachineContainer為true表示使用計算機級別密鑰,為false表示使用使用用戶級密鑰。

這段配置節不要像msdn那樣直接放在configure配置節點下面,這樣會報錯,建議放在你需要加密節點的後面。

5 .下面的指令將對指定路徑下的config文件節點進行加密,如果配置文件中還有session的sql連接字元串,也可以對sessionState節點進行加密。

aspnet_regiis -pef "connectionStrings" "D:WebApp" -prov "MyProvider"

aspnet_regiis -pef "system.web/sessionState" "D:WebApp" -prov "MyProvider"

加密後的connectionStrings節點如下所示,此時仍可訪問ASP.NET應用程序。








Rsa Key


X3XoBfbo/h9QUeVUV8A1EGMM0NQuBnhfuC/iV1e7CCmGaiRt9ogmICenTK8VAmGfhufPzWFu5UUHSiO/6BIvYPEO5WoWlj3h5/sUQmRj6NsAJOnrnYHEjta4oQb4XajxazWcf3HUeWR0mG4wDCiUfTZaRIRmXkGgfbxewpsKJ5k=




suqFgGjGFaon62YNI2VM5SQymcf4yyAku9fWQuvgClj1bfqixK9kIs9IE0I0m2u4gLbF+y0xPharfcOFJpXHDwHoaCrNQsxsutqiXquX67bYcJeYaMz5ja9ebqAtQvKIiZ/kHGvFIPXSCg5HiW/GGQwaf3FESVEsOaSAJZ3JJk9MlkkwDd6LepgtcCVjLnEK0lOeEFznrngizFFZWAsYjh5UCF5lNxNxf/IBwtznsfiFi2tV1F4sx9HkJEEryf5MEtu1RAA/wqarMvn7dlXhpGconpNPXA1IGlTmaZ/S1bR/FsO39skgHrs+OHsDMbJrI5ZO4TXXbK/DD86GPzu9JXrVKNVImzzW0V8aMc2HcVNClPsMwwgGaH6PNhE0xkjV6YH77XcLdVsKibvnwMlO/4kjGKoNXaSkFBoAEgprzi8=


如果需要解密,可以執行下面這條指令aspnet_regiis -pdf "connectionStrings" "D:WebApp"



6. 導出密鑰容器,密鑰信息將被存儲在導出的xml文件中,pri表示將公鑰和私鑰一起導出。

aspnet_regiis -px "MyKeys" "D:/MyKeys.xml" -pri

7. 有了這個xml文件,就相當於有了密鑰容器,導出密鑰容器後可以對密鑰容器進行刪除,刪除指令如下。

aspnet_regiis -pz "MyKeys"

8. 刪除密鑰容器後,如果前面你沒有對Config文件進行解密,那麼運行ASP.NET程序將會直接報錯。

在本人實際操作中發現,如果對正在運行的ASP.NET應用程序的Web.Config文件進行加密,加密後立即刪除密鑰,此時點擊運行(不調試)仍可正常訪問。這表明Rsa解密操作在內存中執行,只有重新生成解決方案或調試(會執行生成操作)後,訪問才會報錯。

9. 現在可以將加密後的config文件和導出的MyKeys.xml一起複制到伺服器上,此時運行網站將會直接報錯,需執行下面的導入指令。

aspnet_regiis -pi "MyKeys" "D:/MyKeys.xml"

導入後,在本機訪問ASP.NET網站會發現仍然報錯,提示無法open Provider。這個坑最終在網上找到解決方法,如下面指令所示,需要為應用程序池設置對密鑰容器的訪問許可權。

aspnet_regiis -pa "MyKeys" "IIS APPPOOLMyWeb" -full

自此整個流程已結束,可以將上面這些指令封裝成2個批處理程序,一個是密鑰製作bat,一個是導入bat,如下所示。

@echo on
cd C:WindowsMicrosoft.NETFrameworkv2.0.50727

::設置config地址,config文件要在E: est下面
set configAddress="E: est"

::創建RSA密鑰容器
aspnet_regiis -pc "MyKeys" -exp

::設置密鑰容器訪問許可權
aspnet_regiis -pa "MyKeys" "NT AUTHORITYNETWORK SERVICE"

::加密
aspnet_regiis -pef "connectionStrings" "D:WebApp" -prov "MyProvider"

aspnet_regiis -pef "system.web/sessionState" "D:WebApp" -prov "MyProvider"

::導出
aspnet_regiis -px "MyKeys" "D:/MyKeys.xml" -pri

::刪除密鑰容器
aspnet_regiis -pz "MyKeys"

pause

@echo on
cd C:WindowsMicrosoft.NETFrameworkv2.0.50727

::刪除舊的密鑰容器
aspnet_regiis -pz "MyKeys"

::導入新的密鑰容器
aspnet_regiis -pi "MyKeys" "D:/MyKeys.xml"

::設置應用程序池的訪問許可權
aspnet_regiis -pa "MyKeys" "IIS APPPOOLMyWeb" -full

pause

在寫完這2個bat後,我想起前面的解密指令aspnet_regiis -pdf "connectionStrings" "D:WebApp",它只需要提供節點名稱和路徑。也就是說,如果攻擊者能夠在被攻擊的伺服器上執行cmd指令,那麼他就可以對config進行解密。這個問題如有前輩有更好的解決方式,歡迎您指導留言。

如果當初微軟編寫這個指令解析方法時,加上一個key的參數。那麼即使攻擊者能夠執行cmd指令,由於不知道key的名稱,所以仍然無法對config進行解密。

聲明:本文原創發表於博客園,作者為方小白,如有錯誤歡迎指出。本文未經作者許可不許轉載,否則視為侵權。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

Android使用OKHTTP解析JSON數據

TAG:達人科技 |

您可能感興趣

快速搭建CentOS+ASP.NET Core環境支持WebSocket
Linux部署Nginx+Mysql+PHP+PHPMyAdmin4環境
在SAP雲平台的CloudFoundry環境下消費ABAP On-Premise OData服務
Python3+Selenium3 Windows下環境搭建
使用 Visual Studio Code 搭建 C/C+開發和調試環境
Appium Android For Mac OS 搭建環境
Eclipse JSP/Servlet 環境搭建
Docker環境下搭建DNS LVS(keepAlived) OpenResty伺服器簡易集群
Cloud Native 環境
Ubuntu18.04LTS下搭建Web環境暨安裝Moodle平台
阿里雲伺服器Centos7.4搭建LNMP環境 WordPress安裝
Ubuntu Linux環境下shadowsocks-qt5的安裝與配置
Reality Blender讓您將周圍環境帶入VR
Win10+RTX2080環境搭建:tensorflow、mxnet、pytorch、caffe
終極環境下的保障丨686 GLCR GORE-TEX? SMARTY? 3-in-1 Weapon雪服
AliveinVR允許多個用戶在VR環境中控制Ableton Live
「具備環境降噪功能」 Audio Technica ATH-SR50BT無線耳罩耳機
JMeter+Ant+Jenkins+SVN 介面自動化環境搭建
AR環境監測工具Clean A/R獲Unity for Humanity 2019挑戰賽最高獎
ubuntu16.04通過Chrome搭建Postman環境