如何让certmgr为所有用户而不是当前用户添加pfx?

时间:2012-06-22 02:18:22

标签: wcf ssl certificate

我正在开发一个WCF服务,它使用SSL证书来保证传输安全。

我在线跟踪了各种教程和提示,以生成并导入证书。使用以下命令导入证书:

certmgr.exe -add -all -c <filename>.pfx -s -r localMachine my

我的WCF服务在控制台模式下使用导入的证书快乐地运行。当我将服务切换为使用Windows服务托管时出现问题,该服务作为“网络服务”运行。例外是抱怨应用程序无法访问已安装的私钥。

所以我使用FindPrivateKey.exe并发现私钥实际安装在当前用户的AppData文件夹中:

C:\Users\<username>\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3289377140-263254259-3378496556-1105\d3a0de64e6f0513692d593a77a71d3ac_15824a33-515a-493c-a33f-38a7b852e11a

即使我授予“NETWORK SERVICE”用户对该文件的访问权限,也无法正常工作。

最后我必须删除证书,并使用MMC重新导入,MMC将私钥放在:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\c3ccd4300462fe2aa7cec7f747fbd075_15824a33-515a-493c-a33f-38a7b852e11a

所以我的问题是,如何让certmgr将私钥放在C:\ ProgramData \而不是当前用户的AppData中?

1 个答案:

答案 0 :(得分:1)

您不应尝试在文件级别使用证书。内部实现不保证不受支持。

有一个MS工具可以帮助您:

  

Microsoft Windows HTTP服务(WinHTTP)证书   配置工具“WinHttpCertCfg.exe”,使管理员能够   在任何证书存储中安装和配置客户端证书   可以通过Internet服务器Web应用程序管理器访问   (IWAM)帐户。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384088(v=vs.85).aspx

您需要运行的命令:

  

此命令授予对“MyCertificate”私钥的访问权限   TESTUSER帐户的“我的”证书商店中的证书。

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER

使用此链接安装该工具:

http://www.microsoft.com/en-us/download/details.aspx?id=19801