Добавление machineKey в web.config на сайтах веб-ферм - PullRequest
43 голосов
/ 04 октября 2010

Мы (на самом деле наш ИТ-партнер) недавно изменили некоторые DNS для имеющегося у нас веб-сайта, чтобы два рабочих сервера имели циклическое переключение DNS между ними. До этого переключения у нас не было проблем с файлами WebResource.axd. Поскольку при переключении, когда мы нажимаем на общедоступный общедоступный URL, мы получаем ошибку:

CryptographicException

Заполнение недействительно и не может быть удалено.

Когда мы попадаем на конкретные серверы, они нормально загружаются. Я исследовал проблему, и, похоже, поскольку они совместно используют активы между двумя серверами, нам необходимо иметь согласованные machineKey в web.config для каждого сервера, чтобы они могли последовательно шифровать и дешифровать между двумя серверами. Мои вопросы:

  1. Могу ли я сгенерировать machineKey с помощью инструмента на сервере или мне нужно написать код для этого?
  2. Мне просто нужно добавить machineKey к web.config на каждом сервере или вы думаете, что мне нужно будет сделать что-нибудь еще, чтобы два сервера работали вместе? (Оба web.config в настоящее время не имеют machineKey)

Ответы [ 3 ]

54 голосов
/ 04 октября 2010

На это должен ответить:

Как: настроить MachineKey в ASP.NET 2.0 - Вопросы развертывания веб-фермы

Особенности развертывания веб-фермы

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

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

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"       

decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>

Если вы хотите изолировать свое приложение от других приложений на один и тот же сервер, поместите в файл Web.config для каждого приложение на каждом сервере в ферме. Убедитесь, что вы используете отдельные значения ключей для каждого приложения, но дублируют ключи каждого приложения на всех серверах фермы.

Короче говоря, чтобы настроить ключ машины, перейдите по следующей ссылке: Настройка ключа машины - документация для сада .

Настройка ключа машины с помощью диспетчера IIS

Если у вас есть доступ к консоли управления IIS для сервера, на котором Orchard установлен, это самый простой способ настройки ключа машины.

Запустите консоль управления, а затем выберите веб-сайт. Открой конфигурация машинного ключа: The IIS web site configuration panel

Панель управления клавиш машины имеет следующие настройки:

The machine key configuration panel

Снимите флажок «Автоматически генерировать во время выполнения» для проверки. ключ и ключ дешифрования.

Нажмите «Создать ключи» в разделе «Действия» на правой стороне панели.

Нажмите «Применить».

и добавьте следующую строку в файл web.config во всех тегах webservers в system.web, если он не существует.

<machineKey  
    validationKey="21F0SAMPLEKEY9C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
                   AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
    decryptionKey="ABAASAMPLEKEY56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
    validation="SHA1"
    decryption="AES"
/>

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

15 голосов
/ 16 июля 2014

Если вы используете IIS 7.5 или более позднюю версию, вы можете сгенерировать ключ компьютера из IIS и сохранить его непосредственно в своем файле web.config. В рамках веб-фермы вы просто копируете новый файл web.config на каждый сервер.

  1. Открыть диспетчер IIS.
  2. Если вам нужно сгенерировать и сохранить MachineKey для всех ваших приложений, выберите имя сервера на левой панели, в этом случае вы будете изменять корневой файл web.config (который находится в папке .NET Framework). Если вы намереваетесь создать MachineKey для определенного веб-сайта / приложения, выберите веб-сайт / приложение на левой панели. В этом случае вы будете изменять файл web.config вашего приложения.
  3. Дважды щелкните значок ключа машины в настройках ASP.NET на средней панели:
  4. Раздел MachineKey будет считан из вашего файла конфигурации и показан в пользовательском интерфейсе. Если вы не настроили конкретный MachineKey, и он генерируется автоматически, вы увидите следующие параметры:
  5. Теперь вы можете нажать кнопку «Создать ключи» на правой панели, чтобы сгенерировать случайные MachineKeys. При нажатии кнопки «Применить» все настройки будут сохранены в файле web.config.

Полную информацию можно увидеть @ Самый простой способ создания MachineKey - Советы и рекомендации: разработка ASP.NET, IIS и .NET…

6 голосов
/ 04 октября 2010

Обязательно изучите уязвимость padding oracle asp.net , которая только что произошла (вы применили исправление, верно? ...) и используйте защищенные разделы для шифрования ключа машины и любая другая конфиденциальная конфигурация.

Альтернативный вариант - установить его на уровне машины web.config, чтобы его даже не было в папке веб-сайта.

Чтобы создать его, сделайте этокак ссылка на статью в ответе Дэвида.

...