Sertifikalarla çalışma

Windows Communication Foundation (WCF) güvenliğini programlamak için X.509 dijital sertifikaları genellikle istemcilerin ve sunucuların kimliğini doğrulamak, iletileri şifrelemek ve dijital olarak imzalamak için kullanılır. Bu konu, X.509 dijital sertifika özelliklerini ve WCF'de bunların nasıl kullanılacağını kısaca açıklar ve bu kavramları daha ayrıntılı açıklayan veya WCF ve sertifikalar kullanarak ortak görevlerin nasıl yerine getirildiğini gösteren konuların bağlantılarını içerir.

Kısaca, dijital sertifika, ortak anahtar şifrelemesi kullanarak elektronik işlemde yer alan her bir tarafın geçerliliğini doğrulayan ve doğrulayan dijital sertifikalardan, sertifika yetkililerinden ve diğer kayıt yetkililerinden oluşan bir sistem olan ortak anahtar altyapısının (PKI) bir parçasıdır. Sertifika yetkilisi sertifikaları verir ve her sertifikanın konu (sertifikanın verildiği varlık), geçerlilik tarihleri (sertifika geçerli olduğunda), veren (sertifikayı veren varlık) ve ortak anahtar gibi verileri içeren bir alan kümesi vardır. WCF'de bu özelliklerin her biri olarak Claimişlenir ve her talep iki türe ayrılır: kimlik ve hak. X.509 sertifikaları hakkında daha fazla bilgi için bkz . X.509 Ortak Anahtar Sertifikaları. WCF'deki Talepler ve Yetkilendirme hakkında daha fazla bilgi için bkz . Kimlik Modeli ile Talepleri ve Yetkilendirmeyi Yönetme. PKI uygulama hakkında daha fazla bilgi için bkz . Windows Server 2012 R2 Active Directory Sertifika Hizmetleri ile Enterprise PKI.

Sertifikanın birincil işlevi, sertifika sahibinin kimliğini başkalarına doğrulamaktır. Sertifika sahibin ortak anahtarını içerirken, sahip özel anahtarı korur. Ortak anahtar, sertifikanın sahibine gönderilen iletileri şifrelemek için kullanılabilir. Yalnızca sahibin özel anahtara erişimi vardır, bu nedenle bu iletilerin şifresini yalnızca sahip çözebilir.

Sertifikaların genellikle üçüncü taraf sertifika veren bir sertifika yetkilisi tarafından verilmesi gerekir. Bir Windows etki alanında, etki alanındaki bilgisayarlara sertifika vermek için kullanılabilecek bir sertifika yetkilisi bulunur.

Sertifikaları görüntüleme

Sertifikalarla çalışmak için genellikle bunları görüntülemek ve özelliklerini incelemek gerekir. Bu, Microsoft Yönetim Konsolu (MMC) ek bileşeni aracıyla kolayca gerçekleştirilir. Daha fazla bilgi için bkz . Nasıl yapılır: MMC Ek Bileşeni ile Sertifikaları Görüntüleme.

Sertifika depoları

Sertifikalar depolarda bulunur. Alt mağazalara daha da bölünmüş iki büyük mağaza konumu vardır. Bir bilgisayarda yöneticiyseniz MMC ek bileşeni aracını kullanarak her iki ana depoyu da görüntüleyebilirsiniz. Yönetici olmayanlar yalnızca geçerli kullanıcı depolarını görüntüleyebilir.

  • Yerel makine deposu. Bu, ASP.NET gibi makine işlemleri tarafından erişilen sertifikaları içerir. İstemcilerde sunucunun kimliğini doğrulayan sertifikaları depolamak için bu konumu kullanın.

  • Geçerli kullanıcı deposu. Etkileşimli uygulamalar genellikle bilgisayarın geçerli kullanıcısı için sertifikaları buraya yerleştirir. İstemci uygulaması oluşturuyorsanız, genellikle bir hizmette kullanıcının kimliğini doğrulayan sertifikalar yerleştirdiğiniz yerdir.

