Реклама:

■ шифрование паролей с помощью провайдера Membership.

Для всех этих операций требуется машинный ключ ASP.NET. Он генерируется во время первого запуска ASP.NET и сохраняется в реестре (HKCU\Software\Microsoft ASP.NET\AuloGenKey). Ho умолчанию каждое приложение на сервере имеет собственный уникальный ключ, который формируется на основе главного ключа. Машинный ключ конфигурируется в элементе <machineKey> со следующими настройками по умолчанию.

<rnachineKey

validâtionKey="AutoGenerate. IsolateApps" dec ryptionKey="Au !oGene rate, Isolât eApps" validation^"SHAГ decryption="Auto"

/>

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

■ Совместное использование билетов аутентификации Forms приложениями (например, сценариями предъявления пароля или групповыми Web-сценариями). Все приложения должны иметь возможность расшифровать и подтвердить билет. (Подробнее я опишу эти сценарии в главе 5.) То же относится к данным ViewState в так называемых фермах Web.

■ Элемент <machineKey> используется как хранилище для ключей ваших собственных процедур шифрования. Применение динамических ключей в такой ситуации не обеспечит надежности. В случае перемещения приложения на другой компьютер или в виртуальный каталог вы получаете новый ключ (и теряете старый). Это происходит из-за того, что провайдер Membership ASP.NET SQL позволяет шифровать пароли только тогда, когда выполнена конфигурация фиксированного машинного ключа.

Для того чтобы задать ключи вручную, нужно создать новые случайные числа и закодировать их в десятеричном формате. Структура ASP.NET поддерживает алгоритмы SH AI и MD5, предназначенные для обеспечения зашиты целостности данных, а также алгоритмы для шифрования ЛЕС и 3DES. Рекомендуется использовать SHA1 и A ES. Следующая программа генерирует случайные ключи и копирует в буфер фрагмент XML <machineKey>. После этого вы можете вставить данный фрагмент непосредственно в файл web.config.

Генерирование машинного ключа

using System;

using System.Security.Cryptography; using System.Text: using System.Windows.Forms;

class GenerateMacnineKey (

static RNGCryptoServiceProvider s.rng ■

new RNGCryptoServiceProvider(); static StringBuilder so = new StringBuilder();

const int .validationKeyLangth = 64;

// Используем 24 байта для 3DES и 16 или 32 байта для AES const int _decryptionKeyLength = 16;

[STAThread]

static void Hain(string[] args) <

sb.Append("<machineKey validationKey='");

_byteToHex(_createKey(_validationKeyLength));

sb.AppendLine();

sb.Append С" decryptionKey-'"):

_byteToHex(_createKey(_decryptionKeyLength));

Sb. AppenrJLine();

sb.Append*" validation3'SHA1' decryption3'AES' />");

Console. WriteLine(sb.ToStringO);

С1i pboa rd.SetText(sb.ToSt r ing(), Text Data Fo rmat.Text);

}

static byte[] _createKey(int cb) <

byte[] randomData = new byte[cb]; s_rng.GetBytes(randomOata); return randornData;


⇐ Предыдущая страница| |Следующая страница ⇒