キー仕様 ("KeySpec") は、証明書とキーに関連付けられているプロパティです。 証明書に関連付けられている秘密キーを署名、暗号化、またはその両方に使用できるかどうかを指定します。
KeySpec の値が正しくないと、AD FS と Web アプリケーション プロキシで次のようなエラーが発生する可能性があります。
- AD FS イベントがログに記録されていない AD FS または Web アプリケーション プロキシへの SSL/TLS 接続を確立できませんでした (ただし、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 レガシ暗号化ストレージ プロバイダー (CSP) から Microsoft CryptoAPI (CAPI) を使用して生成または取得されるキーを使用する方法を識別します。
KeySpec 値 1 ( AT_KEYEXCHANGE) は、署名と暗号化に使用できます。 値 2 ( AT_SIGNATURE) は、署名にのみ使用されます。
最も一般的な KeySpec の誤構成は、トークン署名証明書以外の証明書に値 2 を使用することです。
暗号化次世代 (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: これは、新しい証明書次世代 (CNG) API に基づいて、証明書で従来の暗号化ストレージ プロバイダー (CSP) またはキー ストレージ プロバイダーのどちらを使用するかを示します。 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 サービスを再起動します。