Добавление сопоставлений "многие к одному"<>

Общие сведения

Элемент <add> элемента добавляет уникальные <manyToOneMappings> сопоставления сертификатов клиента в коллекцию сопоставлений "многие к одному".

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

Существует два разных метода доступа, которые можно включить для правил "многие к одному": разрешить или запретить. Эти параметры позволяют создавать правила, которые будут принимать группы сертификатов клиентов, которым будет разрешен доступ к сайту, при этом запрещая доступ к другим группам сертификатов на основе различных критериев. Например, можно создать правило, разрешающее доступ ко всем сотрудникам Contoso в подразделении отдела управления персоналом и запрещающее доступ сотрудникам в подразделении Отдела продаж.

Примечание

Сопоставления сертификатов "многие к одному" отличаются от сопоставлений сертификатов "один к одному ", которые сопоставляют отдельные клиентские сертификаты с отдельными учетными записями пользователей.

Совместимость

Версия Примечания
IIS 10.0 Элемент <add> не был изменен в IIS 10.0.
IIS 8,5 Элемент <add> не был изменен в IIS 8.5.
IIS 8,0 Элемент <add> не был изменен в IIS 8.0.
IIS 7,5 Элемент <add> не был изменен в IIS 7.5.
IIS 7.0 Элемент <add> элемента появился <manyToOneMappings> в IIS 7.0.
IIS 6,0 Элемент <manyToOneMappings> заменяет объект метабазы IIsCertMapper IIS 6.0.

Настройка

Элемент <iisClientCertificateMappingAuthentication> недоступен при установке iis 7 и более поздних версий по умолчанию. Чтобы установить его, выполните следующие действия.

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
  4. На странице Роли сервера разверните узлы Веб-сервер (IIS),Веб-сервер, Безопасность, а затем выберите Проверка подлинности для сопоставления сертификатов клиента IIS. Щелкните Далее.
    Изображение развернутой области .
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, Веб-службы, Безопасность, а затем выберите Проверка подлинности для сопоставления сертификатов клиента IIS.
    Снимок экрана: развернута область
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку Пуск, выберите Администрирование, а затем диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел Роли и выберите Веб-сервер (IIS).
  3. На панели Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.
  4. На странице Выбор служб ролеймастера добавления служб ролей выберите Iis Client Certificate Mapping Authentication (Проверка подлинности сопоставления сертификатов клиента IIS) и нажмите кнопку Далее.
    Изображение страницы
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку Пуск, а затем панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, выберите Iis Client Certificate Mapping Authentication (Проверка подлинности на основе сопоставления сертификатов клиента IIS) и нажмите кнопку ОК.
    Снимок экрана: развернутая область служб IIS и выделена проверка подлинности для сопоставления сертификатов IS.

Инструкции

Отсутствует пользовательский интерфейс для настройки проверки подлинности сопоставления сертификатов клиента IIS для IIS 7. Примеры программной настройки проверки подлинности для сопоставления сертификатов клиента IIS см. в разделе Примеры кода этого документа.

Конфигурация

Атрибуты

Атрибут Описание
Описание Необязательный строковый атрибут.

Указывает описание этого сопоставления "один ко многим".
enabled Дополнительный логический атрибут.

Указывает, включено ли это сопоставление "один ко многим".

Значение по умолчанию — true.
name Обязательный строковый атрибут.

Указывает имя этого сопоставления "один ко многим".
password Необязательный строковый атрибут.

Указывает пароль учетной записи, используемой для проверки подлинности клиентов, соответствующих этому правилу.

Примечание: Чтобы избежать сохранения незашифрованных строк паролей в файлах конфигурации, всегда используйте AppCmd.exe или диспетчер IIS для ввода паролей. При использовании этих средств управления строки паролей будут автоматически зашифрованы перед записью в XML-файлы конфигурации. Это обеспечивает лучшую защиту паролей, чем хранение незашифрованных паролей.
permissionMode Необязательный атрибут перечисления.

Атрибут permissionMode может быть одним из следующих возможных значений. Значение по умолчанию — Allow.
Значение Описание
Allow Указывает, что клиентам с соответствующим сертификатом клиента должно быть разрешено разрешение на проверку подлинности.

Числовое значение равно 1.
Deny Указывает, что клиентам с соответствующим сертификатом клиента должно быть отказано в разрешении на проверку подлинности.

Числовое значение равно 2.
username Необязательный строковый атрибут.

Указывает имя пользователя учетной записи, используемой для проверки подлинности клиентов, соответствующих этому правилу.

Дочерние элементы

Элемент Описание
rules Необязательный элемент.

Задает критерии для сопоставления сертификатов клиентов с iis, чтобы многие клиенты могли использовать один сертификат.

Образец конфигурации

Следующий пример конфигурации выполняет следующие действия для веб-сайта по умолчанию:

  • Включает проверку подлинности сопоставления сертификатов клиента IIS с помощью сопоставления сертификатов "многие к одному".
  • Создает правило сопоставления сертификатов "многие к одному" для учетной записи пользователя на основе поля организации в теме сертификата клиента, соответствующего Contoso.
  • Настраивает для сайта требование SSL и согласование сертификатов клиента.
