2010-10-04 7 views
30

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

CryptographicException

Padding is invalid and cannot be removed.

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

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

Попробуйте разместить на http://serverfault.com/ – TimS

+2

@TimS - ок. Я просто вычислил SO b/c из web.config с .NET, но я собираюсь перевести его соответствующим образом. Благодарю. –

+0

Np, просто может получиться больше ответа там. – TimS

ответ

37

Это должно ответить:

How To: Configure MachineKey in ASP.NET 2.0 - Web Farm Deployment Considerations

Короче говоря, чтобы установить ключ машины обратитесь по следующей ссылке: Setting Up a Machine Key - Orchard Documentation.

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

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

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

+0

Если это не сработает, удалите 'validation =" SHA1 "decryption =" AES "' из вышеуказанной строки кода, тогда он отлично работает. – John

6

Убедитесь, чтобы узнать из padding oracle asp.net vulnerability, что только что произошло (вы применили патч, не так ли? ...) и используйте protected sections to encrypt the machine key и любую другую чувствительную конфигурацию.

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

Чтобы создать его, просто как связанная статья в ответе Дэвида.

+0

@Mark рад помочь, upvote;) – eglasius

13

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

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

Полные подробности можно увидеть @Easiest way to generate MachineKey – Tips and tricks: ASP.NET, IIS and .NET development…

 Смежные вопросы

  • Нет связанных вопросов^_^