.NET Framework 中的受保護配置提供程序:web
DpapiProtectedConfigurationProvider。使用 Windows 數據保護 API (DPAPI) 對數據進行加密和解密。算法
RsaProtectedConfigurationProvider。使用 RSA 加密算法對數據進行加密和解密。c#
這兩種提供程序均可以對數據進行強加密。可是,若是計劃在多臺服務器(Web 場)上使用相同的加密配置文件,則只有經過RsaProtectedConfigurationProvider 才能導出加密密鑰,並將其導入其餘服務器。固然,也能夠經過 .NET Framework,也能夠自行定義受保護配置提供程序。windows
建立一個名爲 SampleKeys 的 RSA 密鑰容器,該容器是可導出的計算機級密鑰容器。api
aspnet_regiis -pc "SampleKeys"–exp服務器
注:Aspnet_regiis.exe 工具位於 %windows%\Microsoft.NET\Framework\versionNumber 文件夾中。app
默認狀況下,RSA 密鑰容器受到所在服務器上的 NTFS 訪問控制列表 (ACL) 的嚴密保護。必須首先向 ASP.NET 應用程序的進程標識授予對該 RSA 密鑰容器的讀取訪問權限,而後 ASP.NET 才能使用 RSA 密鑰容器。ide
下面的命令向 Windows Server 2003 NETWORK SERVICE 賬戶授予對名爲 SampleKeys 的計算機級 RSA 密鑰容器的讀取訪問權限:工具
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"加密
下面的命令將名爲 SampleKeys 的計算機級 RSA 密鑰容器導出到名爲 keys.xml 的文件中幷包括了私鑰信息。
aspnet_regiis -px "SampleKeys" "c:\keys.xml" -pri
下面的命令從名爲 keys.xml 的文件中導入名爲 SampleKeys 的計算機級 RSA 密鑰容器:
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
下面的命令刪除名爲 SampleKeys 的計算機級 RSA 密鑰容器。
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
2.1 發佈站點到IIS服務器。這裏部署名爲ebuy的站點。
2.2 授予對 RSA 加密密鑰的讀取權限。其中,經過System.Security.Principal.WindowsIdentity.GetCurrent().Name能夠獲取當前的登陸用戶。
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
或
aspnet_regiis -pa "SampleKeys" "IIS APPPOOL\AppPoolName"。
2.3 web.config中增長受保護配置提供程序節點。
<configProtectedData defaultProvider="SampleProvider"> <providers> <add name="SampleProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="SampleKeys" useMachineContainer="true" /> </providers> </configProtectedData>
2.4 加密指定配置節點。
下面的命令將使用SampleProvider受保護配置提供程序爲站點ebuy的web.config中的connectionStrings節點加密。
aspnet_regiis -pe "connectionStrings" -site "ebuy" -app "/" -prov "SampleProvider"
加密後connectionStrings節點內容以下:
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings>
2.5 後續
下面的命令將使用SampleProvider受保護配置提供程序爲站點ebuy的web.config中的connectionStrings節點解密。
aspnet_regiis -pd "connectionStrings" -site "ebuy" -app "/"