使用ASP.NET保護配置時,如何使用公鑰加密配置?ASP.NET受保護的配置 - 如何使用公鑰加密?
我可以導出公鑰文件。然後我想使用這個公鑰來加密另一臺服務器上的配置文件,以便以後部署。但是,我無法弄清楚如何讓aspnet_regiis使用導出的公鑰。
基本上,我試圖只將公鑰導入容器,然後加密它。但是,當我這樣做時,不是使用現有密鑰進行加密,而是創建一個全新的密鑰對,覆蓋現有的公鑰。在下面的腳本中,如果將每個複製的文件重新命名爲connections.config,並嘗試解密它們,則第一個(connectionstring_server.encrypted)將失敗,而第二個(connectionstring_build.encrypted)將成功),證明一個新的密鑰對被創建。
下面是一個說明我已經想盡了辦法一個批處理文件(編輯:這只是測試ASPNET_REGIIS能力的例子我對它的實際使用情況會很明顯,略有不同。):
REM delete container in case it already exists
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pz "MyKeys"
REM create container
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "MyKeys"
REM export key
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -px "MyKeys" "publicKey.xml"
REM encrypt file
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" . -prov "MyProvider"
REM copy encrypted file for later comparison
copy connections.config connectionstring_server.encrypted
pause
REM decrypt file
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pdf "connectionStrings" .
REM delete continer
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pz "MyKeys"
REM import public key
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pi "MyKeys" publicKey.xml
REM encrypt file with just public key - THIS DOES NOT WORK CORRECTLY, it creates a new keypair
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" . -prov "MyProvider"
REM copy back encrypted file
copy connections.config connectionstring_build.encrypted
pause
REM decrypt file
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pdf "connectionStrings" .
這裏是一個樣本的web.config
<?xml version="1.0"?>
<configuration>
<configProtectedData>
<providers>
<add name="MyProvider" keyContainerName="MyKeys" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" useMachineContainer="true" />
</providers>
</configProtectedData>
<connectionStrings configSource="connections.config" />
</configuration>
以及相應的connections.config:
<connectionStrings>
<add name="SomConnectionName" connectionString="Data Source=somedatasource; Initial Catalog=somedatabase; Integrated Security=SSPI; Persist Security Info=False;" providerName="System.Data.SqlClient" />
</connectionStrings>
編輯: 下面建議的答案,我也可以導出私鑰。這確實可以使加密工作,但我不應該需要私鑰進行加密。我想要做的就是將私鑰放在將使用配置文件的服務器上,並將公鑰存儲在更易訪問的位置。無法做到這一點只是aspnet_regiis的限制嗎?