Я пытаюсь зашифровать строку подключения, используя
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,
 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 может правильно прочитать строку подключения?