【问题标题】:Modifying security on installed certificates修改已安装证书的安全性
【发布时间】:2010-10-12 10:17:48
【问题描述】:

我们正在为基于 WCF 的 Web 服务创建安装包。该服务通过已安装的证书使用消息级加密。我正在尝试提出一种自动化的方式来安装证书并设置其权限。

目前,我们通过 MMC 管理单元手动安装证书。安装完成后,我们需要找到包含已安装证书的文件并修改权限,以便网络服务帐户可以访问它。我知道找到该文件的唯一方法是打开“...\Microsoft\Crypto\RSA\MachineKeys”文件夹(具体路径因平台而异)并识别具有最近修改日期的文件。

我想我们将使用 WIX 来创建安装包。 WIX 具有安装证书的特定功能,但我认为权限仍然是一个问题。是否有一些实用程序或 API 或其他方法来获取由主题名称(或类似名称)标识的已安装证书的物理路径。

当然,也许这个问题有更直接的解决方案。

感谢您对此问题的任何帮助。

【问题讨论】:

    标签: wcf web-services security wix certificate


    【解决方案1】:

    需要安装证书吗?您可以从 PFX 文件或类似文件中引用它,而不需要安装吗?

    【讨论】:

    • 感谢您的回复,萨莎。不,不需要安装。
    【解决方案2】:

    来源:Least Privilege

    在托管代码中没有干净的方法可以做到这一点。一般程序是:

    1. 选择证书
    2. 从证书的 PrivateKey 属性创建一个 RSACryptoServiceProvider 对象
    3. 检索 UniqueKeyContainerName 属性。
    4. 在存储密钥的各个位置搜索此文件名。用户密钥的 ApplicationData 和机器密钥的 CommonApplicationData 下

    如果您想在自定义操作中执行此操作,我建议您在 C++ 中执行此操作。 (托管自定义操作在大多数情况下不是一个好主意。)

    如果您只想设置 ACL,有两个工具可以帮您完成:

    • WinHttpCertCfg.exe
    • WSE3 中包含的证书工具

    详情见链接,希望对你有帮助!

    【讨论】:

    • 对于托管的自定义操作,我会说这取决于。如果您正在安装一个已经具有需要 .net 框架的启动条件的 .net 应用程序,那么您就可以了。我们在 WiX 中使用托管 C++ 自定义操作已有 2 年了,并且正在转向他们新的 DTF C# 自定义操作,从未遇到过问题。
    • @Rob:我知道托管自定义操作实际上可以工作......但它们不受支持。 Rob Mensching(WiX 团队的主要成员)发表了一篇博文,解释了为什么不支持此功能:robmensching.com/blog/posts/2007/4/19/…
    • @Jeroen:DTF 自定义操作不受 Rob 帖子中提到的技术限制的影响,主要是因为它们在单独的进程中运行。 WIX 的最新版本包括 DTF 项目类型。
    • @Jeroen,您引用的帖子比我后来发布的 DTF 帖子更早。 @Daniel Pratt 是正确的。
    • @Daniel Pratt 和 Rob Mensching:感谢您向我澄清这一点,我似乎错过了这一点。为混乱道歉...
    【解决方案3】:

    证书本身没有权限。它可以在用户的​​证书存储中,例如 MY、CA 或 ROOT 存储。或者它可以在这些商店的计算机版本中。听起来您还与证书一起安装了私钥。要使服务可以访问私钥,应将其安装到计算机的密钥库中。如果您通过 CryptImportKey 等手动执行导入,则应在使用 CryptAcquireContext 获取密钥容器时指定 CRYPT_MACHINE_KEYSET。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 2016-09-14
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多