1

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

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

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

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

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

4

3 回答 3

1

资料来源:最小特权

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

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

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

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

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

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

于 2009-03-11T03:33:58.900 回答
0

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

于 2009-03-10T21:42:27.233 回答
0

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

于 2009-03-11T18:43:32.850 回答