将预加密的配置文件部署到生产环境

时间:2012-03-15 14:16:08

标签: asp.net .net encryption web-config aspnet-regiis.exe

我们希望加密我们部署到服务器的所有Web应用程序配置文件。我们更愿意将此作为构建过程中的一个步骤,并在MSI中包含预加密文件。

这意味着我们的构建服务器(加密器)和生产服务器(解密器)需要相同的密钥。所以我现在正试着做一个非常基本的测试。加密MachineA上的Web.Config - 在MachineB上解密它。这是我到目前为止尝试测试的内容

在我的本地电脑上创建一个新的RSA密钥对容器。

aspnet_regiis -pc "MyContainer" -exp

向我提供ACL权限& NetworkService用户。

aspnet_regiis -pa "MyContainer" "MyDomain\My.Account"
aspnet_regiis -pa "MyContainer" "NT AUTHORITY\NETWORK SERVICE"

将该密钥对导出到xml文件

aspnet_regiis -px "MyContainer" C:\MyContainer.xml -pri

将该文件复制到另一台电脑&导入它

aspnet_regiis -pi "MyContainer" C:\MyContainer.xml

给我的同事&他的机器对新导入的文件的NetworkService用户权限

aspnet_regiis -pa "MyContainer" "MyDomain\My.Colleague"
aspnet_regiis -pa "MyContainer" "NT AUTHORITY\NETWORK SERVICE"

接下来,我在本地计算机上创建了一个非常简单的web.config。

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="SecretKey" value="ValueWeWantToHide" />
    </appSettings>
    <configProtectedData>
        <providers>
            <add name="SampleProvider"
                 type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                 keyContainerName="MyContainer"
                 useMachineContainer="true" />
        </providers>
    </configProtectedData>
</configuration>

我可以很容易地加密&amp;使用命令解密appSettings部分。他们加密&amp;成功解密,加密(<appSettings configProtectionProvider="RsaProtectedConfigurationProvider">

后,加密部分用正确的提供者标记
aspnet_regiis -pef appSettings D:\testapp
and
aspnet_regiis -pdf appSettings D:\testapp

但是,当我将加密的web.config复制到我的同事PC并尝试使用上述命令解密时,解密失败。它给出了一个非常无益的错误

Failed to decrypt using provider 'RSAProtectedConfigurationProvider'. Error message from provider: Bad Data

现在我被卡住了。我在SO上发现了几个类似的问题,但没有具体解决他们的问题。我错过了某个地方的一步吗?我假设我的密钥设置有效,因为我可以进行本地加密/解密。我是否有可能翘起关键导入或错过了我的同事机器上的一些步骤。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

您正在使用计算机上的默认提供程序进行加密/删除(每台计算机都有所不同)。

您需要指定提供者:

aspnet_regiis -pef appSettings D:\testapp -prov "SampleProvider"

在你的同事机器上:

aspnet_regiis -pdf appSettings D:\testapp