aspnet_regiis шифрует веб-конфигурацию с использованием собственного провайдера - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь зашифровать строку подключения, используя

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

Это дало мне зашифрованную красивую зашифрованную строку

Однако его можно легко расшифровать, запустив

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

В этом случае это бесполезно.

Мое требование - просто зашифровать строку подключения, и только я могу расшифровать ее (но не любые другие пользователи, имеющие доступ к серверу или учетной записи)

Найдено, что по умолчанию aspnet_regiis использует DPAPI для получения KEY

А с помощью нестандартного провайдера можно добиться того, чего я хотел

Тогда я попробовал

создать пользовательский ключ

aspnet_regiis -pc "myKey" -exp

предоставить его в пул приложений iis

 aspnet_regiis -pa "IIS AppPool\DPool"

зашифровать его

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

после этого строки соединения правильно шифруются.

Однако я обнаружил, что невозможно удалить зависимость между ключом пользовательского провайдера и 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 не смог расшифровать connectionString, запустив -pdf, и в то же время IIS может правильно прочитать строку подключения?

...