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'da (IIS) Yapılandırma Düzenleyicisi ö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üzenleyicisi özelliğinin kullanılması anlatılır.
Not
Bire Bir istemci sertifikası eşlemelerini yapılandırmak için Yapılandırma Düzenleyicisi'ni 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:
IIS sunucusuna IIS İstemci Sertifikası Eşleme modülünü yüklediniz.
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.
İstemcide yüklü bir istemci sertifikanız var.
IIS 7 Yönetim Paketi, IIS 7.0 sunucusuna yüklenir.
Not
Yapılandırma Düzenleyicisi, IIS 7.5'te varsayılan olarak gönderilir.
Yapılandırma Düzenleyicisi tarafından sertifika eşlemesini yapılandırma
IIS yöneticisini başlatın ve istemci sertifikası kimlik doğrulaması için yapılandırılacak web sitesini seçin.
Özellikler Görünümü'ndeYönetim bölümünün altında Yapılandırma Düzenleyicisi'ni seçin.
system.webServer/security/authentication/iisClientCertificateMappingAuthentication
Aşağıda gösterildiği gibi açılan kutuda adresine gidin: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üzenleyicisi aracılığıyla sağlanan kullanıcı arabirimidir.
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.
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:
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.
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.
Benzer şekilde, sertifikadaki Veren ve Konu alanlarına göre hesaplar için başka eşlemeleriniz olabilir.
sertifika eşlemesini APPCMD.exe göre yapılandırma
Şimdiye kadar gösterilen, yapılandırmayı kolayca ayarlamak için bir grafik arabirimi 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:
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. Bunlar Yapılandırma Düzenleyicisi'nin Betik Oluşturma özelliği kullanılarak oluşturuldu.
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();