Bu iki mağaza daha alt mağazalara ayrılmıştır. WCF ile programlama sırasında bunlardan en önemlileri şunlardır:

  • Güvenilen Kök Sertifika Yetkilileri. Bu depodaki sertifikaları, bu depodaki bir sertifika yetkilisi sertifikasına kadar izleyebileceğiniz bir sertifika zinciri oluşturmak için kullanabilirsiniz.

    Önemli

    Yerel bilgisayar, sertifika güvenilir bir üçüncü taraf sertifika yetkilisinden gelmese bile bu depoya yerleştirilen tüm sertifikalara örtük olarak güvenir. Bu nedenle, verene tam olarak güvenmediğiniz ve sonuçlarını anlamadığınız sürece bu depoya herhangi bir sertifika yerleştirmeyin.

  • Kişisel olarak. Bu depo, bir bilgisayarın kullanıcısı ile ilişkili sertifikalar için kullanılır. Bu depo genellikle Güvenilen Kök Sertifika Yetkilileri deposunda bulunan sertifika yetkilisi sertifikalarından biri tarafından verilen sertifikalar için kullanılır. Alternatif olarak, burada bulunan bir sertifika kendi kendine verilmiş ve bir uygulama tarafından güvenilir olabilir.

Sertifika depoları hakkında daha fazla bilgi için bkz . Sertifika Depoları.

Mağaza seçin

Sertifikanın depolandığı yeri seçmek, hizmetin veya istemcinin nasıl ve ne zaman çalıştırıldığına bağlıdır. Aşağıdaki genel kurallar geçerlidir:

  • WCF hizmeti bir Windows hizmetinde barındırılıyorsa yerel makine deposunu kullanın. Sertifikaları yerel makine deposuna yüklemek için yönetici ayrıcalıklarının gerekli olduğunu unutmayın.

  • Hizmet veya istemci bir kullanıcı hesabı altında çalışan bir uygulamaysa geçerli kullanıcı deposunu kullanın.

Erişim depoları

