Шаг 4. Настройка безопасности приложений
Кит Ньюман и Роберт Мак-Мюррей
На этом этапе создания веб-сайта ASP.NET будет выполняться настройка параметров безопасности, доступных в IIS. В следующих разделах рассматриваются общие параметры безопасности для приложений ASP.NET.
4.1. Изоляция веб-приложений
Для изоляции веб-сайтов и веб-приложений на сервере выполните следующие рекомендации.
- Используйте один пул приложений для каждого веб-сайта или веб-приложения.
- Ограничьте доступ к папкам и файлам сайта, разрешив его только удостоверению пула приложений.
- Настройте по отдельной временной папке ASP.NET для каждого сайта и предоставьте к ней доступ только удостоверению пула приложений.
- Убедитесь, что в каждом корневом каталоге сайта настроен ACL (список управления доступом), чтобы разрешать доступ только удостоверению пула приложений.
Если в пуле приложений имеется несколько приложений, рассмотрите возможность создания дополнительных пулов приложений и перемещения некоторых приложений в эти новые пулы.
Создание пула приложений
- Откройте диспетчер служб IIS.
- В области Подключения щелкните элемент Пулы приложений.
- В области Действия выберите команду Добавить пул носителей.
- В поле Имя введите уникальное имя для пула приложений.
- Выберите версию платформы .NET Framework и режим управляемого конвейера.
- Нажмите кнопку ОК.
Перемещение приложения в другой пул приложений
- Откройте диспетчер служб IIS.
- На странице Подключения выберите веб-сайт или веб-приложение для перемещения.
- В области Действия выберите пункт Основные параметры.
- В диалоговом окне Изменение сайта нажмите Выбрать, чтобы открыть диалоговое окно выбора пула приложений, а затем выберите нужный пул приложений в меню Пул приложений.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно выбора пула приложений, а затем нажмите кнопку ОК, чтобы закрыть меню Изменить сайт.
Добавление удостоверения пула приложений в ACL папки или файла
- Откройте проводник и перейдите к папке или файлу.
- Щелкните папку или файл правой кнопкой мыши и выберите в меню пункт Свойства.
- Перейдите на вкладку Безопасность и нажмите кнопку Правка.
- Нажмите Добавить, затем нажмите Расположения и выберите сервер в качестве расположения для поиска.
- В поле Введите имена выбираемых объектов введите IIS APPPOOL\Имя_пула_приложений, где Имя_пула_приложений — это удостоверение пула приложений.
- Нажмите кнопку ОК, еще раз нажмите ОК и третий раз нажмите ОК, чтобы закрыть диалоговые окна.
4.2. Уровни доверия .NET
В этом разделе описывается установка уровня доверия приложений с помощью пользовательского интерфейса диспетчера IIS или командной строки.
Установка уровня доверия с помощью пользовательского интерфейса
- Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять.
- В окне Просмотр возможностей, дважды щелкните элемент Уровни доверия .NET.
- На странице Уровни доверия .NET выберите уровень доверия в раскрывающемся списке Уровень доверия, а затем нажмите кнопку Применить в области Действия.
Установка уровня доверия с помощью командной строки
Для установки уровня доверия используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:trust /level:Full|High|Medium|Low|Minimal
Атрибут level использует одно из пяти значений, соответствующих предварительно настроенным файлам политики разграничения доступа кода. Например, чтобы задать уровень доверия Full
, введите в командной строке следующую команду и нажмите клавишу ВВОД:
appcmd set config /commit:WEBROOT /section:trust /level:Full
Примечание
При использовании Appcmd.exe для настройки элемента доверия на глобальном уровне в IIS 8 укажите /commit:WEBROOT
в команде , чтобы изменения конфигурации были внесены в корневой файл Web.config вместо ApplicationHost.config.
4.3. Проверка подлинности .NET
В разделе Планирование веб-сайта ASP.NET в IIS вы приняли решения о том, какой режим проверки подлинности подходит для вашего приложения.
Проверка подлинности с помощью форм ASP.NET
В этом разделе описывается настройка проверки подлинности с помощью форм ASP.NET в пользовательском интерфейсе диспетчера IIS или в командной строке.
Настройка проверки подлинности с помощью форм в пользовательском интерфейсе
- Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять.
- В окне Просмотр возможностей дважды щелкните элемент Проверка подлинности.
- На странице Проверка подлинности выберите Проверка подлинности с помощью форм.
- В области Действия нажмите Включить, чтобы использовать проверку подлинности с помощью форм с параметрами по умолчанию.
- В области Действия нажмите кнопку Правка.
- В диалоговом окне изменения параметров проверки подлинности с помощью форм в текстовом поле URL-адрес входа введите имя страницы для входа клиентов.
- В текстовом поле Время ожидания файла cookie проверки подлинности (в минутах) введите количество минут, которое вы хотите использовать для значения времени ожидания.
- В списке Режим выберите режим файлов cookie, который требуется использовать.
- В текстовом поле Имя введите имя файла cookie.
- В списке Режим защиты выберите режим защиты, который требуется использовать.
- Установите флажок Необходим протокол SSL.
- Установите флажок Увеличивать срок действия файла cookie при каждом запросе и нажмите кнопку ОК.
Настройка проверки подлинности с помощью форм в командной строке
Для включения проверки подлинности с помощью форм используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:None|Windows|Passport|Forms
По умолчанию IIS 8 задает mode
атрибуту Windows
значение , что отключает проверку подлинности с помощью форм. Если для атрибута задано значение Forms
, вы включите проверку подлинности с помощью форм. Например, чтобы включить проверку подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:Forms
Примечание
При использовании Appcmd.exe для настройки элемента проверки подлинности на глобальном уровне в IIS 8 укажите /commit:WEBROOT
в команде , чтобы изменения конфигурации были внесены в корневой файл Web.config вместо ApplicationHost.config.
Чтобы указать URL-адрес входа для проверки подлинности с помощью форм, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:string
Переменная forms.loginURL:string
— это имя страницы, на которой выполняется вход клиентов. Значение по умолчанию — Login.aspx. Например, чтобы задать URL-адрес входа для проверки подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:login.aspx
Примечание
При использовании Appcmd.exe для настройки элемента проверки подлинности на глобальном уровне в IIS 8 укажите /commit:WEBROOT
в команде , чтобы изменения конфигурации были внесены в корневой файл Web.config вместо ApplicationHost.config.
Чтобы указать время ожидания проверки подлинности для проверки подлинности с помощью форм, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:TimeSpan
Переменная forms.timeout:TimeSpan
— это время в минутах, когда истекает срок действия файла cookie, используемого для проверки подлинности. Значение по умолчанию составляет 30 минут. Например, чтобы указать время ожидания проверки подлинности для проверки подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:30
Примечание
При использовании Appcmd.exe для настройки элемента проверки подлинности на глобальном уровне в IIS 8 необходимо указать /commit:WEBROOT
в команде , чтобы изменения конфигурации были внесены в корневой файл Web.config вместо ApplicationHost.config.
Чтобы настроить имя файла cookie для проверки подлинности с помощью форм, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:string
Переменная forms.name:string
— это имя файла cookie, используемого для проверки подлинности с помощью форм. Значение по умолчанию — .ASPXAUTH. Например, чтобы настроить имя файла cookie для проверки подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:.ASPXUTH
Чтобы настроить режим файлов cookie для проверки подлинности с помощью форм, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseUri|UseCookies|AutoDetect|UseDeviceProfile
По умолчанию для объекта forms.cookieless
установлено значение UseDeviceProfile
. Например, чтобы настроить использование параметра "Использовать профиль устройства" в режиме файлов cookie для проверки подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseDeviceProfile
Чтобы настроить режим защиты файлов cookie для проверки подлинности с помощью форм, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All|None|Encryption|Validation
По умолчанию для объекта forms.protection
установлено значение All
. Например, чтобы настроить использование параметра "Шифрование и проверка" в режиме защиты файлов cookie для проверки подлинности с помощью форм, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All
Чтобы установить обязательное использование SSL для файла cookie проверки подлинности, используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true|false
По умолчанию для объекта forms.requireSSL
установлено значение false
. Если для этого атрибута задано значение true
, требуется SSL. Например, чтобы требовать SSL для файла cookie проверки подлинности, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true
Для кэширования часто запрашиваемого контента используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true|false
По умолчанию для объекта forms.slidingExpiration
установлено значение true
. Например, для кэширования часто запрашиваемого контента введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true
Проверка подлинности с помощью олицетворения ASP.NET
Настройка проверки подлинности с помощью олицетворения ASP.NET в пользовательском интерфейсе
- Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять.
- В окне Просмотр возможностей дважды щелкните элемент Проверка подлинности.
- На странице Проверка подлинности выберите Олицетворение ASP.NET.
- В области Действия нажмите Включить, чтобы использовать проверку подлинности с помощью олицетворения ASP.NET с параметрами по умолчанию.
- Дополнительно в области Действия можно нажать Правка, чтобы настроить субъект безопасности.
- В диалоговом окне изменения параметров олицетворения ASP.NET выберите либо конкретного пользователя, либо проверенного пользователя. В зависимости от этого выбора службы IIS будут использовать соответствующее удостоверение для контекста безопасности приложения ASP.NET. По умолчанию служба IIS 8 используется для олицетворения пользователя, прошедшего проверку подлинности.
- Нажмите кнопку ОК для завершения или перейдите к следующим дополнительным действиям по изменению удостоверения для олицетворения.
- Дополнительно нажмите кнопку Задать, чтобы изменить удостоверение конкретного пользователя.
- Чтобы создать новую учетную запись, которая будет использоваться в IIS для анонимного доступа, в диалоговом окне настройки учетных данных введите имя существующей учетной записи пользователя в поле Имя пользователя, пароль этой учетной записи в поле Пароль, и введите это же значение пароля в поле Подтверждение пароля.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно настройки учетных данных.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно изменения параметров олицетворения ASP.NET.
Настройка проверки подлинности с помощью олицетворения в командной строке
Для включения или отключения олицетворения используется следующий синтаксис.
appcmd set config /commit:WEBROOT /section:identity /impersonate:true|false
По умолчанию IIS задает impersonate
атрибуту false
значение , что отключает проверку подлинности ASP.NET олицетворения. Если для атрибута задано значение true
, вы включите проверку подлинности ASP.NET олицетворения. Например, чтобы включить проверку подлинности с помощью олицетворения ASP.NET, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:identity /impersonate:true
При необходимости можно задать учетную запись в IIS для олицетворения, используя следующий синтаксис.
appcmd set config /commit:WEBROOT /section:identity /userName:string /password:string
Переменная userName:string
— это учетная запись, использующаяся службами IIS для олицетворения, а переменная password:string
— это пароль. Например, чтобы использовать учетную запись с именем Moe в IIS для олицетворения, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config /commit:WEBROOT /section:identity /userName: Moe /password:pass@word1
Примечание
При использовании Appcmd.exe для настройки элемента удостоверения на глобальном уровне в IIS 8 укажите /commit:WEBROOT
в команде , чтобы изменения конфигурации были внесены в корневой файл Web.config вместо ApplicationHost.config.
4.4. Параметры машинных ключей
В этом разделе описывается создание машинных ключей для приложения ASP.NET с помощью пользовательского интерфейса диспетчера служб IIS.
Создание машинных ключей с помощью пользовательского интерфейса
- Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять.
- В окне Просмотр возможностей дважды щелкните элемент Машинный ключ.
- На странице машинного ключа выберите метод проверки в списке Метод проверки. Метод проверки по умолчанию — SHA1.
- Выберите метод шифрования в списке Метод шифрования. Метод шифрования по умолчанию — Автоматически.
- При необходимости настройте параметры для проверки и расшифровки.
- В области Действия выберите команду Создать ключи и нажмите кнопку Применить.
4.5. Взаимодействие по протоколу TLS/SSL
В этом разделе описывается настройка безопасности TLS/SSL для приложения.
После получения сертификата сервера из центра сертификации (ЦС) необходимо выполнить процедуры, описанные в следующих разделах.
Привязка SSL
В этом разделе описывается добавление привязки SSL на сайт с помощью пользовательского интерфейса диспетчера служб IIS или командной строки.
Добавление привязки SSL на сайт с помощью пользовательского интерфейса
- Откройте диспетчер служб IIS.
- В области Подключения разверните узел Сайты в дереве и щелкните сайт, для которого требуется добавить привязку.
- В области Действия щелкните элемент Привязки.
- В диалоговом окне Привязки сайта нажмите кнопку Добавить.
- В диалоговом окне добавления привязки сайта выберите в списке Тип значение https.
- В списке IP-адрес выберите пункт Все неназначенные (если не хотите использовать конкретный IP-адрес).
- В поле Порт введите номер порта (порт по умолчанию — 443).
- В поле Имя узла введите имя главного компьютера.
- Если требуется, чтобы несколько защищенных веб-сайтов обслуживались с использованием одного и того же IP-адреса, установите флажок Требовать указание имени сервера.
- В списке SSL-сертификат выберите сертификат для веб-сайта. Если сертификат не отображается в списке, нажмите кнопку Выбрать и найдите сертификат с помощью диалогового окна Выбор сертификата .
- Нажмите кнопку ОК.
Добавление привязки SSL на сайт с помощью командной строки
Для добавления привязки на сайт используется следующий синтаксис.
appcmd set site /site.name:string /+bindings.[protocol='string', bindingInformation='string']
Переменная site.name:string
— это имя сайта, на который требуется добавить привязку. Переменная protocol='string'
— это протокол, который вы хотите использовать, а переменная bindingInformation='string'
— это сочетание IP-адреса, порта и заголовка узла.
Например, чтобы настроить привязку HTTPS для всех IP-адресов на сайте с именем contoso в порте 443 без заголовка узла, введите в командной строке следующую команду и нажмите клавишу ВВОД:
appcmd set site /site.name:contoso /+bindings.[protocol='https', bindingInformation='*:443:']
Требование SSL для сайта
В этом разделе рассматривается требование привязки SSL для сайта с помощью пользовательского интерфейса диспетчера служб IIS или командной строки.
Требование SSL с помощью пользовательского интерфейса
Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять. Убедитесь, что находитесь на уровне сайта, приложения или каталога; параметры SSL не доступны на уровне сервера.
Примечание
Если требуется настроить SSL на уровне файла, перейдите в этот файл в режиме просмотра содержимого и выберите команду Переключиться в режим просмотра возможностей в области Действия.
В окне Просмотр возможностей дважды щелкните пункт Параметры SSL.
На странице параметров SSL выберите пункт Требовать SSL.
В области Действия нажмите кнопку Применить.
Требование SSL с помощью командной строки
Для требования SSL используется следующий синтаксис.
appcmd set config "site|URL" /section:access /sslFlags:Ssl /commit:APPHOST
Переменная site|URL
является сайтом, приложением, виртуальным каталогом или файлом, для которых требуется протокол SSL для IIS 8. Например, чтобы требовать SSL для веб-сайта по умолчанию, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl /commit:APPHOST
Чтобы требовать SSL для файла iisstart.htm на веб-сайте по умолчанию, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:Ssl /commit:APPHOST
Сертификаты клиента
Задание сертификатов клиентов с помощью пользовательского интерфейса
Откройте диспетчер IIS и перейдите к уровню, которым вы хотите управлять. Убедитесь, что находитесь на уровне сайта, приложения или каталога; параметры SSL не доступны на уровне сервера.
Примечание
Если требуется настроить SSL на уровне файла, перейдите в этот файл в режиме просмотра содержимого и выберите команду Переключиться в режим просмотра возможностей в области Действия.
В окне Просмотр возможностей дважды щелкните пункт Параметры SSL.
На странице параметров SSL при необходимости выберите Требовать SSL. SSL не требуется, если выбрано игнорировать или принимать сертификаты клиентов.
На странице параметров SSL в области Сертификаты клиентов используйте одну из следующих процедур.
- Выберите Игнорировать, если не нужно принимать сертификат клиента, даже если клиент его предоставляет.
- Выберите Принять , чтобы принять сертификаты клиента.
- Выберите Требовать, чтобы требовать сертификаты клиентов. Чтобы использовать параметр Требовать сертификаты клиентов, необходимо включить параметр Требовать SSL.
В области Действия нажмите кнопку Применить.
Задание сертификатов клиентов с помощью командной строки
Чтобы указать, следует ли использовать сертификаты клиентов, используется следующий синтаксис.
appcmd set config "site|URL" /section:access /sslFlags:Ssl|SslNegotiateCert|SslRequireCert /commit:APPHOST
Переменная site|URL
— это сайт, приложение, виртуальный каталог или файл, в которых iis должны включить сертификаты клиента. Например, чтобы принимать сертификаты клиентов для веб-сайта по умолчанию, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config "Default Web Site" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
Чтобы принимать сертификаты клиентов для файла iisstart.htm на веб-сайте по умолчанию, введите в командной строке следующую команду и нажмите клавишу ВВОД.
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
Можно указать одно или несколько значений атрибута sslFlags. Если требуется несколько значений, их нужно разделять запятой (,). Например чтобы указать требование и SSL-сертификата, и сертификата клиента на веб-сайте по умолчанию, введите в командной строке следующую команду и нажмите клавишу ВВОД:
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl,SslRequireCert /commit:APPHOST