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