22

尝试解析我的令牌时遇到以下错误:

Property name: 'certificateReference'
Error: 'ID1025: Cannot find a unique certificate that matches the criteria.
StoreName: 'My'
StoreLocation: 'LocalMachine'
X509FindType: 'FindByThumbprint'
FindValue: '‎41a8a59e537d4a00a8c4fa8dc2522388dbd13d27'

我的 web.config 中的部分是:

<serviceCertificate>`
    <certificateReference x509FindType="FindByThumbprint" findValue="‎41A8A59E537D4A00A8C4FA8DC2522388DBD13D27" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>

我已经确认证书存在于 IIS、MMC 和 Internet Explorer 中,并尝试将查找类型更改为主题但无济于事。我还尝试将指纹设置为大写、小写、带空格和不带空格。我还确认证书存在 LocalMachine\My ,结果如下:

Matching certificate:
CN=kelly-pc

可以访问私钥的其他帐户和组包括:

NT AUTHORITY\SYSTEM
BUILTIN\Administrators
KELLY-PC\Kelly
BUILTIN\IIS_IUSRS
4

6 回答 6

24

我有完全相同的问题。通过在 Notepad++(不是记事本)中复制我的 web.config 部分,我看到了一个不可见的字符:

<serviceCertificate>
        <certificateReference  x509FindType="FindByThumbprint" findValue="?e36df2f3e351a25adf8ffb6ad3619f10238f0317" />
</serviceCertificate>

删除此字符,它应该可以工作。

如果没有记事本++,您只需在指纹值前面按退格键(尝试删除“字符。

于 2013-07-17T14:56:37.587 回答
8

首先,来自 Oleg 的“issuedTokenAuthentication”建议对我不起作用,因为我的应用程序是一个 asp.net MVC。我假设这个元素在 asp.net MVC 应用程序中不受支持,但它可能在 WCF 服务配置中受支持。

在与 localhost 上的此错误和其他错误(例如 ID1024)进行了数小时的斗争之后,我不得不按照以下建议撤消我所做的一些事情,例如让每个人都读取 %ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys 中的所有文件这个博客(我同意阅读整个 MachineKeys 文件夹,这不是一个好主意!)。通过这样做,所有授予私钥的权限都通过 MMC 控制台停止工作!

我的解决方案是按照此处的说明创建一个新的自签名证书

然后,我将新创建的证书重新导入到正确的存储区,并授予运行 Web 应用程序的用户对私钥的读取权限。我的问题是我之前使用的证书是自签名的,它一定有问题..

客户端肯定需要此部分:

<serviceCertificate>
   <certificateReference x509FindType="FindByThumbprint" findValue="‎41A8A59E537D4A00A8C4FA8DC2522388DBD13D27" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>

在处理证书时,请记住这也是一个非常好的建议:

如果您先将证书导入个人商店进行开发,然后将其导入机器商店进行部署,则私钥将保留在个人商店位置,因此即使已获得许可,也没有服务帐户可以使用它。

最后 FindPrivateKey.exe 工具非常方便地定位实际的私钥文件并帮助解决问题,它可以从这里下载,这里有很好的说明。

我注意到通过 MMC 控制台删除证书时,我必须手动删除私钥文件

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

如果从 localMachine 存储和从

C:\Users[用户名]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-2106337540-114255811-1274951907-65121

如果从 CurrentUser 存储中删除

于 2013-06-26T10:31:36.153 回答
3

对我来说,这也是指纹前的一个隐形字符。获取指纹的标准 Microsoft 指令是打开证书属性,复制十六进制编码字节的字符串,并删除其间的空格。我猜这个复制过程在字符串的开头添加了一些不可见的字符。这些字符也需要删除,否则指纹不匹配。当我发现我能够按名称加载证书时,我知道指纹一定有问题。

于 2013-12-18T18:24:03.263 回答
1

可能您使用自行颁发的证书,您还应该添加该行

<issuedTokenAuthentication allowUntrustedRsaIssuers="true" />

里面<serviceCertificate>应该和<certificateReference>.

于 2010-07-14T12:08:37.277 回答
0

所以这个错误今天早上出现在我的屏幕上。我使用的是开发机器,所以我使用的是自签名 (IIS) 证书。安装 Visual Studio 2015 RC 后,IIS 也进行了升级。事实证明,这破坏了链信任,因为根证书已被删除或无效(IIS Express .

可能是显而易见的事情,但要确保所选证书仍然有效,包括链中的每一跳。

于 2015-06-12T06:58:22.927 回答
0

在一台特定的服务器上,除了个人之外,我还必须将其添加到受信任的根证书颁发机构存储中,以便代码识别它。

在我的本地机器和其他服务器上,它仅在个人商店中运行良好。

于 2017-04-19T03:16:55.297 回答