Depolar, bir bilgisayardaki klasörler gibi erişim denetim listeleri (ACL' ler) tarafından korunur. Internet Information Services (IIS) tarafından barındırılan bir hizmet oluştururken, ASP.NET işlemi ASP.NET hesabı altında çalışır. Bu hesabın, bir hizmetin kullandığı sertifikaları içeren depoya erişimi olmalıdır. Ana depoların her biri varsayılan erişim listesiyle korunur, ancak listeler değiştirilebilir. Bir depoya erişmek için ayrı bir rol oluşturursanız, bu rol erişim iznini vermelisiniz. WinHttpCertConfig.exe aracını kullanarak erişim listesinin nasıl değiştirileceği hakkında bilgi edinmek için bkz . Nasıl yapılır: Geliştirme Sırasında Kullanmak için Geçici Sertifikalar Oluşturma.

Güven ve sertifika yetkililerini zincirleme

Sertifikalar, her bir sertifikanın sertifikayı veren CA'ya bağlı olduğu bir hiyerarşide oluşturulur. Bu bağlantı CA'nın sertifikasına bağlıdır. Ardından CA'nın sertifikası, özgün CA'nın sertifikasını veren CA'ya bağlanır. Kök CA'nın sertifikasına ulaşılana kadar bu işlem yinelenir. Kök CA'nın sertifikasına doğal olarak güvenilir.

Dijital sertifikalar, güven zinciri olarak da adlandırılan bu hiyerarşiye bağlı olarak bir varlığın kimliğini doğrulamak için kullanılır. Mmc ek bileşenini kullanarak herhangi bir sertifikanın zincirini görüntülemek için herhangi bir sertifikaya çift tıklayın ve ardından Sertifika Yolu sekmesine tıklayın. Sertifika yetkilisi için sertifika zincirlerini içeri aktarma hakkında daha fazla bilgi için bkz. Nasıl yapılır: İmzaları Doğrulamak için Kullanılan Sertifika Yetkilisi Sertifika Zincirini Belirtme.

Not

Verenin sertifikasını güvenilen kök yetkili sertifika deposuna yerleştirerek herhangi bir verene güvenilen bir kök yetkili atanabilir.

Zincir güvenini devre dışı bırakma

Yeni bir hizmet oluştururken, güvenilen bir kök sertifika tarafından verilmemiş bir sertifika kullanıyor olabilirsiniz veya sertifikayı veren sertifikanın kendisi Güvenilen Kök Sertifika Yetkilileri deposunda olmayabilir. Yalnızca geliştirme amacıyla, bir sertifika için güven zincirini denetleen mekanizmayı geçici olarak devre dışı bırakabilirsiniz. Bunu yapmak için özelliğini veya PeerOrChainTrustolarak PeerTrust ayarlayınCertificateValidationMode. Her iki mod da sertifikanın kendi kendine verilebildiğini (eş güveni) veya bir güven zincirinin parçası olabileceğini belirtir. Özelliğini aşağıdaki sınıflardan herhangi birinde ayarlayabilirsiniz.

Sınıf Özellik
X509ClientCertificateAuthentication X509ClientCertificateAuthentication.CertificateValidationMode
X509PeerCertificateAuthentication X509PeerCertificateAuthentication.CertificateValidationMode
X509ServiceCertificateAuthentication X509ServiceCertificateAuthentication.CertificateValidationMode
IssuedTokenServiceCredential IssuedTokenServiceCredential.CertificateValidationMode

Ayrıca, yapılandırmayı kullanarak özelliğini ayarlayabilirsiniz. Doğrulama modunu belirtmek için aşağıdaki öğeler kullanılır:

Özel kimlik doğrulaması

CertificateValidationMode özelliği, sertifikaların kimlik doğrulamasını özelleştirmenizi de sağlar. Varsayılan olarak düzey olarak ChainTrustayarlanır. değerini kullanmak Custom için özniteliğini sertifikayı CustomCertificateValidatorType doğrulamak için kullanılan bir derleme ve tür olarak da ayarlamanız gerekir. Özel bir doğrulayıcı oluşturmak için soyut X509CertificateValidator sınıftan devralmanız gerekir.

Özel kimlik doğrulayıcı oluştururken, geçersiz kılınacak en önemli yöntem yöntemidir Validate . Özel kimlik doğrulaması örneği için bkz . X.509 Sertifika Doğrulayıcısı örneği. Daha fazla bilgi için bkz . Özel Kimlik Bilgileri ve Kimlik Bilgisi Doğrulama.

Sertifika zinciri oluşturmak için PowerShell New-SelfSignedCertificate cmdlet'ini kullanma

PowerShell New-SelfSignedCertificate cmdlet'i X.509 sertifikaları ve özel anahtar/ortak anahtar çiftleri oluşturur. Özel anahtarı diske kaydedebilir ve ardından yeni sertifikalar vermek ve imzalamak için kullanabilir, böylece zincirlenmiş sertifika hiyerarşisinin benzetimini yapabilirsiniz. Cmdlet yalnızca hizmet geliştirirken yardım olarak kullanılmak üzere tasarlanmıştır ve hiçbir zaman gerçek dağıtım için sertifika oluşturmak için kullanılmamalıdır. WCF hizmeti geliştirirken, New-SelfSignedCertificate cmdlet'i ile bir güven zinciri oluşturmak için aşağıdaki adımları kullanın.

  1. New-SelfSignedCertificate cmdlet'ini kullanarak geçici bir kök yetkili (otomatik olarak imzalanan) sertifikası oluşturun. Özel anahtarı diske kaydedin.

  2. Ortak anahtarı içeren başka bir sertifika vermek için yeni sertifikayı kullanın.

  3. Kök yetkili sertifikasını Güvenilen Kök Sertifika Yetkilileri deposuna aktarın.

  4. Adım adım yönergeler için bkz . Nasıl yapılır: Geliştirme Sırasında Kullanmak için Geçici Sertifikalar Oluşturma.

Hangi sertifika kullanılacak?

Sertifikalar hakkında sık sorulan sorular hangi sertifikanın kullanılacağı ve neden kullanılacağıdır. Yanıt, bir istemciyi mi yoksa hizmeti mi programlamanıza bağlıdır. Aşağıdaki bilgiler genel bir yönerge sağlar ve bu soruların kapsamlı bir yanıtı değildir.

Hizmet sertifikaları

Hizmet sertifikaları, sunucunun istemcilere kimliğini doğrulamak için birincil göreve sahiptir. İstemcinin bir sunucunun kimliğini doğruladığında yapılan ilk denetimlerden biri, Konu alanının değerini hizmete başvurmak için kullanılan Tekdüzen Kaynak Tanımlayıcısı (URI) ile karşılaştırmaktır: her ikisinin DE DNS'i eşleşmelidir. Örneğin, hizmetin URI'si ise http://www.contoso.com/endpoint/Konu alanı da değerini www.contoso.comiçermelidir.

Alanın, her birinin değerini belirtmek için bir başlatma ön ekiyle ön ekli birkaç değer içerebileceğini unutmayın. En yaygın olarak, ortak ad için başlatma "CN"dir, örneğin, CN = www.contoso.com. Konu alanının boş olması da mümkündür; bu durumda Konu Alternatif Adı alanı DNS Adı değerini içerebilir.

Ayrıca sertifikanın Amaçlanan Amaçlar alanının değerinin "Sunucu Kimlik Doğrulaması" veya "İstemci Kimlik Doğrulaması" gibi uygun bir değer içermesi gerektiğini unutmayın.

İstemci sertifikaları

İstemci sertifikaları genellikle üçüncü taraf sertifika yetkilisi tarafından verilmez. Bunun yerine, geçerli kullanıcı konumunun Kişisel deposu genellikle hedeflenen "İstemci Kimlik Doğrulaması" amacına sahip bir kök yetkili tarafından buraya yerleştirilen sertifikaları içerir. İstemci, karşılıklı kimlik doğrulaması gerektiğinde böyle bir sertifika kullanabilir.

Çevrimiçi iptal ve çevrimdışı iptal

Sertifika geçerliliği

Her sertifika yalnızca geçerlilik süresi olarak adlandırılan belirli bir süre için geçerlidir. Geçerlilik süresi, X.509 sertifikasının Geçerlilik başlangıç ve Geçerlilik alanları tarafından tanımlanır. Kimlik doğrulaması sırasında, sertifikanın hala geçerlilik süresi içinde olup olmadığını belirlemek için sertifika denetlenir.

Sertifika iptal listesi

Geçerlilik süresi boyunca herhangi bir zamanda, sertifika yetkilisi bir sertifikayı iptal edebilir. Bu, sertifikanın özel anahtarının güvenliğinin aşılması gibi birçok nedenden dolayı oluşabilir.

Bu durumda, iptal edilen sertifikadan inen zincirler de geçersizdir ve kimlik doğrulama yordamları sırasında güvenilir değildir. İptal edilen sertifikaları bulmak için, her veren bir saat ve tarih damgalı sertifika iptal listesi (CRL) yayımlar. Liste, şu sınıfların veya DefaultRevocationMode özelliğini numaralandırma değerlerinden birine X509RevocationMode ayarlayarak RevocationMode çevrimiçi iptal veya çevrimdışı iptal kullanılarak denetlenebilir: X509ClientCertificateAuthentication, X509PeerCertificateAuthentication, X509ServiceCertificateAuthenticationve IssuedTokenServiceCredential sınıfları. Tüm özellikler için varsayılan değer olur Online.

Ayrıca, hem kimlik doğrulaması (serviceBehaviors) hem><<de <kimlik doğrulaması> (<endpointBehaviors>>) özniteliğini kullanarak revocationMode yapılandırma modunu ayarlayabilirsiniz.

SetCertificate yöntemi

WCF'de genellikle bir hizmetin veya istemcinin bir iletinin kimliğini doğrulamak, şifrelemek veya dijital olarak imzalamak için kullanacağını bir sertifika veya sertifika kümesi belirtmeniz gerekir. X.509 sertifikalarını SetCertificate temsil eden çeşitli sınıfların yöntemini kullanarak bunu program aracılığıyla yapabilirsiniz. Aşağıdaki sınıflar bir sertifika belirtmek için yöntemini kullanır SetCertificate .

Sınıf Metot
PeerCredential SetCertificate
X509CertificateInitiatorClientCredential SetCertificate
X509CertificateRecipientServiceCredential SetCertificate
X509CertificateInitiatorServiceCredential
SetCertificate

SetCertificate yöntemi, bir depolama konumu ve deposu, sertifikanın bir alanını belirten bir "bul" türü (x509FindType parametre) ve alanda bulunabilecek bir değer belirterek çalışır. Örneğin, aşağıdaki kod bir ServiceHost örnek oluşturur ve yöntemiyle istemcilerde hizmetin kimliğini doğrulamak için kullanılan hizmet sertifikasını SetCertificate ayarlar.

Uri baseAddress = new Uri("http://cohowinery.com/services");
ServiceHost sh = new ServiceHost(typeof(CalculatorService), baseAddress );
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindBySubjectName, "cohowinery.com");
Dim baseAddress As New Uri("http://cohowinery.com/services")
Dim sh As New ServiceHost(GetType(CalculatorService), baseAddress)
sh.Credentials.ServiceCertificate.SetCertificate( _
StoreLocation.LocalMachine, StoreName.My, _
X509FindType.FindBySubjectName, "cohowinery.com")

