我们想要加密部署到服务器的所有 Web 应用程序配置文件。我们更愿意将其作为构建过程中的一个步骤,并将预加密的文件包含在 MSI 中。
这意味着我们的构建服务器(加密器)和生产服务器(解密器)需要相同的密钥。所以我现在正在尝试做一个非常基本的测试。在 MachineA 上加密 Web.Config - 在 MachineB 上解密。这是迄今为止我尝试测试的内容
在我的本地电脑上创建一个新的 RSA 密钥对容器。
aspnet_regiis -pc "MyContainer" -exp
向我和 NetworkService 用户授予 ACL 权限。
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>
我可以使用命令轻松地加密和解密此处的 appSettings 部分。他们成功加密和解密,并且加密部分在加密后标记有正确的提供程序(<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 上发现了几个类似的问题,但没有具体解决他们的问题。我是否在某个地方错过了一步。我假设my密钥设置有效,因为我可以本地加密/解密。我是否可能搞砸了关键导入或错过了同事机器上的某些步骤。任何帮助表示赞赏。