Megosztás a következőn keresztül:


Tanúsítványok használata

A Windows Communication Foundation (WCF) biztonságának programozásához az X.509 digitális tanúsítványokat gyakran használják az ügyfelek és kiszolgálók hitelesítésére, az üzenetek titkosítására és digitális aláírására. Ez a témakör röviden ismerteti az X.509 digitális tanúsítvány funkcióit és azok WCF-ben való használatát, és olyan témakörökre mutató hivatkozásokat tartalmaz, amelyek részletesebben ismertetik ezeket a fogalmakat, vagy bemutatják, hogyan végezhet el gyakori feladatokat WCF és tanúsítványok használatával.

Röviden: a digitális tanúsítvány egy nyilvános kulcsú infrastruktúra (PKI) része, amely digitális tanúsítványok, hitelesítésszolgáltatók és más regisztrációs hatóságok rendszere, amely a nyilvános kulcs titkosításának használatával ellenőrzi és hitelesíti az elektronikus tranzakcióban részt vevő felek érvényességét. A hitelesítésszolgáltatók tanúsítványokat bocsátanak ki, és minden tanúsítványhoz olyan mezők tartoznak, amelyek adatokat tartalmaznak, például a tulajdonos (az entitás, amelyhez a tanúsítványt kiállították), az érvényességi dátumok (a tanúsítvány érvényességének időpontja), a kiállító (a tanúsítványt kiállító entitás) és egy nyilvános kulcs. A WCF-ben ezek a tulajdonságok feldolgozásra Claimkerülnek, és minden jogcím további két típusra oszlik: identitásra és jogosultságra. További információ az X.509-tanúsítványokról: X.509 Nyilvános kulcsú tanúsítványok. A WCF jogcímeivel és engedélyezésével kapcsolatos további információkért lásd: Jogcímek és engedélyezés kezelése az identitásmodellel. A PKI implementálásáról további információt a Vállalati PKI és a Windows Server 2012 R2 Active Directory Tanúsítványszolgáltatások című témakörben talál.

A tanúsítvány elsődleges funkciója a tanúsítvány tulajdonosának személyazonosságának hitelesítése mások számára. A tanúsítvány tartalmazza a tulajdonos nyilvános kulcsát , míg a tulajdonos megtartja a titkos kulcsot. A nyilvános kulcs a tanúsítvány tulajdonosának küldött üzenetek titkosítására használható. Csak a tulajdonos rendelkezik hozzáféréssel a titkos kulcshoz, így csak a tulajdonos fejtheti vissza ezeket az üzeneteket.

A tanúsítványokat egy hitelesítésszolgáltatónak kell kiállítania, amely gyakran egy harmadik fél tanúsítványkibocsátója. Windows-tartományban egy hitelesítésszolgáltató is szerepel, amely a tartomány számítógépeinek tanúsítványainak kiállítására használható.

Tanúsítványok megtekintése

A tanúsítványok használatához gyakran meg kell tekinteni őket, és meg kell vizsgálniuk a tulajdonságaikat. Ez egyszerűen elvégezhető a Microsoft Management Console (MMC) beépülő modullal. További információ : Tanúsítványok megtekintése az MMC beépülő modullal.

Tanúsítványtárolók

A tanúsítványok az üzletekben találhatók. Két fő tárolóhely létezik, amelyek tovább vannak osztva aláruházakra. Ha Ön a rendszergazda egy számítógépen, az MMC beépülő modul eszközzel mindkét fő áruházat megtekintheti. A nem rendszergazdák csak az aktuális felhasználói tárat tekinthetik meg.

  • A helyi géptároló. Ez tartalmazza a gépi folyamatok, például a ASP.NET által elért tanúsítványokat. Ezen a helyen olyan tanúsítványokat tárolhat, amelyek hitelesítik a kiszolgálót az ügyfelek számára.

  • Az aktuális felhasználói tároló. Az interaktív alkalmazások általában a számítógép aktuális felhasználójának tanúsítványait helyezik el. Ha ügyfélalkalmazást hoz létre, általában itt helyez el tanúsítványokat, amelyek hitelesítik a felhasználót egy szolgáltatásban.

