Aracılığıyla paylaş


IIS için Çoka Bir istemci sertifikası eşlemelerini yapılandırma

Bu makalede, Çoka Bir istemci sertifikası eşlemelerini yapılandırmak için Microsoft Internet Information Services'teki (IIS) Yapılandırma Düzenleyicisi özelliğinin nasıl kullanılacağı açıklanır.

Özgün ürün sürümü: Internet Information Services
Özgün KB numarası: 2026113

Giriş

Çoka Bir İstemci Sertifikası eşlemesi, istemci sertifikası kullanıcı kimlik doğrulaması için kullanıldığında iis tarafından son kullanıcıyı bir Windows hesabıyla ilişkilendirmek için kullanılır. Kullanıcının oturumu IIS tarafından eşlenen bu Windows hesabı bağlamında yürütülür. Beklendiği gibi çalışmak için sertifikadan hesaba eşlemenin IIS'de doğru yapılandırıldığından emin olmanız gerekir.

IIS'nin geçerli sürümünde, BIRe Bir veya Çoka Bir sertifika eşlemeleri için IIS Yöneticisi Kullanıcı Arabirimi mevcut değildir. Bu makalede, Çoka Bir istemci sertifikası eşlemelerini yapılandırmak için IIS'nin Yapılandırma Düzenleyicisi özelliğinin kullanılması anlatılır.

Not

Yapılandırma Düzenleyicisi'ni kullanarak Bire Bir istemci sertifikası eşlemelerini yapılandırma hakkında bilgi için bkz . Bire Bir İstemci Sertifikası Eşlemelerini Yapılandırma.

IIS şeması

IIS'deki IIS İstemci Sertifika Eşlemesi kimlik doğrulaması özelliğinin şeması aşağıdadır:

<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
   <attribute name="enabled" type="bool" defaultValue="false" />
   <attribute name="manyToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
   ...
   <element name="manyToOneMappings">
     <collection addElement="add" clearElement="clear">
       <attribute name="name" type="string" required="true" isUniqueKey="true"
       validationType="nonEmptyString" />
       <attribute name="description" type="string" />
       <attribute name="enabled" type="bool" defaultValue="true"/>
       <attribute name="permissionMode" type="enum" defaultValue="Allow">
         <enum name="Allow" value="1"/>
         <enum name="Deny" value="2" />
       </attribute>
       <element name="rules">
         <collection addElement="add" clearElement="clear">
           <attribute name="certificateField" type="enum" required="true" isCombinedKey="true">
             <enum name="Subject" value="1" />
             <enum name="Issuer" value="2" />
           </attribute>
           <attribute name="certificateSubField" type="string" caseSensitive="true"
           required="true" isCombinedKey="true" />
           <attribute name="matchCriteria" type="string" caseSensitive="true"
           required="true" isCombinedKey="true" />
           <attribute name="compareCaseSensitive" type="bool" isCombinedKey="true" defaultValue="true" />
         </collection>
       </element>
       <attribute name="userName" type="string" validationType="nonEmptyString" />
       <attribute name="password" type="string" caseSensitive="true" encrypted="true"
       defaultValue="[enc:AesProvider::enc]" />
     </collection>
   </element>
   ...
</sectionSchema>

Önkoşullar

Bu kılavuz için gereken önkoşullar şunlardır:

  1. IIS sunucusuna IIS İstemci Sertifikası Eşleme modülünü yüklediniz.
  2. Bir web sitesi, Güvenli Yuva Katmanı (SSL) bağlantılarını kabul edebilen bir Köprü Metni Aktarım Protokolü Güvenli (HTTPS) bağlaması ile yapılandırılır.
  3. İstemcide yüklü bir istemci sertifikanız var.

