«Не удалось открыть контейнер ключа RSA» даже после разрешения ACL (для некоторых пользователей) - PullRequest
5 голосов
/ 17 февраля 2012

Мы получаем следующую ошибку (на сайте asp.net) при применении шифрования.

Сообщение об ошибке синтаксического анализатора: не удалось расшифровать с помощью поставщика 'RsaProtectedConfigurationProvider'.Сообщение об ошибке от поставщика: Не удалось открыть контейнер ключа RSA.

Примечание. Пожалуйста, следуйте приведенным ниже шагам, которым мы следовали.(Мы предоставили разрешение ACL для NT Authority \ Network Service на NetFrameworkConfigurationKey)

Примечание. Мы используем проверку подлинности Windows и олицетворение ASP.NET в IIS7 .Он работает в Windows Server 2008 .Доступ контролируется в зависимости от того, является ли пользователь частью разрешенной группы AD (которая будет указана в конфигурационном файле).

Интересно то, что эта ошибка возникает, когда пользователи группы group1 (из location1) получить доступ к нему.Когда пользователи группы 2 (из locatiob2) пытаются получить к ней доступ, ошибка не приходит.

Есть мысли о том, как ее исправить?

Мы выполнили следующие действияперечисленные ниже из нашего документа по развертыванию.

  1. Запустите командное окно в режиме администратора.(В Windows Server 2008 введите cmd и нажмите CTRL + SHIFT + ВВОД)
  2. Перейдите в папку C: \ Windows \ Microsoft.Net \ Framework \ v4.0.30319 \ с помощью команды изменения каталога (cd).
  3. Введите следующую команду, чтобы создать контейнер ключей RSA.aspnet_regiis -pc "NetFrameworkConfigurationKey" –exp
  4. Введите следующее (чтобы добавить ACL для доступа к контейнеру ключей RSA) и нажмите клавишу ввода aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority \ Network Service"
  5. Введите следующее (после замены выделенного текста на местоположение, в котором развернут сервис) и нажмите клавишу ввода, чтобы зашифровать строку соединений в Web.Config службы.aspnet_regiis.exe -pef "connectionStrings" "C: \ MyWCF \ ServiceName"
  6. Введите следующее (после замены выделенного текста местоположением, на котором размещен веб-сайт) и нажмите клавишу ВВОД, чтобы зашифровать строку соединений в веб-сайтеWeb.Config.aspnet_regiis.exe -pef "connectionStrings" "C: \ MyWeb \ WebsiteName"
  7. Введите следующее (после замены выделенного текста на местоположение, в котором доступен файл web.config для веб-сайта) и нажмите клавишу ввода, чтобызашифруйте значения sessionState в Web.Config веб-сайта.aspnet_regiis.exe -pef "system.web / sessionState" "C: \ MyWeb \ WebsiteName"
  8. Убедитесь, что строки подключения и значения SessionState зашифрованы.
  9. Проверьте следующие сведения в разделе configProtectedDataв Machine.Config.

• Убедитесь, что defaultProvider = "RsaProtectedConfigurationProvider"

• Убедитесь, что keyContainerName = "NetFrameworkConfigurationKey"

Примечание. Расположение по умолчанию для machine.config - C: \ WINDOWS\ Microsoft.NET \ Framework \ v4.0.30319 \ Config

Ответы [ 2 ]

10 голосов
/ 21 мая 2013

Ниже приведен подход, который я попробовал, но не включающий конфигурацию машины.

Примечание. Если место назначения находится в Windows Sever 2008, этапы шифрования должны выполняться в самой Windows Server 2008.

Выполнены указанные ниже коды на сервере A

Примечание: - Регистрация ключа

 cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
 aspnet_regiis.exe -pc "MyProjectKeys" -exp

Примечание: - Предоставление доступа только на сервере A

aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL\testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY\NETWORK"

Экспортированный файл XML, содержащий ключ RSA

aspnet_regiis.exe -px "MyProjectKeys" E:\wmapps\webroot\myservice\MyProjectKey.xml –pri

Добавлено следующее в web.config

<configProtectedData>
  <providers>
    <clear/>
<remove name="RSAProtectedConfigurationProvider" />
     <add name="RSAProtectedConfigurationProvider" keyContainerName="MyProjectKeys" 
    type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,&#xD;&#xA;                
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,&#xD;&#xA; processorArchitecture=MSIL"
          useMachineContainer="true" />
  </providers>
</configProtectedData>

Зашифрованные

aspnet_regiis -pef "connectionStrings" "E:\wmapps\webroot\myservice" -prov "RsaProtectedConfigurationProvider"

Скопировал зашифрованные файлы на B Server. Скопировал xml-файл ключа на B-сервер.

Создан командный файл со следующими командами и Выполнен (для регистрации ключей и предоставления доступа)

c:
cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe -pi "MyProjectKeys" E:\wmapps\webroot\myservice\MyProjectKey.xml
aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL\testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY\NETWORK"
5 голосов
/ 26 мая 2012

Если вы включили олицетворение, доступ к контейнеру ключей RSA будет осуществляться с использованием имени пользователя, обращающегося к приложению, а не сетевой службы.

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

...