1

我正在开发一个 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

即使我授予“网络服务”用户对该文件的访问权限,它也不起作用。

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

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

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

4

1 回答 1

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

您需要运行的命令:

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

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

使用此链接安装该工具:

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

于 2012-06-22T14:55:52.503 回答