Yapılandırma Düzenleyicisi tarafından sertifika eşlemesini yapılandırma

  1. IIS yöneticisini başlatın ve istemci sertifikası kimlik doğrulaması için yapılandırılacak web sitesini seçin.

  2. Özellikler Görünümü'nde Yönetim bölümünün altında Yapılandırma Düzenleyicisi'ni seçin.

    Özellikler Görünümünde Yönetim'in altında Yapılandırma Düzenleyicisi'ni seçin.

  3. system.webServer/security/authentication/iisClientCertificateMappingAuthentication Aşağıdaki görüntüde gösterildiği gibi açılan kutuya gidin:

    Kimlik doğrulaması altında iisClientCertificateMappingAuthentication öğesini seçin.

    Burada Çoka Bir veya Bire Bir sertifika eşlemelerini yapılandırmak için bir pencere göreceksiniz. Aşağıdaki kullanıcı arabirimi, tüm eşleme yapılandırmalarını ayarlayabileceğiniz Yapılandırma Düzenleyicisi aracılığıyla sağlanır.

    Tüm eşleme yapılandırmalarını ayarlamak için kullanılan pencerenin ekran görüntüsü.

  4. Bu grafik kullanıcı arabirimi (GUI) aracılığıyla özellikleri değiştirin.

    • Etkin ayarını True olarak ayarlayın.
    • manyToOneCertificateMappingsEnabled değerini True olarak ayarlayın.
    • ÇokOneMappings'i seçin ve üç nokta düğmesini seçerek eşlemeleri yapılandırmak için yeni bir pencere açın.
  5. Bu yeni pencerenin altında yeni bir öğe eklemek için öğesini seçin. Aşağıdaki görüntüde gösterildiği gibi pencere içindeki özellikleri değiştirebilirsiniz:

    Yeni bir öğenin özelliklerini değiştirmek için kullanılan pencerenin ekran görüntüsü.

  6. Kurallar için üç nokta düğmesini seçin. Bu seçenek, sertifika özelliklerine göre eşleştirme için birden çok desen ekleme seçeneği sunar.

    Birden çok desen eklemeye yönelik ekran görüntüsü 1.

    Birden çok desen eklemeye yönelik ekran görüntüsü 2.

    Birden çok desen eklemeye yönelik ekran görüntüsü 3.

Bu örnek görüntülerde, sertifikayı eşlemeye yönelik kurallar için iki giriş vardır.

İlk olarak, sertifikada Konu ve Veren alanları vardır. İkincisi, sertifikayı mydomain\testuser hesabıyla eşlemek için matchcriteria özelliği vardır.

Aşağıdaki görüntüde, belirli bir Windows hesabı için son eşleme gösterilmektedir. Gördüğünüz gibi, bu hesap için kurallar için iki giriş vardır.

Kurallar için iki girişi olan bir öğenin ekran görüntüsü.

Benzer şekilde, sertifikadaki Veren ve Konu alanlarına göre hesaplar için başka eşlemeleriniz de olabilir.

sertifika eşlemesini APPCMD.exe yapılandırma

Şimdiye kadar gösterilen, yapılandırmayı kolayca ayarlamak için bir grafik arabirim sağlayan Yapılandırma Düzenleyicisi kullanılarak elde edilmiştir. Komutları kullanarak APPCMD.exe aynı şeyi elde edebilirsiniz ve aslında Yapılandırma Düzenleyicisi arka planda aynı şeyi yapar ve bu ayarları ApplicationHost.config dosyasına ekler.

Yapılandırma Düzenleyicisi ayrıca bu komutları el ile çalıştırma seçeneği sunar ve bunu kullanıcı arabiriminin içinden gerçekleştirmek için betikleri oluşturur:

Komutları çalıştırmak için Betik Oluştur seçeneğini belirleyin.

Komut Dosyası İletişim Kutusu penceresinde komutları el ile çalıştırın.

Bu kod parçacıkları, sertifika eşlemesini yapılandırmak için aynı adımları gerçekleştirir. Bunlar, Yapılandırma Düzenleyicisi'nin Betik Oluşturma özelliği kullanılarak oluşturulmuştur.

AppCmd komutları

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='My 1st  Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='My 1st  Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef'].rules.[certificateField='Subject',certificateSubField='CN',matchCriteria='Test User']" /commit:apphost

C# kodu

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"] = @"My 1st  Mapping";
            addElement["description"] = @"1st User Mapping";
            addElement["userName"] = @"mydomain\testuser";
            addElement["password"] = @"abcdef";
            ConfigurationElementCollection rulesCollection = addElement.GetCollection("rules");
            ConfigurationElement addElement1 = rulesCollection.CreateElement("add");
            addElement1["certificateField"] = @"Subject";
            addElement1["certificateSubField"] = @"CN";
            addElement1["matchCriteria"] = @"Test User";
            rulesCollection.Add(addElement1);
            manyToOneMappingsCollection.Add(addElement);
            serverManager.CommitChanges();
        }
    }
}

Betik Oluşturma (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 = "My 1st  Mapping";
addElement.Properties.Item("description").Value = "1st User Mapping";
addElement.Properties.Item("userName").Value = "mydomain\\testuser";
addElement.Properties.Item("password").Value = "abcdef";
var rulesCollection = addElement.ChildElements.Item("rules").Collection;
var addElement1 = rulesCollection.CreateNewElement("add");
addElement1.Properties.Item("certificateField").Value = "Subject";
addElement1.Properties.Item("certificateSubField").Value = "CN";
addElement1.Properties.Item("matchCriteria").Value = "Test User";
rulesCollection.AddElement(addElement1);
manyToOneMappingsCollection.AddElement(addElement);
adminManager.CommitChanges();