Ez a két üzlet további részáruházakra oszlik. Ezek közül a legfontosabb a WCF-sel való programozás során a következők:

  • Megbízható legfelső szintű hitelesítésszolgáltatók. Az ebben a tárolóban található tanúsítványokkal létrehozhat egy tanúsítványláncot, amely visszavezethető az ebben a tárolóban található hitelesítésszolgáltatói tanúsítványra.

    Fontos

    A helyi számítógép implicit módon megbízik az áruházban elhelyezett tanúsítványokban, még akkor is, ha a tanúsítvány nem megbízható külső hitelesítésszolgáltatótól származik. Ezért ne helyezzen tanúsítványt ebbe a tárolóba, kivéve, ha teljes mértékben megbízik a kiállítóban, és nem ismeri a következményeket.

  • Személyes. Ez az áruház a számítógép felhasználójával társított tanúsítványokhoz használható. Ezt a tárolót általában a megbízható legfelső szintű hitelesítésszolgáltatók tárolójában található hitelesítésszolgáltatók egyik tanúsítványa által kibocsátott tanúsítványokhoz használják. Másik lehetőségként előfordulhat, hogy az itt található tanúsítványokat egy alkalmazás önkibocsátja és megbízhatónak minősíti.

További információ a tanúsítványtárolókról: Tanúsítványtárolók.

Üzlet kiválasztása

A tanúsítvány tárolásának helye a szolgáltatás vagy az ügyfél futtatásának módjától és időpontjától függ. A következő általános szabályok érvényesek:

  • Ha a WCF szolgáltatás windowsos szolgáltatásban van üzemeltetve, használja a helyi géptárolót. Vegye figyelembe, hogy a tanúsítványok helyi géptárolóba való telepítéséhez rendszergazdai jogosultságokra van szükség.

  • Ha a szolgáltatás vagy ügyfél egy felhasználói fiók alatt futó alkalmazás, akkor használja az aktuális felhasználói tárat.

Access-tárolók

Az áruházakat hozzáférés-vezérlési listák (ACL-ek) védik, csakúgy, mint a számítógépen lévő mappák. Az Internet Information Services (IIS) által üzemeltetett szolgáltatás létrehozásakor a ASP.NET folyamat a ASP.NET fiók alatt fut. A fióknak hozzáféréssel kell rendelkeznie ahhoz az áruházhoz, amely a szolgáltatás által használt tanúsítványokat tartalmazza. A fő üzletek mindegyike alapértelmezett hozzáférési listával van védve, de a listák módosíthatók. Ha külön szerepkört hoz létre egy áruház eléréséhez, meg kell adnia ezt a szerepkör-hozzáférési engedélyt. A hozzáférési lista WinHttpCertConfig.exe eszközzel történő módosításáról a következő témakörben olvashat : Ideiglenes tanúsítványok létrehozása a fejlesztés során.

Lánc megbízhatósági és hitelesítésszolgáltatói

A tanúsítványok olyan hierarchiában jönnek létre, amelyben minden egyes tanúsítvány a tanúsítványt kiállító hitelesítésszolgáltatóhoz van csatolva. Ez a hivatkozás a hitelesítésszolgáltató tanúsítványára mutató hivatkozás. A hitelesítésszolgáltató tanúsítványa ezután az eredeti hitelesítésszolgáltató tanúsítványát kiállító hitelesítésszolgáltatóra hivatkozik. Ez a folyamat addig ismétlődik, amíg el nem éri a legfelső szintű hitelesítésszolgáltató tanúsítványát. A legfelső szintű hitelesítésszolgáltató tanúsítványa eredendően megbízható.

A digitális tanúsítványok az entitások hitelesítésére szolgálnak erre a hierarchiára, más néven megbízhatósági láncra támaszkodva. Bármelyik tanúsítványláncot megtekintheti az MMC beépülő modullal, ha duplán kattint valamelyik tanúsítványra, majd a Tanúsítvány elérési útja fülre kattint. A hitelesítésszolgáltatók tanúsítványláncainak importálásával kapcsolatos további információk: Útmutató: Az aláírások ellenőrzéséhez használt hitelesítésszolgáltatói tanúsítványlánc megadása.