<location path="Default Web Site">
   <system.webServer>
      <security>
         <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <iisClientCertificateMappingAuthentication enabled="true"
                  manyToOneCertificateMappingsEnabled="true">
               <manyToOneMappings>
                  <add name="Contoso Employees"
                        enabled="true"
                        permissionMode="Allow"
                        userName="Username"
                        password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
                     <rules>
                        <add certificateField="Subject"
                           certificateSubField="O"
                           matchCriteria="Contoso"
                           compareCaseSensitive="true" />
                     </rules>
                  </add>
               </manyToOneMappings>
            </iisClientCertificateMappingAuthentication>
         </authentication>
         <access sslFlags="Ssl, SslNegotiateCert" />
      </security>
   </system.webServer>
</location>

Пример кода

В следующих примерах кода выполняются следующие действия для веб-сайта по умолчанию:

  • Включите проверку подлинности для сопоставления сертификатов клиента IIS с помощью сопоставления сертификатов "многие к одному".
  • Создайте правило сопоставления сертификатов "многие к одному" для учетной записи пользователя на основе поля организации в теме сертификата клиента, соответствующего Contoso.
  • Настройте сайт так, чтобы он требовал SSL и согласовывал сертификаты клиента.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /enabled:"True" /manyToOneCertificateMappingsEnabled:"True" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='Contoso Employees',enabled='True',permissionMode='Allow',userName='Username',password='Password']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='Contoso Employees'].rules.[certificateField='Subject',certificateSubField='O',matchCriteria='Contoso',compareCaseSensitive='True']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert" /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection iisClientCertificateMappingAuthenticationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
         iisClientCertificateMappingAuthenticationSection["enabled"] = true;
         iisClientCertificateMappingAuthenticationSection["manyToOneCertificateMappingsEnabled"] = true;

         ConfigurationElementCollection manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("manyToOneMappings");
         ConfigurationElement addElement = manyToOneMappingsCollection.CreateElement("add");
         addElement["name"] = @"Contoso Employees";
         addElement["enabled"] = true;
         addElement["permissionMode"] = @"Allow";
         addElement["userName"] = @"Username";
         addElement["password"] = @"Password";

         ConfigurationElementCollection rulesCollection = addElement.GetCollection("rules");
         ConfigurationElement addElement1 = rulesCollection.CreateElement("add");
         addElement1["certificateField"] = @"Subject";
         addElement1["certificateSubField"] = @"O";
         addElement1["matchCriteria"] = @"Contoso";
         addElement1["compareCaseSensitive"] = true;
         rulesCollection.Add(addElement1);
         manyToOneMappingsCollection.Add(addElement);

         ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
         accessSection["sslFlags"] = @"Ssl, SslNegotiateCert";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim iisClientCertificateMappingAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site")
      iisClientCertificateMappingAuthenticationSection("enabled") = True
      iisClientCertificateMappingAuthenticationSection("manyToOneCertificateMappingsEnabled") = True

      Dim manyToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("manyToOneMappings")
      Dim addElement As ConfigurationElement = manyToOneMappingsCollection.CreateElement("add")
      addElement("name") = "Contoso Employees"
      addElement("enabled") = True
      addElement("permissionMode") = "Allow"
      addElement("userName") = "Username"
      addElement("password") = "Password"

      Dim rulesCollection As ConfigurationElementCollection = addElement.GetCollection("rules")
      Dim addElement1 As ConfigurationElement = rulesCollection.CreateElement("add")
      addElement1("certificateField") = "Subject"
      addElement1("certificateSubField") = "O"
      addElement1("matchCriteria") = "Contoso"
      addElement1("compareCaseSensitive") = True
      rulesCollection.Add(addElement1)
      manyToOneMappingsCollection.Add(addElement)

      Dim accessSection As ConfigurationSection = config.GetSection("system.webServer/security/access", "Default Web Site")
      accessSection("sslFlags") = "Ssl, SslNegotiateCert"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = true;
iisClientCertificateMappingAuthenticationSection.Properties.Item("manyToOneCertificateMappingsEnabled").Value = true;

var manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("manyToOneMappings").Collection;
var addElement = manyToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso Employees";
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("permissionMode").Value = "Allow";
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";

var rulesCollection = addElement.ChildElements.Item("rules").Collection;
var addElement1 = rulesCollection.CreateNewElement("add");
addElement1.Properties.Item("certificateField").Value = "Subject";
addElement1.Properties.Item("certificateSubField").Value = "O";
addElement1.Properties.Item("matchCriteria").Value = "Contoso";
addElement1.Properties.Item("compareCaseSensitive").Value = true;
rulesCollection.AddElement(addElement1);
manyToOneMappingsCollection.AddElement(addElement);

var accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site");
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = True
iisClientCertificateMappingAuthenticationSection.Properties.Item("manyToOneCertificateMappingsEnabled").Value = True

Set manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("manyToOneMappings").Collection
Set addElement = manyToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso Employees"
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("permissionMode").Value = "Allow"
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"

Set rulesCollection = addElement.ChildElements.Item("rules").Collection
Set addElement1 = rulesCollection.CreateNewElement("add")
addElement1.Properties.Item("certificateField").Value = "Subject"
addElement1.Properties.Item("certificateSubField").Value = "O"
addElement1.Properties.Item("matchCriteria").Value = "Contoso"
addElement1.Properties.Item("compareCaseSensitive").Value = True
rulesCollection.AddElement(addElement1)
manyToOneMappingsCollection.AddElement(addElement)

Set accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site")
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert"

adminManager.CommitChanges()