从 Windows 服务访问智能卡所需的权限
Posted
技术标签:
【中文标题】从 Windows 服务访问智能卡所需的权限【英文标题】:Required permissions for accessing Smartcards from Windows Service 【发布时间】:2010-11-14 09:04:35 【问题描述】:我有一个使用智能卡做一些事情的 Windows 服务。智能卡的证书映射到本地机器的 MY 存储中。服务以 System 运行时访问智能卡的私钥没有问题,但以 NetworkService 运行时访问智能卡私钥失败。
我已经使用证书 MMC(管理私钥...)授予对 NetworkService 证书的访问权限。
我得到的错误是:智能卡资源管理器没有运行。
引发错误并带有加密异常。
Stacktrace: 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()
您知道访问智能卡资源管理器需要哪些特权和/或权限吗?
亲切的问候,
亨宁克劳斯
【问题讨论】:
【参考方案1】:LocalService 有足够的权限来访问智能卡。这是我采用的解决方案。
【讨论】:
这是有效的。但是LocalService
可以完全访问计算机。还有其他解决方案吗?将 NT Service\LocalSystem
与LocalService
混淆了。服务应该以NT Service\<ServiceName>
执行,它适用于 Windows 10。仅适用于 Windows 7 Pro,这不起作用。我能够在 Win 7 Pro 中使用 NT AUTHORITY\Local Service
和 NT AUTHORITY\System
运行它。是否可以使用适当的服务帐户(NT Service\<ServiceName>
)运行服务?这是在 SQL Server 中使用 Windows 身份验证所必需的。
没有“真实”帐户 NT Service\X509Certificate2 引发“智能卡资源管理器未运行”异常 http://blogs.msdn.com/b/alejacma/archive/2011/05/19/x509certificate2-raises-quot-the-smart-card-resource-manager-is-not-running-quot-exception.aspx
【讨论】:
这不起作用,因为有问题的 ACL 在每次重新启动时都会重置。以上是关于从 Windows 服务访问智能卡所需的权限的主要内容,如果未能解决你的问题,请参考以下文章