aspnet_regiis使用自定义提供程序加密Webconfig

时间:2019-03-13 02:50:08

标签: .net aspnet-regiis.exe

我正在尝试使用

加密连接字符串
aspnet_regiis -pef "connectionStrings" "C:\Proj"

它给了我一个美丽的加密字符串

但是,可以通过运行轻松地对其进行解密

aspnet_regiis -pdf "connectionStrings" "C:\Proj"

在这种情况下,它没有用。

我的需求只是想加密连接字符串,只有我可以解密它(但没有其他有权访问服务器或帐户的ppls)

发现默认的aspnet_regiis使用DPAPI来获取密钥

使用自定义提供程序可以实现我想要的

然后我尝试了

创建自定义密钥

aspnet_regiis -pc "myKey" -exp

将其授予iis应用程序池

 aspnet_regiis -pa "IIS AppPool\DPool"

加密

aspnet_regiis -pef connectionStrings c:\project -prov "customProvider"

之后,connectionStrings已正确加密。

但是,我发现无法消除自定义提供程序密钥和web.config之间的依赖关系

用户可以在web.config中看到类似的内容

<configProtectedData>
        <providers>
        <add name="customProvider"
  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,&#xD;&#xA;        Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
  keyContainerName="myKey"
  useMachineContainer="true" />
        </providers>
    </configProtectedData>
    <connectionStrings configProtectionProvider="customProvider">
        <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>ICeYUc4dqh2XkxcQzB5VQc7egRcJfPLNOgoJTveUJlEvc67dzGUO13TYiAe/X1bKvouSfUUba4SXX981bhf26Z79e03ht8PciFBrcRCTRvsYYtcN4c8jRMoHYRcfd1bSGs7uWueR2+//SCZihwR8sfU6g8HTaSit7e0sxkzlIGE=</CipherValue>
                    </CipherData>
                </EncryptedKey>
            </KeyInfo>
            <CipherData>
                <CipherValue>TRrubEXUzzhqFXXhTt3hjsvjHPqxcJENNlYNkNBMSDEhzlowdV10r/2W7ln38DiZU4Jt0gYUcHKt/dBAM1Y0vNlqctKQMF0hD4VxK5E27D+uynyvUjcLIzCOTtSq4MLbiimGo0NC9rB7wax3Wxmlx6SPeGo6RLkvM2GyjfzwKx7mGqodV9rgX7O7nb+8YVCJdMJsckMUcyZDYbxINl+LmUjv3kJFtU3/3dV3s0pSZfNGURau8JQf4+UI/XMXQrHiU6fbfMdb5GEsEUkqHJh2foEbAfBVAz7F7vMtwVZ+Vvue7bOyFub8rGbmLOLifnSuEp8krJitTg7wQ9Dwdb6BxQ==</CipherValue>
            </CipherData>
        </EncryptedData>
    </connectionStrings>

在这种情况下,自定义密钥容器已暴露(我无法将其删除,否则网站也将无法访问解密连接字符串)

显然,每个人仍然可以执行命令来解密连接字符串

aspnet_regiis -pdf connectionStrings "C:\Proj" 

这意味着即使我应用了自定义RSA密钥容器提供程序,问题仍然无法解决。

有什么我想念的吗? 我是否真的可以删除某些依赖项,以便ppls无法通过运行-pdf来解密connectionString,并且同时IIS可以正确读取connectionstring?

0 个答案:

没有答案