Шифрование строки подключения - позволяет другим машинам расшифровывать - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь разработать приложение Winform C#, которое подключается к базе данных SQL.

Мой файл конфигурации выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="myConnNameString"
providerName="System.Data.SqlClient"
connectionString="Data Source=myServerName;Initial 
Catalog=myDefDatabase;User=myUser;Password=myPassword;Application Name=myAppName" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Мне удалось успешно зашифруйте этот файл с помощью:

aspnet_regiis.exe -pef "connectionStrings" path_to_config_file

Но как только я это сделаю, я больше не могу нормально запускать свое приложение. Теперь я могу сделать это только запустив его в качестве администратора

Cannot decrypt with provider RsaProtectedConfigurationProvider.
Cannot open key container RSA

Теперь, насколько я понимаю, это: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff650304 (v = pandp.10)

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

Как разрешить другим машинам дешифровать этот файл? Мое приложение хранится в одном каталоге на удаленном сетевом диске, к которому каждый имеет доступ. Приложение запускается на их компьютерах с помощью ярлыка.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Стоит также отметить, что не каждый человек в нашей компании имеет разрешение локального администратора.

1 Ответ

0 голосов
/ 16 марта 2020

Хорошо, вот что я сделал на данный момент:

Создан экспортируемый контейнер ключей уровня машины RSA

aspnet_regiis -pc "MyKeys" -exp

Теперь я предоставляю доступ на чтение к этому соединению для NT Учетная запись AUTHORITY \ NETWORK SERVICE (что бы это ни было)

aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"

Затем я зашифровал свой файл конфигурации с помощью моего собственного провайдера

aspnet_regiis -pef "connectionStrings" "path_to_config_file" - 
prov "myCustomProvider"

Файл конфигурации выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configProtectedData>
<providers>
  <add name="myCustomProvider"
       type="System.Configuration.RsaProtectedConfigurationProvider, 
                System.Configuration, Version=2.0.0.0,
                Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                processorArchitecture=MSIL"
                keyContainerName="MyKeys"
                useMachineContainer="true" />
</providers>
</configProtectedData>
<configSections>
</configSections>
<connectionStrings>
    <add name="myConnectionString"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=myServerName;Initial 
    Catalog=myDefDatabase;User=myUser;Password=myPassword;Application 
    Name=myAppName" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Затем я экспортирую свой контейнер ключей RSA в файл:

-px "MyKeys" "C:\Users\name.surname\Desktop\test\test.xml" -pri

И куда мне теперь импортировать этот xml файл? Каждый ли пользователь моей программы должен выполнять c эту строку?

aspnet_regiis -pi "MyKeys" test.xml

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

Невозможно расшифровать с помощью провайдера myCustomProvider. Сообщение об ошибке провайдера. Произошла ошибка при декодировании завершения OAEP

Любая помощь будет очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...