Aracılığıyla paylaş


IIS 7.0 ve 7.5 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'de (IIS) Yapılandırma Düzenleyici özelliğinin nasıl kullanılacağı açıklanır.

Orijinal ürün sürümü: Internet Information Services 7.0, 7.5
Özgün KB numarası: 2026113

Giriş

Çoka Bir İstemci Sertifikası eşlemesi, istemci sertifikası kullanıcı kimlik doğrulaması için kullanıldığında son kullanıcıyı bir Windows hesabıyla ilişkilendirmek için IIS tarafından kullanılır. Kullanıcının oturumu IIS tarafından eşlenen bu Windows hesabının bağlamı altı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 6.0'da kullanıcılar, IIS Yöneticisi Kullanıcı Arabirimi aracılığıyla Çoka Bir istemci sertifikası eşlemesini yapılandırma seçeneğine sahipti. IIS 7.0 ve 7.5'te bu arabirim, Bire Bir veya Çoka Bir eşlemeleri için mevcut değildir. Bu makalede, Çoka Bir istemci sertifikası eşlemelerini yapılandırmak için IIS'nin Yapılandırma Düzenleyici özelliğinin kullanılması anlatılır.

Not

Bire Bir istemci sertifikası eşlemelerini yapılandırmak için Yapılandırma Düzenleyici kullanma hakkında bilgi için bkz. Bire Bir İstemci Sertifikası Eşlemelerini Yapılandırma.

IIS 7.0/7.5 şeması

Bu, IIS 7.0 ve IIS 7.5'teki IIS İstemci Sertifika Eşlemesi kimlik doğrulaması özelliğinin şemasıdı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 eden 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.

  4. IIS 7 Yönetim Paketi, IIS 7.0 sunucusuna yüklenir.

    Not

    Yapılandırma Düzenleyici, IIS 7.5'te varsayılan olarak gönderilir.

Sertifika eşlemesini Yapılandırma Düzenleyici göre 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ü'ndeYönetim bölümünün altında Yapılandırma Düzenleyici'ı seçin.

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

  3. system.webServer/security/authentication/iisClientCertificateMappingAuthentication Aşağıda gösterildiği gibi açılan kutuda adresine 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örürsünüz. Bu, tüm eşleme yapılandırmalarını ayarlayabileceğiniz Yapılandırma Düzenleyici aracılığıyla sağlanan kullanıcı arabirimidir.

    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.
    • Eşlemeleri yapılandırmak için yeni bir pencere başlatmak için manyToOneMappings seçeneğini belirleyin ve üç nokta düğmesini seçin.
  5. Bu yeni pencerenin altında yeni bir öğe eklemek için öğesini seçin. Aşağıda gösterildiği gibi pencere içinden ö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 eklemek için ekran görüntüsü 1.

    Birden çok desen eklemek için ekran görüntüsü 2.

    Birden çok desen eklemek için ekran görüntüsü 3.

Bu örnek görüntülerde, sertifikayı eşleme 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 resimde, 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 göre yapılandırma

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

Yapılandırma Düzenleyici ayrıca bu komutları el ile çalıştırma seçeneği sunar ve kullanıcı arabiriminin içinden bunu başarmak 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.

Bunlar, sertifika eşlemesini yapılandırmak için yukarıdaki adımların aynısını gerçekleştirmeye yönelik kod parçacıklarıdır. Yapılandırma Düzenleyici 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();