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 用于令牌签名证书以外的证书。
对于使用下一代加密 (CNG) 提供程序生成的密钥的证书,没有密钥规范的概念,KeySpec 值始终为零。
在本文的下一节中了解如何检查有效的 KeySpec 值。
示例
旧版 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 值的含义:
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 下查找两项内容:
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,操作步骤如下。
- 检查并记录现有证书的私钥权限,以便在重新导入后根据需要重新配置。
- 将包含私钥的证书导出到 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 服务。