我正在开发一个 Windows 服务中间件,当它想要初始化与远程应用程序的安全通信通道时,它使用安全证书来执行身份验证。
Windows 服务是一个 .Net 3.5 应用程序,它使用(通过 C++/CLI 层)C++ WinCrypt 库来加载证书。特别是当我访问商店以加载证书时,我正在调用 CertFindCertificateInStore 方法。CertFindCertificateInStore 默认使用“我的”系统存储作为存储。
我已经通过 MMC 控制台为当前用户(登录机器的用户)或本地机器在“我的”系统存储中注册了我的私有证书。确保证书是好的并且它包括我的私钥。
当我以当前用户(再次登录到机器的用户)身份运行 Windows 服务时,证书已正确加载,而不是当我以“LocalSystem”身份运行服务时未加载证书。当我调用 CertFindCertificateInStore 时,会引发错误“无法找到对象或属性”。我指出“我的”商店仍然可以访问。
(注意:当我使用不同的用户打开新会话并运行与注册证书的用户相同的 Windows 服务时,证书会再次正确加载)
然后我使用 MMC 控制台或 winhttpcertcfg.exe 系统工具来验证“LocalSystem”用户是否有权访问我的证书。之后,MMC 控制台和 winhttpcertcfg.exe 工具确认用户“LocalSystem”理论上有权访问证书。
你有什么建议可以帮助我解决这个问题吗?
预先感谢您的帮助,
PS:此处已发布了类似的问题证书:找不到用于解密的证书和私钥签名时出错