假设系统S
拥有证书C
。以下引用表明,如果C
服务应用使用S's
向客户端验证自己,则C
应存储在LCS
中。但如果C
客户端应用使用S's
对服务进行身份验证,则C
应存储在CUS
内:
•本地计算机商店(LCS)。 这包含证书 由机器进程访问,例如 ASP.NET。使用此位置存储 验证的证书 服务器到客户端。
•当前用户存储(CUS)。互动 应用通常放置 这里是计算机的证书 当前用户。如果你正在创建一个 客户端应用程序,这是你的地方 通常放置证书 将用户验证为服务。
但下一个引用有点否定上述内容,因为它表示如果S's
服务嵌入在用户帐户下运行的应用程序中,则证书C
应存储在CUS
内
选择存储证书的位置 取决于服务的方式和时间 客户端运行。以下一般 规则适用:
•如果该服务是Windows服务, 以“服务器”模式运行的服务 没有任何用户界面 网络服务帐号,使用本地 机器商店。请注意管理员 安装需要特权 证书进入本地机器 存储。
•如果嵌入了服务或客户端 在一个运行的应用程序中 用户帐户,然后使用当前 用户商店。
a)嵌入在应用程序中的服务是什么意思?是否在Net中运行WCF服务。控制台应用程序或被认为嵌入的Asp.Net应用程序?
b)为什么如果app(嵌入WCF服务)在用户帐户下运行(即使此帐户具有管理员权限),证书应该位于CUS
吗?这是否意味着如果它位于LCS
内,那么S(也就是尝试将此证书发送到服务器的客户端应用程序)将无法找到证书?
谢谢
答案 0 :(得分:2)
a)根据该描述,在.NET控制台应用程序中运行的WCF服务将被视为“嵌入式”服务。这也称为自托管服务。
如果服务在ASP.Net应用程序中运行,那么它取决于托管ASP.Net应用程序的进程,但通常认为是在“服务器”模式下运行的服务。
b)为了使服务向客户端验证自身,运行服务进程的用户需要访问与证书对应的私钥。实现此目的最方便的方法是在运行该进程的用户的证书存储中安装证书(带私钥)。
任何以任意用户身份运行的应用程序都可以访问存储在本地计算机存储中的证书和私钥,只要它们的安全权限允许它。
这一切都归结为正在运行的进程的身份以及它是否有权访问与所需证书关联的私钥。