AD FS と証明書の KeySpec プロパティの情報

キー指定 ("KeySpec") は、証明書とキーに関連付けられているプロパティです。 証明書に関連付けられた秘密キーを署名、暗号化、またはその両方に使用できるかどうかを指定します。

KeySpec 値が正しくないと、次のような AD FS と Web アプリケーション プロキシ エラーが発生する可能性があります。

  • AD FS または Web アプリケーション プロキシへの SSL/TLS 接続を確立できませんでした。AD FS イベントは記録されません (ただし、SChannel 36888 および 36874 イベントはログに記録される可能性があります)
  • ページにエラー メッセージが表示されず、AD FS または WAP のフォーム ベースの認証ページでサインインできませんでした。

イベント ログに次のイベントが表示される場合があります。

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.

問題の原因

KeySpec プロパティは、Microsoft CryptoAPI (CAPI) を使用して Microsoft レガシ暗号化記憶域プロバイダー (CSP) から生成または取得されたキーの使用方法を指定します。

KeySpec 値 1 または AT_KEYEXCHANGEは、署名と暗号化に使用できます。 値 2、または AT_SIGNATUREは、署名にのみ使用されます。

最も一般的な KeySpec の構成ミスは、トークン署名証明書以外の証明書に対して値 2 を使用します。

Cryptography Next Generation (CNG) プロバイダーを使用してキーが生成された証明書の場合、キー指定の概念はなく、KeySpec 値は常に 0 になります。

この記事の次のセクションで、有効な KeySpec 値を確認する方法について説明します。

従来の CSP の例として、Microsoft Enhanced Cryptographic Provider があります。

Microsoft RSA CSP キー blob 形式には、 AT_KEYEXCHANGE * * または * * AT_SIGNATURE キーの要求を処理するために、それぞれ CALG_RSA_KEYX または CALG_RSA_SIGN のいずれかのアルゴリズム識別子が含まれています。

RSA キーアルゴリズム識別子は、次のように KeySpec 値にマップされます

プロバイダーでサポートされているアルゴリズム CAPI 呼び出しのキー指定値
CALG_RSA_KEYX : 署名と復号化に使用できる RSA キー AT_KEYEXCHANGE (または KeySpec=1)
CALG_RSA_SIGN : RSA 署名のみのキー AT_SIGNATURE (または KeySpec=2)

KeySpec 値と関連する意味

さまざまな KeySpec 値の意味を次に示します。

Keyspec 値 意味 推奨 AD FS 使用
0 証明書が CNG 証明書である SSL 証明書のみ
1 従来の CAPI (非 CNG) の証明書の場合、キーを署名と復号化に使用できます SSL、トークン署名、トークン暗号化解除、サービス通信証明書
2 従来の CAPI (非 CNG) の証明書の場合、キーは署名にのみ使用できます 非推奨

証明書 / キーの KeySpec 値を確認する方法

証明書の値を表示するには、certutil コマンドライン ツールを使用します。

次に例を示します: certutil –v –store my。 このコマンドにより、証明書の情報が画面にダンプされます。

Keyspec cert

[CERT_KEY_PROV_INFO_PROP_ID] で、次の2つの項目を探します。

  • ProviderType: 証明書で古い暗号化記憶域プロバイダー (CSP) を使用するか、新しい証明書次世代 (CNG) API に基づいてキー記憶域プロバイダーを使用するかを示します。 0 以外の値は、レガシ プロバイダーを示します。

  • KeySpec: 次の表に、AD FS 証明書の有効な KeySpec 値を示します。

    レガシ CSP プロバイダー (ProviderType が 0 ではない)。

    AD FS 証明書の目的 有効な KeySpec 値
    サービス通信 1
    トークンの復号化 1
    トークンの署名 1 と 2
    SSL 1

    CNG プロバイダー (ProviderType = 0)。

    AD FS 証明書の目的 有効な KeySpec 値
    SSL 0

証明書の keyspec をサポートされている値に変更する方法

KeySpec 値を変更しても、証明書を再生成または再発行する必要はありません。 KeySpec を変更するには、次の手順を使用して、完全な証明書と秘密キーを PFX ファイルから証明書ストアに再インポートします。

  1. 既存の証明書の秘密キーのアクセス許可を確認して記録し、再インポート後に必要に応じて再構成できるようにします。
  2. 秘密キーを含む証明書を PFX ファイルにエクスポートします。
  3. AD FS と WAP サーバーごとに次の手順を実行します。
    1. (AD FS または WAP サーバーから) 証明書を削除します。
    2. 管理者特権の PowerShell コマンド プロンプトを開きます。
    3. 次の構文を使用して、各 AD FS および WAP サーバーで PFX ファイルをインポートします。このとき、AT_KEYEXCHANGE の値 (すべての AD FS 証明書の目的で機能します) を指定します。
      1. certutil –importpfx certfile.pfx AT_KEYEXCHANGE
      2. PFX パスワードを入力します。
    4. 上記の処理が完了したら、次の手順を実行します。
      1. 秘密キーのアクセス許可を確認します。
      2. AD FS または WAP サービスを再起動します。