是否可以将 X509 证书安装到特定的 StoreLocation(不是当前用户)?
Is it possible to install X509 certificate into a specific StoreLocation (not the current user)?
我正在使用 Bouncy Castle (C#) 为 WCF 网络服务生成自签名 X.509 证书。
我有一个用例,其中证书由安装程序 运行 在用户帐户(例如 系统管理员帐户 )中创建。安装程序还将为该服务创建 Windows 用户帐户(例如 我的服务帐户),然后该帐户将使用这些证书。
我不想让 machine/domain 上的所有用户都可以使用该证书,而只希望授权服务帐户(我的服务帐户)可以使用该证书。
在这种情况下,似乎StoreLocation.CurrentUser和StoreLocation.LocalMachine都无法做到这一点?
解决这个用例的合理方法是什么?
您能够从任何帐户访问证书的唯一方法是在 LocalMachine 商店中创建它们;如果您将它们放在特定的用户存储中,则不会。
请注意,证书本身没有 ACL。但是,私钥可以。
所以最常见的方法是将证书本身存储在 LocalMachine 存储中,然后使用正确的 ACL 保护私钥,只向那些实际上应该有权访问私钥的帐户授予权限(当然可以是虚拟服务帐户,例如 NT Service\<ServiceName>
)。
在 Windows 的现代版本中,您应该能够直接从证书管理 MMC 管理单元调整私钥的权限,方法是使用“所有任务”->“管理私钥”选项证书的上下文菜单。
我正在使用 Bouncy Castle (C#) 为 WCF 网络服务生成自签名 X.509 证书。
我有一个用例,其中证书由安装程序 运行 在用户帐户(例如 系统管理员帐户 )中创建。安装程序还将为该服务创建 Windows 用户帐户(例如 我的服务帐户),然后该帐户将使用这些证书。
我不想让 machine/domain 上的所有用户都可以使用该证书,而只希望授权服务帐户(我的服务帐户)可以使用该证书。
在这种情况下,似乎StoreLocation.CurrentUser和StoreLocation.LocalMachine都无法做到这一点?
解决这个用例的合理方法是什么?
您能够从任何帐户访问证书的唯一方法是在 LocalMachine 商店中创建它们;如果您将它们放在特定的用户存储中,则不会。 请注意,证书本身没有 ACL。但是,私钥可以。
所以最常见的方法是将证书本身存储在 LocalMachine 存储中,然后使用正确的 ACL 保护私钥,只向那些实际上应该有权访问私钥的帐户授予权限(当然可以是虚拟服务帐户,例如 NT Service\<ServiceName>
)。
在 Windows 的现代版本中,您应该能够直接从证书管理 MMC 管理单元调整私钥的权限,方法是使用“所有任务”->“管理私钥”选项证书的上下文菜单。