【问题标题】:In what certificate store should we put server's certificates我们应该将服务器的证书放在哪个证书存储中
【发布时间】:2011-05-15 08:38:06
【问题描述】:

假设系统S拥有一个证书C。下面的引用表明,如果S's 服务应用程序要使用C 向客户端验证自己,那么C 应该存储在LCS 中。但是如果CS's 客户端应用程序用来向服务验证自己,那么C 应该存储在CUS 中:

• 本地计算机存储 (LCS)。 这包含证书 由机器进程访问,例如 ASP.NET。使用此位置存储 认证的证书 服务器到客户端。

• 当前用户存储 (CUS)。交互的 应用程序通常放置 此处为计算机的证书 当前用户。如果您正在创建一个 客户端应用程序,这是你 通常放置的证书 对服务的用户进行身份验证。

但是下一个引用否定了上述内容,因为它说如果S's服务嵌入在用户帐户下运行的应用程序中,那么证书C应该存储在CUS

选择存储证书的位置 取决于服务的方式和时间或 客户端运行。以下一般 规则适用:

• 如果服务是 Windows 服务, 以“服务器”模式运行的服务 下没有任何用户界面 网络服务帐号,使用本地 机器商店。请注意,管理员 安装需要权限 证书到本地机器 商店。

• 如果服务或客户端是嵌入的 在一个应用程序下运行 用户帐户,然后使用当前 用户商店。

a) 嵌入到应用程序中的服务是什么意思?是在 Net 中运行的 WCF 服务。控制台应用程序或被视为嵌入的 Asp.Net 应用程序内?

b) 为什么如果应用程序(嵌入 WCF 服务)在用户帐户下运行(即使该帐户具有管理员权限),证书应该位于 CUS 中?这是否意味着如果它位于 LCS 内,那么 S(也就是客户端应用程序尝试将此证书发送到服务器)将无法找到证书?

谢谢

【问题讨论】:

    标签: windows wcf certificate


    【解决方案1】:

    a) 根据该描述,在 .NET 控制台应用程序中运行的 WCF 服务将被视为“嵌入式”服务。这也称为自托管服务。

    如果服务在 ASP.Net 应用程序中运行,那么这取决于托管 ASP.Net 应用程序的进程,但通常这将被视为在“服务器”模式下运行的服务。

    b) 为了让服务向客户端验证自己,运行服务进程的用户需要访问证书对应的私钥。实现这一点最方便的方法是将证书(带有私钥)安装在运行该进程的用户的证书存储中。

    只要安全权限允许,以任意用户身份运行的应用程序都可以访问存储在本地计算机存储中的证书和私钥。

    这一切都归结为正在运行的进程的身份以及它是否有权访问与所需证书关联的私钥。

    【讨论】:

    • “只要安全权限允许,以任意用户身份运行的应用程序都可以访问存储在本地计算机存储中的证书和私钥。” A - 那么如果运行服务的用户帐户具有足够的安全权限,那么当该服务需要证书时,它会在 CUS 和 LCS 中搜索它吗? B - 如果客户端应用程序也有足够的权限,我们是否也可以将其证书放入 LCS 中?
    • 顺便说一句 - 我在原始帖子中编辑了 b) 问题,因为它有点模棱两可 - 只是告诉你,以防你的答案对编辑的问题无效
    • “根据该描述,在 .NET 控制台应用程序中运行的 WCF 服务将被视为“嵌入式”服务。这也称为自托管服务。”请问嵌入式服务的定义是什么?
    • 我没有“嵌入式服务”的定义。我只是指问题中提出的命名法。我将其解释为 WCF ServiceHost 对象已在 Windows 中作为常规用户进程运行的应用程序中被实例化、配置和打开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2012-04-18
    • 2016-06-21
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多