Поделиться через


Iis Client Certificate Mapping Authentication <iisClientCertificateMappingAuthentication>

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

Элемент <iisClientCertificateMappingAuthentication><authentication> элемента задает параметры проверки подлинности для сопоставления сертификатов клиента с помощью IIS.

Существует два разных метода сопоставления сертификатов клиента с помощью СЛУЖБ IIS.

  • Сопоставления "один к одному " — эти сопоставления сопоставляют отдельные клиентские сертификаты с отдельными учетными записями пользователей на основе "один к одному"; каждый сертификат клиента сопоставляется с учетной записью пользователя.
  • Сопоставления "многие к одному " — эти сопоставления сопоставляют несколько сертификатов с учетной записью пользователя на основе подполей в сертификатах клиента.

Примечание

Проверка подлинности на основе сопоставления сертификатов клиента с помощью IIS отличается от сопоставления сертификатов клиента с помощью Active Directory следующими способами:

  • Проверка подлинности на основе сопоставления сертификатов клиента с помощью Active Directory . Этот метод проверки подлинности требует, чтобы сервер IIS 7 и клиентский компьютер были членами домена Active Directory, а учетные записи пользователей хранятся в Active Directory. Этот метод проверки подлинности на основе сопоставления сертификатов клиента снижает производительность из-за кругового пути к серверу Active Directory.
  • Проверка подлинности на основе сопоставления сертификатов клиента IIS — этот метод проверки подлинности не требует Active Directory и поэтому работает с автономными серверами. Этот метод проверки подлинности на основе сопоставления сертификатов клиента повышает производительность, но для создания сопоставлений требует большей конфигурации и доступа к сертификатам клиента.

Дополнительные сведения см. в статье Настройка проверки подлинности в IIS 7.0 на веб-сайте Microsoft TechNet.

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

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

Настройка

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

Windows Server 2012 или Windows Server 2012 R2

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

Windows 8 или Windows 8.1

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

Windows Server 2008 или Windows Server 2008 R2

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

Windows Vista или Windows 7

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

Инструкции

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

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

Элемент <iisClientCertificateMappingAuthentication><authentication> элемента можно настроить на уровне сервера и сайта.

Атрибуты

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

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

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

Значение по умолчанию — false.
logonMethod Необязательный атрибут перечисления.

Атрибут logonMethod может иметь одно из следующих возможных значений. (Дополнительные сведения об этих значениях см. в разделе LogonUser.)

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

Числовое значение равно 1.
ClearText Этот тип входа сохраняет имя и пароль в пакете проверки подлинности, что позволяет серверу устанавливать подключения к другим сетевым серверам при олицетворении клиента.

Числовое значение равно 3.
Interactive Этот тип входа предназначен для пользователей, которые будут использовать компьютер в интерактивном режиме.

Числовое значение равно 0.
Network Этот тип входа предназначен для высокопроизводительных серверов для проверки подлинности паролей в виде открытого текста. Учетные данные не кэшируются для этого типа входа.

Числовое значение равно 2.
manyToOneCertificateMappingsEnabled Дополнительный логический атрибут.

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

Значение по умолчанию — true.
oneToOneCertificateMappingsEnabled Дополнительный логический атрибут.

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

Значение по умолчанию — true.

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

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

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

Задает сопоставления сертификатов клиента "один к одному".

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

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

  • Включает проверку подлинности для сопоставления сертификатов клиента 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 с использованием сопоставления сертификатов "один к одному" для веб-сайта по умолчанию, создает сопоставление сертификатов singe "один к одному" для учетной записи пользователя и настраивает сайт на требование SSL и согласование сертификатов клиента.

<location path="Default Web Site">
   <system.webServer>
      <security>
         <access sslFlags="Ssl, SslNegotiateCert" />
         <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <iisClientCertificateMappingAuthentication enabled="true"
                  oneToOneCertificateMappingsEnabled="true">
               <oneToOneMappings>
                  <add enabled="true"
                     userName="administrator"
                     password="[enc:57686f6120447564652c2049495320526f636b73:enc]"
                     certificate="Base64-Encoded-Certificate-Data" />
               </oneToOneMappings>
            </iisClientCertificateMappingAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

