Informationen zu AD FS und zur KeySpec-Zertifikateigenschaft

Schlüsselspezifikation („KeySpec“) ist eine Eigenschaft, die einem Zertifikat und einem Schlüssel zugeordnet ist. Sie gibt an, ob ein privater Schlüssel, der einem Zertifikat zugeordnet ist, zum Signieren, Verschlüsseln oder für beides verwendet werden kann.

Ein falscher KeySpec-Wert kann zu AD FS- und Webanwendungsproxy-Fehlern führen. Beispiel:

  • Fehler beim Herstellen einer SSL/TLS-Verbindung mit AD FS oder dem Webanwendungsproxy ohne protokollierte AD FS-Ereignisse (obwohl SChannel 36888- und 36874-Ereignisse möglicherweise protokolliert werden)
  • Fehler bei der Anmeldung auf der auf AD FS- oder WAP-Formularen basierenden Authentifizierungsseite, ohne dass auf der Seite eine Fehlermeldung angezeigt wird.

Im Ereignisprotokoll wird möglicherweise das folgende Ereignis angezeigt:

Log Name:   AD FS Tracing/Debug
Source: AD FS Tracing
Date:   2/12/2015 9:03:08 AM
Event ID:   67
Task Category: None
Level:  Error
Keywords:   ADFSProtocol
User:   S-1-5-21-3723329422-3858836549-556620232-1580884
Computer:   ADFS1.contoso.com
Description:
Ignore corrupted SSO cookie.

Ursache des Problems

Die KeySpec-Eigenschaft gibt an, wie ein von Microsoft CryptoAPI (CAPI) generierter oder abgerufener Schlüssel von einem Microsoft-Legacy-CSP (Cryptographic Storage Provider, Kryptografiespeicheranbieter) verwendet werden kann.

Zum Signieren und Verschlüsseln kann ein KeySpec-Wert von 1oder AT_KEYEXCHANGE verwendet werden. Der Wert 2 oder AT_SIGNATURE wird nur zum Signieren verwendet.

Die häufigste KeySpec-Fehlkonfiguration ist die Verwendung des Werts 2 für ein anderes Zertifikat als das Tokensignaturzertifikat.

Für Zertifikate, deren Schlüssel mithilfe von CNG-Anbietern (Cryptography Next Generation) generiert wurden, gibt es kein Konzept der Schlüsselspezifikation, und der KeySpec-Wert ist immer Null.

Im nächsten Abschnitt dieses Artikels erfahren Sie, wie Sie nach einem gültigen KeySpec-Wert suchen.

Beispiel

Ein Beispiel für einen Legacy-CSP ist der Microsoft Enhanced Cryptographic Provider.

Das Microsoft RSA-CSP-Schlüsselblobformat umfasst einen Algorithmusbezeichner, entweder CALG_RSA_KEYX oder CALG_RSA_SIGN, um Anforderungen für entweder AT_KEYEXCHANGE**- oder **AT_SIGNATURE-Schlüssel zu bedienen.

Die Bezeichner des RSA-Schlüsselalgorithmus werden den KeySpec-Werten wie folgt zugeordnet

Vom Anbieter unterstützter Algorithmus Schlüsselspezifikationswert für CAPI-Aufrufe
CALG_RSA_KEYX: RSA-Schlüssel, der zum Signieren und Entschlüsseln verwendet werden kann AT_KEYEXCHANGE (oder KeySpec=1)
CALG_RSA_SIGN: Schlüssel nur für RSA-Signatur AT_SIGNATURE (oder KeySpec=2)

KeySpec-Werte und zugehörige Bedeutungen

Im Folgenden finden Sie die Bedeutung der verschiedenen KeySpec-Werte:

KeySpec-Wert Bedeutung Empfohlene AD FS-Verwendung
0 Das Zertifikat ist ein CNG-Zertifikat Nur SSL-Zertifikat
1 Bei einem Legacy-CAPI-Zertifikat (Nicht-CNG) kann der Schlüssel zum Signieren und Entschlüsseln verwendet werden. SSL, Tokensignatur, Tokenentschlüsselung, Dienstkommunikationszertifikate
2 Bei einem Legacy-CAPI-Zertifikat (Nicht-CNG) kann der Schlüssel nur zum Signieren verwendet werden. Nicht empfohlen

Überprüfen des KeySpec-Werts für Ihre Zertifikate/Schlüssel

Um einen Zertifikatwert anzuzeigen, können Sie das Befehlszeilentool certutil verwenden.

Im Folgenden finden Sie ein Beispiel: certutil –v –store my. Mit diesem Befehl wird ein Abbild der Zertifikatinformationen auf dem Bildschirm angezeigt.

Keyspec cert

Suchen Sie unter CERT_KEY_PROV_INFO_PROP_ID nach zwei Dingen:

  • ProviderType: Dies gibt an, ob das Zertifikat einen Legacy-Kryptografiespeicheranbieter (Cryptographic Storage Provider, CSP) oder einen Schlüsselspeicheranbieter verwendet, der auf neueren CNG-APIs (Certificate Next Generation) basiert. Jeder Wert ungleich Null gibt einen Legacyanbieter an.

  • KeySpec: In der folgenden Tabelle sind gültige KeySpec-Werte für ein AD FS-Zertifikat aufgeführt:

    Legacy-CSP-Anbieter (ProviderType ungleich 0):

    AD FS-Zertifikatzweck Gültige KeySpec-Werte
    Dienstkommunikation 1
    Tokenentschlüsselung 1
    Tokensignaturen 1 und 2
    SSL 1

    CNG-Anbieter (ProviderType = 0):

    AD FS-Zertifikatzweck Gültige KeySpec-Werte
    SSL 0

Ändern des KeySpec-Werts für Ihr Zertifikat in einen unterstützten Wert

Wenn Sie den KeySpec-Wert ändern, muss das Zertifikat nicht neu generiert oder neu ausgestellt werden. Der KeySpec-Wert kann durch erneutes Importieren des vollständigen Zertifikats und des privaten Schlüssels aus einer PFX-Datei in den Zertifikatspeicher mit den folgenden Schritten geändert werden:

  1. Überprüfen und notieren Sie die Berechtigungen für den privaten Schlüssel für das vorhandene Zertifikat, damit sie nach dem erneuten Import bei Bedarf neu konfiguriert werden können.
  2. Exportieren Sie das Zertifikat einschließlich des privaten Schlüssels in eine PFX-Datei.
  3. Führen Sie die folgenden Schritte für jeden AD FS- und WAP-Server aus.
    1. Löschen Sie das Zertifikat (vom AD FS-/WAP-Server).
    2. Öffnen Sie eine PowerShell-Eingabeaufforderung mit erhöhten Rechten.
    3. Importieren Sie die PFX-Datei auf jedem AD FS- und WAP-Server mithilfe der folgenden Syntax. Geben Sie dabei den AT_KEYEXCHANGE-Wert an (der für alle AD FS-Zertifikatzwecke funktioniert):
      1. certutil –importpfx certfile.pfx AT_KEYEXCHANGE
      2. Geben Sie das PFX-Kennwort ein.
    4. Gehen Sie nach Abschluss des obigen Prozesses wie folgt vor:
      1. Überprüfen Sie die Berechtigungen für den privaten Schlüssel.
      2. Starten Sie den AD FS- oder WAP-Dienst neu.