修改已安装证书的安全性

时间:2009-03-10 13:48:18

标签: wcf web-services security wix certificate

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

来源:Least Privilege

在托管代码中没有干净的方法。一般程序是:

  1. 选择证书
  2. 从证书的PrivateKey属性
  3. 创建RSACryptoServiceProvider对象
  4. 检索UniqueKeyContainerName属性。
  5. 在存储密钥的各个位置搜索此文件名。这是针对用户密钥的ApplicationData和针对机器密钥的CommonApplicationData
  6. 如果您想在自定义操作中执行此操作,我建议您使用C ++执行此操作。 (托管自定义操作大多数时候都不是一个好主意。)

    如果您只想设置ACL,有两种工具可以帮助您:

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

    请参阅链接了解详细信息,希望这有帮助!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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