Получение строки в кодировке Base-64 из сертификата клиента

Примечание

Чтобы получить данные сертификата в кодировке Base-64 для всех примеров, приведенных в этом разделе, можно экспортировать сертификат, выполнив следующие действия.

  1. Нажмите кнопку Пуск, а затем — Выполнить.

  2. Введите MMC и нажмите кнопку ОК.

  3. Когда откроется консоль управления (Майкрософт), щелкните Файл, а затем — Добавить и удалить оснастки.

  4. В диалоговом окне Добавление и удаление оснасток :

    • Выберите Сертификаты в списке доступных оснасток, а затем нажмите кнопку Добавить.
    • Выберите управление сертификатами для моей учетной записи пользователя, а затем нажмите кнопку Готово.
    • Чтобы закрыть диалоговое окно, нажмите кнопку ОК .
  5. В консоли управления (Майкрософт) выполните следующие действия.

    • Разверните узлы Сертификаты — текущий пользователь, Затем Личные и Сертификаты.
    • В списке сертификатов щелкните правой кнопкой мыши сертификат, который требуется экспортировать, а затем выберите пункт Все задачи и экспорт.
  6. При открытии мастера экспорта сертификатов :

    • Щелкните Далее.
    • Выберите Нет, не экспортировать закрытый ключ, а затем нажмите кнопку Далее.
    • Выберите X.509 9 в кодировке Base-64 (. CER) для формата экспорта, а затем нажмите кнопку Далее.
    • Сохраните сертификат на рабочем столе как MyCertificate.cer, а затем нажмите кнопку Далее.
    • Нажмите кнопку Готово; Должно появиться диалоговое окно с сообщением об успешном выполнении экспорта.
  7. Закройте консоль управления (MMC) Microsoft .

  8. Откройте файл MyCertificate.cer , экспортируемый с помощью Блокнота Windows:

    • Удалите "-----BEGIN CERTIFICATE-----" в начале текста.
    • Удалите "-----END CERTIFICATE-----" в конце текста.
    • Сцепить все строки в одну строку текста— это данные сертификата в кодировке Base-64, которые будут использоваться для всех примеров в этом разделе.

Пример кода

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

  • Включите проверку подлинности для сопоставления сертификатов клиента 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()

В следующих примерах кода для веб-сайта по умолчанию используется проверка подлинности сопоставления сертификатов клиента IIS с использованием сопоставления сертификатов "один к одному" для учетной записи пользователя, а также настройка сайта на требование SSL и согласование клиентских сертификатов.

Примечание

Чтобы получить данные сертификата в кодировке Base-64 для приведенных ниже примеров кода, можно экспортировать сертификат, выполнив действия, описанные в разделе Сведения о конфигурации этого документа.

AppCmd.exe

Примечание

Из-за символов в строках сертификата, которые не могут быть проанализированы AppCmd.exe, не следует использовать AppCmd.exe для настройки сопоставлений сертификатов IIS "один к одному".

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["oneToOneCertificateMappingsEnabled"] = true;

         ConfigurationElementCollection oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
         ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
         addElement["enabled"] = true;
         addElement["userName"] = @"Username";
         addElement["password"] = @"Password";
         addElement["certificate"] = @"Base-64-Encoded-Certificate-Data";
         oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled") = True

      Dim oneToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings")
      Dim addElement As ConfigurationElement = oneToOneMappingsCollection.CreateElement("add")
      addElement("enabled") = True
      addElement("userName") = "Username"
      addElement("password") = "Password"
      addElement("certificate") = "Base-64-Encoded-Certificate-Data"
      oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled").Value = true;

var oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection;
var addElement = oneToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data";
oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled").Value = True

Set oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection
Set addElement = oneToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data"
oneToOneMappingsCollection.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()