Использование DPAPI/ProtectedData в среде веб-фермы с помощью магазина пользователей

Мне было интересно, если кто-нибудь успешно использовал DPAPI с магазином пользователя в среде веб-фермы?

Поскольку наше приложение недавно конвертировано из 1.1 в приложение ASP.NET, мы используем настраиваемую оболочку, которая напрямую вызывает методы CryptUnprotect . Но это должно быть таким же, как метод ProtectedData </​​code>, доступный в рамках 2.0.

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

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

Проблема заключается в том, что информация, зашифрованная на одной машине, не может быть расшифрована на другой, это не с ошибкой win32:

'Недопустимый ключ для использования в указанном состоянии.

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

Если это проблема, как другие используют DPAPI с пользовательским хранилищем в среде веб-фермы?

3
Привет, вы получили ответ на это? У меня та же проблема.
добавлено автор user6535, источник

3 ответы

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

Вы должны «установить» ключ на каждый сервер как часть процесса развертывания. Сценарий установки должен запускаться под идентификатором AppPool и хранить зашифрованный ключ либо в файле app.config, либо в реестре.

Зашифрованные данные могут быть сохранены в центральном репозитории/базе данных, так что к ним могут быть доступны все серверы фермы. Чтобы расшифровать данные, веб-приложение будет извлекать зашифрованный ключ из того места, где он был установлен, использовать DPAPI для его дешифрования, а затем использовать результат для дешифрования данных, поступающих из центрального репозитория.

Недостатком является то, что ключ открытого текста может существовать на локальном диске в течение короткого времени во время первоначального процесса установки, где он может быть подвержен операционным сотрудникам. Вы можете добавить дополнительный уровень шифрования, например, с помощью web.config machineKey, если это вызывает беспокойство.

8
добавлено
Это печально, потому что одним из преимуществ DPAPI является то, что он автоматически истекает через главный ключ каждые 3 месяца, но может расшифровать ранее зашифрованные данные. msdn.microsoft.com/en-us/library/ms995355.aspx Quote: «Это истечение позволяет злоумышленнику скомпрометировать один MasterKey и получить доступ ко всем защищенным данным пользователя». Используя свой собственный ключ, если он скомпрометирован, все ваши данные открыты.
добавлено автор ToddK, источник
Это немного устарело, но я считаю, что вы все равно сможете «увидеть» ключ, даже если он содержится в файле web.config и зашифрован с помощью aspnet_regiis . Ваш подход - это то, что большинство людей ищут, поскольку в ASP.NET или BCL нет подобного механизма из коробки.
добавлено автор CodeMonkeyKing, источник

Я только что видел это. Существует способ, которым вы можете выполнить эту работу, и убедиться, что машины в ферме находятся в домене и использовать учетную запись домена для шифрования и дешифрования данных (т. Е. Запускать приложение под учетной записью домена)

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

надеюсь, это поможет!

2
добавлено

The Microsoft poster is wrong. http://support.microsoft.com/default.aspx?scid=kb;en-us;309408#6

«Чтобы DPAPI работал правильно, когда он использует перемещаемые профили, пользователь домена должен быть зарегистрирован только на одном компьютере в домене. Если пользователь хочет выполнить вход на другой компьютер, находящийся в домене, пользователь должен выйти из системы первый компьютер, прежде чем пользователь войдет во второй компьютер. Если пользователь одновременно регистрируется на нескольких компьютерах, вероятно, DPAPI не сможет правильно дешифровать существующие зашифрованные данные ».

Похоже, что DPAPI не будет работать в настройках фермы. Я думаю, что это довольно большой надзор со стороны Microsoft и делает DPAPI практически бесполезным для большинства корпоративных приложений.

1
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)