Хранение зашифрованного пароля в файле App.Config - PullRequest
0 голосов
/ 25 января 2019

Я создал ручной App.Config для исполняемого файла, запускаемого из планировщика задач Windows. Я надеялся сохранить зашифрованный логон и пароль внутри, но DPAPI шифрует с помощью символов, которые XML считает незаконными. CDATA не маскирует их, и мне интересно, пропускаю ли я что-нибудь, что позволило бы XML-файлам App.Config содержать их.

Я пробовал CDATA. Я пытался избежать нелегальных персонажей. Я попытался преобразовать символы в их эквиваленты быка.

Имя пользователя: jas189

Зашифровано выглядит так: «ff» \ nCbp: Á!

Пароль пользователя - пароль

Зашифровано выглядит так: I @! ³J. \ "1ùÊö¬

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

1 Ответ

0 голосов
/ 26 января 2019

Создайте специальный раздел конфигурации в вашем файле конфигурации:

<configSections>
   <section name="localSecrets" type="System.Configuration.NameValueFileSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>

Затем добавьте свой пароль к элементу в этом новом разделе:

<localSecrets>
   <add key="Password" value="Your Password Goes here"/>
</localSecrets>

Зашифруйте этот раздел с помощью стандартного механизма зашифрованных разделов конфигурации (используя aspnet_regiis или какой-либо другой инструмент, который вы загружаете или создаете (я не большой поклонник aspnet_regiis; он работает, но он действительно хочет, чтобы вы шифровали разделы connectionStrings) в файлах web.config)).

Затем получите данные (в основном) обычным способом:

 var secretSection = ConfigurationManager.GetSection("localSecrets") as NameValueCollection;
 string secret;
 if (secretSection != null)
 {
     secret = secretSection["Password"]?.ToString();
 }

Это будет работать одинаково независимо от того, зашифрован ли раздел конфигурации или нет. Таким образом, все остальное в вашем конфигурационном файле находится в открытом виде, единственный шифрованный текст отображается в вашем разделе конфигурации.

Как и любой другой зашифрованный раздел конфигурации, вам нужно создать, совместно использовать и правильно ACL контейнер ключей RSA, чтобы это работало. В документах достаточно ясно, как это сделать.

...