Feljegyzés

Bármely kiállító megbízható legfelső szintű szolgáltatóként is kijelölhető, ha a kiállító tanúsítványát a megbízható legfelső szintű hitelesítésszolgáltató tanúsítványtárolójában helyezi el.

Láncmegbízhatóság letiltása

Új szolgáltatás létrehozásakor előfordulhat, hogy olyan tanúsítványt használ, amelyet nem megbízható főtanúsítvány állít ki, vagy maga a kiállító tanúsítvány nem szerepel a megbízható legfelső szintű hitelesítésszolgáltatók tárolójában. Csak fejlesztési célokra ideiglenesen letilthatja azt a mechanizmust, amely ellenőrzi a tanúsítvány megbízhatósági láncát. Ehhez állítsa a tulajdonságot vagy PeerTrustPeerOrChainTrusta CertificateValidationMode . Bármelyik mód azt határozza meg, hogy a tanúsítvány önkibocsátó (társmegbízhatóság) vagy egy megbízhatósági lánc része lehet. A tulajdonságot az alábbi osztályok bármelyikére beállíthatja.

Osztály Tulajdonság
X509ClientCertificateAuthentication X509ClientCertificateAuthentication.CertificateValidationMode
X509PeerCertificateAuthentication X509PeerCertificateAuthentication.CertificateValidationMode
X509ServiceCertificateAuthentication X509ServiceCertificateAuthentication.CertificateValidationMode
IssuedTokenServiceCredential IssuedTokenServiceCredential.CertificateValidationMode

A tulajdonságot konfigurációval is beállíthatja. A rendszer a következő elemeket használja az érvényesítési mód megadásához:

Egyéni hitelesítés

A CertificateValidationMode tulajdonság lehetővé teszi a tanúsítványok hitelesítésének testreszabását is. A szint alapértelmezés szerint a következőre ChainTrustvan állítva: . Az Custom érték használatához az CustomCertificateValidatorType attribútumot egy szerelvényre és a tanúsítvány érvényesítéséhez használt típusra is be kell állítania. Egyéni érvényesítő létrehozásához az absztrakt X509CertificateValidator osztálytól kell örökölnie.

Egyéni hitelesítő létrehozásakor a legfontosabb felülbírálási módszer a Validate metódus. Az egyéni hitelesítés példáiért tekintse meg az X.509 tanúsítvány-érvényesítő mintáját. További információ: Egyéni hitelesítő adatok és hitelesítő adatok érvényesítése.

Tanúsítványlánc létrehozása a PowerShell New-SelfSignedCertificate parancsmaggal

A PowerShell New-SelfSignedCertificate parancsmag X.509-tanúsítványokat és titkos kulcs-/nyilvános kulcspárokat hoz létre. A titkos kulcsot lemezre mentheti, majd új tanúsítványok kiállítására és aláírására használhatja, így szimulálva a láncolt tanúsítványok hierarchiáját. A parancsmag csak segédeszközként használható a szolgáltatások fejlesztésekor, és soha nem használható tanúsítványok létrehozására a tényleges üzembe helyezéshez. WCF-szolgáltatás fejlesztésekor az alábbi lépésekkel hozzon létre egy bizalmi láncot a New-SelfSignedCertificate parancsmaggal.

  1. Hozzon létre egy ideiglenes legfelső szintű (önaláírt) tanúsítványt a New-SelfSignedCertificate parancsmaggal. Mentse a titkos kulcsot a lemezre.

  2. Az új tanúsítvány használatával kibocsáthat egy másik tanúsítványt, amely tartalmazza a nyilvános kulcsot.

  3. Importálja a legfelső szintű hitelesítésszolgáltató tanúsítványát a megbízható legfelső szintű hitelesítésszolgáltatók tárolójába.

  4. Részletes útmutatásért lásd : Ideiglenes tanúsítványok létrehozása a fejlesztés során.

Melyik tanúsítványt használja?

A tanúsítványokra vonatkozó gyakori kérdések a használandó tanúsítványok és a miértek. A válasz attól függ, hogy egy ügyfelet vagy szolgáltatást programozza-e. Az alábbi információk általános iránymutatást nyújtanak, és nem teljes választ ad ezekre a kérdésekre.

