資安
IIS 的網站會有一個檔案 web.config,通常裡面會放一些設定或是機密資料,例如資料庫連線字串,甚至包含帳號密碼。
為了避免這些資訊被竊取,理想的情況是使用另一個程式將字串加密,有許多教學或開發人員會分享自己開發的加解密程式,雖然安全性高,但管理上較不方便,比方說
ASP.NET IIS 註冊工具 (Aspnet_regiis.exe) 是微軟提供的小程式,他能針對 web.config 內的連線字串加密或解密,即使是加密狀態,同一台電腦的IIS網站可正常讀取不受影響,但直接把web.config 拿到其它電腦時將無法使用,可以避免帳號密碼等敏感資訊外洩
提醒
能做到拿去其他電腦無法使用是因為加密金鑰綁在作業系統底層,因此記得移轉時要解密再移轉,或是整台作業系統一起備份喔
aspnet_regiis 這個程式可以在 Windows資料夾內Microsoft.NET目錄的Framework64目錄中找到,例如以下路徑
C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe
而微軟的 Visual Studio本身也有內建 aspnet_regiis,以下採用 Visual Studio 2019預設安裝路徑位為範例,先用系統管理員的權限開cmd,然後執行下面這個bat,就能使用 aspnet_regiis 了
在管理員權限的 cmd 介面輸入以下指令
aspnet_regiis -pef connectionStrings D:\web -prov "RsaProtectedConfigurationProvider"
執行後的結果如下
C:\Windows\Microsoft.NET\Framework64\v2.0.50727>
aspnet_regiis -pef appSettings D:\web -prov "RsaProtectedConfigurationProvider"
正在加密組態區段...
成功!
加密後 web.config 會像這樣
指令中的第一個參數 -pef connectionStrings ,代表將 connectionStrings 這個區塊加密,總共有4個區塊可以加密,請依照自己的敏感資訊躲在哪一塊自己更改
這個指令預設會加密 D:\web\ 這個路徑的 web.config 這個檔案,如果想要特別指定其他的檔名,也可以將上面那一串改寫 D:\web\another.config
後面的 -prov "RsaProtectedConfigurationProvider" 則是指使用 Rsa 的演算法進行加密保護
這個演算法是 .NET Framework 隨附的,有這兩個可以選擇
前面加密的時候是使用系統管理員權限,還要設定讓網站應用程式執行的時候也有讀取權限,這樣程式運作時才能自己解密,指令如下
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
注意 "NT AUTHORITY\NETWORK SERVICE" 是IIS預設的帳號,如果網站應用程式有特別指定別的使用者,那這一段要換成其他帳號,這樣網站運作的時候才能正常運作
如果未來需要修改加密的內容,可以利用這個指令將檔案解密
aspnet_regiis -pdf "connectionStrings" "D:\web"