Aynı değere sahip birden çok sertifika

Bir depo aynı konu adına sahip birden çok sertifika içerebilir. Bu, veya veya FindBySubjectDistinguishedNamedeğerini belirtirseniz ve birden fazla sertifikanın aynı değere sahip olduğunu belirtirseniz x509FindTypeFindBySubjectName, hangi sertifikanın gerekli olduğunu ayırt etmenin bir yolu olmadığından bir özel durum oluşturulur. olarak ayarlayarak x509FindTypeFindByThumbprintbunu azaltabilirsiniz. Parmak izi alanı, bir depodaki belirli bir sertifikayı bulmak için kullanılabilecek benzersiz bir değer içerir. Ancak bunun kendi dezavantajı vardır: sertifika iptal edilir veya yenilenirse parmak SetCertificate izi de gittiği için yöntem başarısız olur. Veya sertifika artık geçerli değilse kimlik doğrulaması başarısız olur. Bunu azaltmanın yolu parametresini x590FindTypeFindByIssuerName olarak ayarlamak ve verenin adını belirtmektir. Belirli bir veren gerekli değilse, gibi FindByTimeValiddiğer X509FindType numaralandırma değerlerinden birini de ayarlayabilirsiniz.

Yapılandırmadaki sertifikalar

Ayrıca yapılandırmayı kullanarak da sertifika ayarlayabilirsiniz. Hizmet oluşturuyorsanız, sertifikalar da dahil olmak üzere kimlik bilgileri serviceBehaviors> altında <belirtilir. Bir istemciyi programlarken, sertifikalar endpointBehaviors> altında <belirtilir.

