从 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\ 添加到 Windows 组之类的东西?或者以某种方式将其添加到组策略中? 您是否将 LocalService 与 LocalSystem 混淆了? LocalService 类似于 NetworkService,但对远程系统进行匿名身份验证。 抱歉,我将LocalSystemLocalService 混淆了。服务应该以NT Service\<ServiceName> 执行,它适用于 Windows 10。仅适用于 Windows 7 Pro,这不起作用。我能够在 Win 7 Pro 中使用 NT AUTHORITY\Local ServiceNT AUTHORITY\System 运行它。是否可以使用适当的服务帐户(NT Service\<ServiceName>)运行服务?这是在 SQL Server 中使用 Windows 身份验证所必需的。 没有“真实”帐户 NT Service\。那是一个由 WIndows 创建的虚拟帐户。见***.com/questions/14197908/…。因此,如果启用此功能,您可以基于 NT Service\ 而不是本地服务或本地系统授予权限。但这与服务实际运行的帐户无关。 "所以如果你启用这个,你可以基于 NT Service\ 授予权限,而不是本地服务或本地系统" ... 访问智能卡需要哪些权限? 【参考方案2】:

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 服务访问智能卡所需的权限的主要内容,如果未能解决你的问题,请参考以下文章

Windows Server 上的智能卡访问

你如何估计智能合约调用所需的 gas 量?

建立资源管理器上下文以使用智能卡读卡器

用户在SSRS中没有所需权限

我的通用 Windows 平台软件是不是能够获得启动关机所需的权限?

访问 Redshift External 表所需的最低权限