我们希望加密我们部署到服务器的所有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上发现了几个类似的问题,但没有具体解决他们的问题。我错过了某个地方的一步吗?我假设我的密钥设置有效,因为我可以进行本地加密/解密。我是否有可能翘起关键导入或错过了我的同事机器上的一些步骤。任何帮助表示赞赏。
答案 0 :(得分:3)
您正在使用计算机上的默认提供程序进行加密/删除(每台计算机都有所不同)。
您需要指定提供者:
aspnet_regiis -pef appSettings D:\testapp -prov "SampleProvider"
在你的同事机器上:
aspnet_regiis -pdf appSettings D:\testapp