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