Windows Server 2008/2012中未使用智能卡和服务定义键集

时间:2016-11-29 11:28:47

标签: delphi service windows-server-2008 smartcard windows-server-2012

我正在尝试使用Capicom API和MSXML5 API在Windows Server 2008或2012下运行的服务应用程序中使用存储在智能卡中的证书对XML进行签名。当我在Windows 8中进行测试时,它可以正常工作或作为应用程序,但作为服务失败,错误Keyset未定义。

失败的方法是来自createKeyFromCSP的{​​{1}}界面的IXMLDigitalSignature

到目前为止我尝试了一些观点:

  • 通过WTS和服务器机器尝试使用智能卡。两种情况均失败。

  • 检查智能卡读卡器的驱动程序和功能。我认为这里没有问题,因为它正如我所说的那样适用于应用程序。

  • MSXML5.DLL商店开放标记CAPICOM更改为CAPICOM_CURRENT_USER_STORE。它失败,即使在CAPICOM_SMART_CARD_USER_STORE的服务属性中通知当前用户凭据,也找不到任何证书。

  • 以本地系统启动服务,并使用services.msc标志模拟当前用户。也失败了。

  • 通过使用ACL API和LOGON32_LOGON_INTERACTIVEhttps://blogs.msdn.microsoft.com/alejacma/2011/05/19/scardestablishcontext-fails-with-scard_e_no_service-error/)授予事件Global\Microsoft Smart Card Resource Manager Started权限。失败。

  • 在证书管理器控制台中查找私钥的权限,但由于证书的私钥位于智能卡内,我找不到任何为特定用户设置权限的选项。

  • AddAceToObjectsSecurityDescriptor下的文件夹的所有用户授予权限(Administrador是当前用户)。失败。

使用WinDbg调试器进行调试,我发现问题出在上述方法C:\Users\Administrador\AppData\Roaming\Microsoft\Crypto中。它在内部调用一个名为createKeyFromCSP的CryptoAPI方法,并且此方法无法返回所述错误(CryptAcquireContext或未定义Keyset)。

从我的搜索中,我认为它应该是从Windows Server 2008实现的一些权限问题,但是我找不到任何可能导致此问题的事情。有谁知道可能导致此错误的原因,以及是否可以在系统中执行某些配置来解决此错误?

PS:我正在使用delphi,因此该解决方案无法使用任何.NET解决方案。但是,它可以通过一些WinAPI来实现。

0 个答案:

没有答案