Sertifikayı kullanıcı hesabıyla eşleme

IIS ve Active Directory'nin bir özelliği, bir sertifikayı bir Windows kullanıcı hesabıyla eşleme özelliğidir. Özellik hakkında daha fazla bilgi için bkz . Sertifikaları kullanıcı hesaplarıyla eşleme.

Active Directory eşlemesini kullanma hakkında daha fazla bilgi için bkz . İstemci Sertifikalarını Dizin Hizmeti Eşlemesi ile Eşleme.

Bu özellik etkinleştirildiğinde, sınıfının özelliğini X509ClientCertificateAuthentication olarak trueayarlayabilirsinizMapClientCertificateToWindowsAccount. Yapılandırmada, aşağıdaki kodda mapClientCertificateToWindowsAccount gösterildiği gibi kimlik doğrulama> öğesinin <trueözniteliğini olarak ayarlayabilirsiniz.

<serviceBehaviors>
 <behavior name="MappingBehavior">
  <serviceCredentials>
   <clientCertificate>
    <authentication certificateValidationMode="None" mapClientCertificateToWindowsAccount="true" />
   </clientCertificate>
  </serviceCredentials>
 </behavior>
</serviceBehaviors>

Bir X.509 sertifikasının bir Windows kullanıcı hesabını temsil eden belirteçle eşlenmesi ayrıcalık yükseltmesi olarak kabul edilir çünkü eşlendikten sonra Korumalı kaynaklara erişim elde etmek için Windows belirteci kullanılabilir. Bu nedenle, etki alanı ilkesi eşlemeden önce X.509 sertifikasının ilkeyle uyumlu olmasını gerektirir. SChannel güvenlik paketi bu gereksinimi uygular.

.NET Framework 3.5 veya sonraki sürümleri kullanırken WCF, sertifikanın bir Windows hesabıyla eşlenmeden önce etki alanı ilkesine uygun olmasını sağlar.

WCF'nin ilk sürümünde eşleme, etki alanı ilkesine danışmadan yapılır. Bu nedenle, eşleme etkinse ve X.509 sertifikası etki alanı ilkesini karşılamıyorsa, ilk sürümde çalışırken kullanılan eski uygulamaların başarısız olması mümkündür.

Ayrıca bkz.