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