среда, 27 июня 2007 г.

Машинный ключ

Многократно обнаружил в логе ошибок следующее сообщение:

Padding is invalid and cannot be removed. at System.Security.Cryptography.RijndaelManagedTransform.DecryptData...

Размышляя о том, что бы это могло значить и зачем на сайте, где не используется https, может понадобиться шифрование, я отправился на поиски в google.

Истина, как обычно, была достаточно простой. Механизм ViewState использует шифрование. Использование network load balancer не гарантирует, что пользователь каждый раз будет попадать на один и тот же web-сервер. Поэтому для дешифрования ViewState может использоваться не тот ключ, что и вызовет приведенное в самом начале исключение.

Решается проблема достаточно просто, для этого нам и понадобится машинный ключ.

В Web.config в секции system.web надо добавить секцию machineKey. Тогда для шифрования на всех серверах в web-ферме будет использоваться один и тот же ключ.

Генератор ключей можно найти здесь. Более подробно можно почитать вот здесь (секция Web Farm Deployment Considerations).