Szolgáltatási tanúsítványok

A szolgáltatástanúsítványok elsődleges feladata a kiszolgáló hitelesítése az ügyfelek számára. Az egyik kezdeti ellenőrzés, amikor egy ügyfél hitelesít egy kiszolgálót, az egyik, hogy összehasonlítja a Tárgy mező értékét a szolgáltatáshoz való kapcsolódáshoz használt egységes erőforrás-azonosítóval (URI- val): mindkettő DNS-ének egyeznie kell. Ha például a szolgáltatás URI-ja, http://www.contoso.com/endpoint/ akkor a Tárgy mezőnek is tartalmaznia kell az értéket www.contoso.com.

Vegye figyelembe, hogy a mező több értéket is tartalmazhat, amelyek mindegyike inicializálással van elnevezve, hogy jelezze az értéket. Az inicializálás leggyakrabban "CN" a köznapi névhez, például CN = www.contoso.com. A Tárgy mező üres is lehet, ebben az esetben a Tulajdonos alternatív neve mező a DNS-név értékét is tartalmazhatja.

Vegye figyelembe azt is, hogy a tanúsítvány célként megadott mezőjének tartalmaznia kell egy megfelelő értéket, például a "Kiszolgálóhitelesítés" vagy az "Ügyfél-hitelesítés" értéket.

Ügyféltanúsítványok

Az ügyféltanúsítványokat általában nem külső hitelesítésszolgáltató állítja ki. Ehelyett az aktuális felhasználói hely személyes tárolója általában egy legfelső szintű szolgáltató által oda helyezett tanúsítványokat tartalmaz, amelynek célja az "Ügyfélhitelesítés". Az ügyfél akkor használhat ilyen tanúsítványt, ha kölcsönös hitelesítésre van szükség.

Online visszavonás és offline visszavonás

Tanúsítvány érvényessége

Minden tanúsítvány csak egy adott időszakra érvényes, úgynevezett érvényességi időre. Az érvényességi időtartamot az Érvényesség ésaz Érvényes az X.509-tanúsítvány mezői határozzák meg. A hitelesítés során a rendszer ellenőrzi, hogy a tanúsítvány még az érvényességi időszakon belül van-e.

Visszavont tanúsítványok listája

Az érvényességi időszak alatt a hitelesítésszolgáltató bármikor visszavonhatja a tanúsítványt. Ez számos okból történhet, például a tanúsítvány titkos kulcsának feltörése.

Ilyen esetben a visszavont tanúsítványból származó láncok is érvénytelenek, és nem megbízhatók a hitelesítési eljárások során. Annak megállapításához, hogy mely tanúsítványokat vonják vissza, minden kiállító közzétesz egy idő- és dátumbélyegzett tanúsítvány-visszavonási listát (CRL). A lista online visszavonással vagy offline visszavonással ellenőrizhető, ha a RevocationMode következő osztályok egyikét vagy DefaultRevocationMode tulajdonságát állítja be az X509RevocationMode enumerálási értékek egyikére: X509ClientCertificateAuthentication, X509PeerCertificateAuthentication, X509ServiceCertificateAuthenticationés az IssuedTokenServiceCredential osztályokra. Az összes tulajdonság alapértelmezett értéke a .Online

A konfigurációs módot a hitelesítés> (a serviceBehaviors>) és< a hitelesítés> (<<endpointBehaviors) attribútumával <revocationMode is beállíthatja.>

A SetCertificate metódus

A WCF-ben gyakran meg kell adnia egy tanúsítványt vagy tanúsítványkészletet, amelyet egy szolgáltatás vagy ügyfél használ egy üzenet hitelesítéséhez, titkosításához vagy digitális aláírásához. Ezt programozott módon teheti meg az SetCertificate X.509-tanúsítványokat képviselő különböző osztályok metódusával. A következő osztályok a tanúsítvány megadásához használják a SetCertificate metódust.

