Служба Windows не может открыть контейнер ключа RSA

Немного фона:

У меня есть решение, которое состоит из:

  • Приложение IIS (ASP.NET)
  • Служба Windows

И приложение IIS, и служба Windows запускаются под одной и той же учетной записью домена. Они также подключаются к одной и той же базе данных.

Учетные данные для доступа к базе данных хранятся в общем файле конфигурации и шифруются с помощью инструмента aspnet_regiis.exe. Разрешение ACL предоставляет доступ на чтение к контейнеру ключей для учетной записи домена.

Веб-приложение может получить доступ к контейнеру ключей и расшифровать строку подключения.

Служба, с другой стороны, не может получить доступ к контейнеру ключей RSA. Я получаю сообщение об ошибке:

Непредвиденная ошибка при попытке подключения к базе данных; исключение: System.Configuration.ConfigurationErrorsException: не удалось расшифровать с помощью поставщика «RsaProtectedConfigurationProvider». Сообщение об ошибке от провайдера: Не удалось открыть контейнер ключа RSA. (C:\ApplicationDir\ConnectionSettings.config, строка 2) ---> System.Configuration.ConfigurationErrorsException: не удалось открыть контейнер ключа RSA.

Обходные пути:

  1. Добавьте учетную запись домена в группу администраторов (да!)
  2. Добавьте учетную запись домена в группу IIS_IUSRS.
  3. Измените запись разрешения для группы «Все». По умолчанию разрешение на чтение применяется к Только этой папке. Изменение этого значения на Эта папка, вложенные папки и файлы работает.
  4. Добавьте запись разрешения для учетной записи домена в папку MachineKeys.

Я склоняюсь ко второму варианту, но что здесь происходит?

Почему пул приложений может работать под указанной учетной записью домена, а не служба Windows, которая работает под той же учетной записью домена?

Является ли это ситуацией, когда при определенных обстоятельствах учетная запись домена не считается частью группы «Все»?

Как лучше всего поступить в этой ситуации?

Спасибо, Кевин




Ответы (1)


Таким образом, получается, что доступ для чтения должен быть предоставлен «NetFrameworkConfigurationKey» для учетной записи домена.

aspnet_regiis -pa "NetFrameworkConfigurationKey" "[DOMAIN_NAME]\[USER_ACCOUNT]"

Дополнительные сведения: http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.100).aspx

person kspence    schedule 20.11.2014
comment
СПАСИБО за добавление ответа, когда вы его нашли. У меня также была служба, которая не могла прочитать свой зашифрованный файл конфигурации, и предоставление доступа к этому ключевому контейнеру (а также к ключевому контейнеру, которым был зашифрован файл конфигурации) наконец позволило службе прочитать зашифрованный файл конфигурации во время работы под Учетная запись сетевой службы. - person Thorin; 23.06.2015