“已configuration的证书的私钥无法访问。”

我正在尝试(和失败)replaceADFS 2.0独立安装的证书。 我已经生成了证书并将其放置在本地机器商店中。 但是,无论我做什么,我都不可避免地会遇到ADFS启动时报告的相同错误:

在处理联合身份validation服务configuration期间,发现元素“signingToken”具有无效数据。 已configuration的证书的私钥无法访问。 以下是证书的值:

元素:签名令牌

主题:CN =签名证书

指纹:<snip>

storeName:我的

storeLocation:0

联合身份validation服务标识:NT AUTHORITY \ NETWORK SERVICE

用户操作

如果证书是从没有私钥的源导入的,请select具有私钥的证书,或者再次从包含私钥的源(例如,.pfx文件)中导入证书。

如果证书是在用户上下文中导入的,请确认上面指定的商店与证书导入到的商店相匹配。

如果证书是由未指定“机器密钥”选项并且密钥标记为可导出的证书请求生成的,请将带有私钥的证书从用户存储导出到.pfx文件,然后再将其直接导入到存储在configuration文件中指定。 如果密钥未标记为可导出,则使用“机器密钥”选项请求新的证书。

如果联合身份validation服务标识尚未授予对证书专用密钥的读取访问权限,请使用“证书”pipe理单元更正此情况。

那么,我已经遵循了上面提到的所有用户操作,而他们都没有解决这个问题。 我似乎也无法find任何人的build议,接下来要做哪些诊断步骤。 那么,现在我该怎么办?

我重新启动时遇到5个错误。 前四个如上所述,几乎没有变化:首先为Element: serviceIdentityToken和服务通信证书,然后是encryptionTokenadditionalEncryptionTokenssigningToken用于我要用于解密和签名的证书,最后是:

启用联合身份validation服务的端点时出错。 使用PowerShell cmdlet修复configuration错误并重新启动联合身份validation服务。

我认为这第五个错误与前四个有关,但是如果不是,我可以为它增加更多细节。 SSL和签名证书都是由我们的域CA生成的。


我想试图获得更多的信息,所以(知道ADFS是用.NET编写的)我敲了一个.NET服务项目,试图获得相同的证书私钥,它会产生以下exception:

 System.Security.Cryptography.CryptographicException: Invalid provider type specified. at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() at WindowsService1.Service1.DoStuff() in c:\Dev\WindowsService1\WindowsService1\Service1.cs:line 45 

哪些谷歌search导致我相信是与使用CNG存储的私钥相关的,这在.NET 4.0以前是不起作用的。 但是,我唯一的build议是纠正这个问题,或者a)更改CA服务器上的模板(我本人没有任何访问权限),或者b)导出和重新导入证书 – 但我已经试过一次了。

我找不到任何导出和导入证书的顺序来纠正这个问题,所以最后我们复制了 ADFS和Web Server 的证书模板 ,并使新的模板与2003 CA而不仅仅是2008兼容。

这反过来又使我们能够select较老的CSP,而不是仅仅基于CNG的CSP,这是新模板允许我们从私密密钥存储中select的。