Osztály Metódus
PeerCredential SetCertificate
X509CertificateInitiatorClientCredential SetCertificate
X509CertificateRecipientServiceCredential SetCertificate
X509CertificateInitiatorServiceCredential
SetCertificate

A SetCertificate módszer úgy működik, hogy kijelöl egy tárolóhelyet és egy tárolót, egy "find" típust (x509FindType paramétert), amely megadja a tanúsítvány mezőjét, és egy értéket, amelyet a mezőben talál. Az alábbi kód például létrehoz egy példányt ServiceHost , és beállítja a szolgáltatás hitelesítéséhez használt szolgáltatástanúsítványt az ügyfeleknek a SetCertificate módszerrel.

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")

Több, azonos értékkel rendelkező tanúsítvány

Az áruházak több, azonos tulajdonosnévvel rendelkező tanúsítványt is tartalmazhatnak. Ez azt jelenti, hogy ha azt adja meg, hogy az x509FindType vagy FindBySubjectNameFindBySubjectDistinguishedName, és egynél több tanúsítvány azonos értékkel rendelkezik, a rendszer kivételt eredményez, mert nem lehet megkülönböztetni, hogy melyik tanúsítványra van szükség. Ezt a beállítást a következőre állíthatja x509FindTypeFindByThumbprintbe: Az ujjlenyomat mező egy egyedi értéket tartalmaz, amely egy adott tanúsítvány tárolására használható. Ennek azonban saját hátránya van: ha a tanúsítványt visszavonják vagy megújítják, a SetCertificate módszer meghiúsul, mert az ujjlenyomat is eltűnt. Vagy ha a tanúsítvány már nem érvényes, a hitelesítés meghiúsul. Ennek mérséklésének módja a x590FindType paraméter FindByIssuerName beállítása és a kiállító nevének megadása. Ha nincs szükség egy adott kiállítóra, beállíthatja a többi X509FindType számbavételi érték egyikét is, például FindByTimeValid.

Tanúsítványok konfigurációban

A tanúsítványokat konfigurációval is beállíthatja. Ha szolgáltatást hoz létre, a hitelesítő adatok , beleértve a tanúsítványokat is, a <serviceBehaviors> alatt vannak megadva. Ügyfélprogramozáskor a tanúsítványok az <endpointBehaviors> alatt vannak megadva.

Tanúsítvány hozzárendelése felhasználói fiókhoz

Az IIS és az Active Directory egyik funkciója, hogy egy tanúsítványt windowsos felhasználói fiókhoz rendelhet. A funkcióval kapcsolatos további információkért lásd : Tanúsítványok hozzárendelése felhasználói fiókokhoz.

Az Active Directory-megfeleltetéssel kapcsolatos további információkért lásd : Ügyféltanúsítványok leképezése címtárszolgáltatás-leképezéssel.

Ha ez a funkció engedélyezve van, beállíthatja az MapClientCertificateToWindowsAccount osztály tulajdonságát a X509ClientCertificateAuthentication következőre true: . Konfiguráció esetén a mapClientCertificateToWindowsAccount hitelesítési> elem attribútumát< a következő kódban látható módon trueállíthatja be.

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

Az X.509-tanúsítványnak a Windows felhasználói fiókot jelképező jogkivonathoz való hozzárendelése jogosultságszint-emelésnek minősül, mert a megfeleltetés után a Windows-jogkivonat használható a védett erőforrásokhoz való hozzáféréshez. Ezért a tartományházirend megköveteli, hogy az X.509-tanúsítvány megfeleljen a szabályzatnak a leképezés előtt. Az SChannel biztonsági csomag érvényesíti ezt a követelményt.

Ha .NET-keretrendszer 3.5-ös vagy újabb verziót használ, a WCF biztosítja, hogy a tanúsítvány megfeleljen a tartományi szabályzatnak, mielőtt windowsos fiókra lenne leképezve.

A WCF első kiadásában a leképezés a tartományi szabályzat egyeztetése nélkül történik. Ezért előfordulhat, hogy az első kiadásban való futtatáskor használt régebbi alkalmazások meghiúsulnak, ha a leképezés engedélyezve van, és az X.509-tanúsítvány nem felel meg a tartományi szabályzatnak.

Lásd még