共用方式為


AD FS 和憑證 KeySpec (金鑰規範) 屬性資訊

密鑰規格 (“KeySpec”) 是與憑證和密鑰相關聯的屬性。 它會指定與憑證相關聯的私鑰是否可用於簽署、加密或兩者。

不正確的 KeySpec 值可能會導致 AD FS 和 Web 應用程式 Proxy 錯誤,例如:

  • 無法建立與 AD FS 或 Web 應用程式 Proxy 的 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 舊版加密儲存提供者 (CSP) 使用 Microsoft CryptoAPI (CAPI) 生成或擷取的密鑰可以如何使用。

KeySpec 值為 1AT_KEYEXCHANGE,可用於簽署和加密。 2AT_SIGNATURE的值僅用於簽署。

最常見的 KeySpec 錯誤設定是針對令牌簽署憑證以外的憑證使用值 2。

對於使用密碼編譯新一代 (CNG) 提供者產生密鑰的憑證,沒有密鑰規格的概念,且 KeySpec 值一律為零。

瞭解如何在本文的下一節中檢查有效的 KeySpec 值。

Example

舊版 CSP 的範例是Microsoft增強式密碼編譯提供者。

Microsoft RSA CSP 金鑰 Blob 格式包含演算法識別符 CALG_RSA_KEYX 或 CALG_RSA_SIGN,分別用於 AT_KEYEXCHANGE 或 AT_SIGNATURE 密鑰請求。

RSA 金鑰演算法標識碼會對應至 KeySpec 值,如下所示

提供者支持的演算法 CAPI 呼叫的關鍵規格值
CALG_RSA_KEYX :可用於簽署和解密的 RSA 金鑰 AT_KEYEXCHANGE (或 KeySpec=1)
CALG_RSA_SIGN:僅用於 RSA 簽名的密鑰 AT_SIGNATURE (或 KeySpec=2)

KeySpec 值和相關聯的意義

以下是各種 KeySpec 值的意義:

關鍵規範值 Means 建議使用 AD FS
0 憑證是 CNG 憑證 僅限 SSL 憑證
1 針對舊版 CAPI (非 CNG) 憑證,金鑰可用於簽署和解密 SSL, 令牌簽署, 令牌解密, 服務通訊憑證
2 對於舊版 CAPI (非 CNG) 憑證,金鑰只能用於簽署 不建議

如何檢查憑證/金鑰的 KeySpec 值

若要查看憑證的值,您可以使用 certutil 命令行工具。

以下是範例:certutil –v –store my。 此命令會將憑證資訊傾印到螢幕。

Keyspec 憑證

在 [CERT_KEY_PROV_INFO_PROP_ID] 下尋找兩件事:

  • ProviderType: 這表示憑證是否使用舊版密碼編譯記憶體提供者 (CSP) 或以較新的憑證新一代 (CNG) API 為基礎的金鑰儲存提供者。 任何非零值都表示舊版供應商。

  • 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 值不需要重新產生或重新發出憑證。 您可以使用下列步驟,將 PFX 檔案的完整憑證和私鑰重新匯入證書存儲,以變更 KeySpec。

  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 服務。