IIS托管SSL WCF服务 - 证书或权限问题

时间:2010-02-18 23:07:25

标签: wcf iis-7 wcf-binding wcf-security

在没有人将其作为副本从另一个充满关于WCF的问题重复之前,我不希望MSDN链接和博客文章引用。我可以自己谷歌,已经在这3天了,所以如果你有谷歌链接,请弃权。

我正在使用wsHttpBinding和自定义密码验证器进行IIS托管的WCF服务。 IIS对我的标准ASPX和WCF非安全服务工作正常(使用带安全模式=“无”的wsHttpBinding,但尝试安全模式=“消息”或“传输”需要混合中的SSL证书。我是这样的我收到这个错误: “证书'CN = SignedByCA'必须有一个能够进行密钥交换的私钥。该进程必须具有私钥的访问权限。”

根据我的研究,托管我的WCF服务的服务无法访问我的证书的私钥文件,或者我没有正确生成证书。

我使用以下方式生成了密钥:

  makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer
  makecert -sk SignedByCA -iv TempCA.pvk -n "CN=SignedByCA" -ic TempCA.cer SignedByCA.cer -sr currentuser -ss My

然后我将TempCA证书导入我的受信任的根证书颁发机构商店,然后我将SignedByCA.cer导入我本地计算机的“个人”商店。 WCF现在可以看到证书,但上面的错误表明存在权限问题或关键问题。我尝试将证书导入IIS Admin Service的个人商店,但没有运气。

顺便说一句,我已将此添加到我的web.config中以获取服务:

       <serviceCertificate
          findValue="...."
          x509FindType="FindByThumbprint"
          storeLocation="LocalMachine"
          storeName="My"
          />

当我添加/更新服务引用时,我从客户端项目中收到错误。

根据我的研究,在Windows 7上我应该可以使用证书管理器并右键单击MMC管理单元中的证书,然后选择所有任务 - &gt;管理私钥..或其他一些。当我右键单击证书时,我没有看到该选项,我在所有任务下只有这些选项:[打开,使用新密钥申请证书,使用新密钥更新证书,导出...]这使我相信它是证书问题,而不是私有问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

重新生成.PFX文件(PKCS#12证书)http://msdn.microsoft.com/en-us/library/ms867088.aspx(使用cert2spc.exe创建.spc文件,使用pvk2pfx.exe创建.pfx文件)并将.pfx文件加载到证书存储区中,这暴露了“管理私钥”选项。最初的问题是盲目地遵循MSDN指令并使用.CER公共证书文件,这不适合密钥交换。 .PFX文件可以解决这个问题。现在,我可以为读取密钥的用户/服务添加权限。

我还发现Windows7上的IIS7没有在正常记录的身份“NETWORK SERVICE”或“LOCAL SERVICE”下运行,而是在“ApplicationPoolIdentity”下运行。所以在我改变了身份之后,这个问题就解决了,(这只是让WCF开始的另一个烦恼)。