2


一个 VS 解决方案中有两个项目:客户端(wpf 应用程序)和 wcf 服务库。
我在服务器端使用消息安全和自定义 AspNetMembershipPrivider 来验证用户名并通过。
由于我没有使用 Windows 安全性,我不得不在服务器上使用证书来建立安全的 chanell,我做了什么:
- 打开我的本地 IIS 管理器并添加了名为我的开发机器的自签名证书。
- 检查此证书是否出现在个人证书下的证书管理单元中
- 将 wcf .config 配置为指向该证书。
- 在 VS 中启动了我的客户端应用程序(并且 VS 还为我的 wcf lib 启动了 wcfhost 应用程序)
一切都很好,wcfhost 工作正常,我的服务工作正常,直到我重新启动。重新启动后 wcfhost 表示抱怨:

证书“CN=xxx”必须有一个私钥
的密钥交换。该进程必须具有私有访问权限
钥匙。--->
System.Security.Cryptography.CryptographicException:密钥集不存在

唯一有帮助的是重新创建我的证书,直到重新启动。正如我上面所说,我的服务在我的用户帐户(本地管理员)下运行,所以我认为我的 c:\Users\xxx\AppData\Roaming\Microsoft\Crypto\RSA\ 文件的权限不是问题。

我使用 iis 管理器创建证书而不是 makeert 等的原因是因为我想确保一切都将在我拥有的共享 osting 帐户上运行(托管面板中有创建自签名证书的选项)。

有人可以帮忙吗?谢谢

4

3 回答 3

2

根据我的经验,证书非常困难(我相信其他人已经通过它)。看到你已经让它工作了,你似乎就快到了,所以我的建议围绕着以不同的方式设置证书:

  • 使用 SelfSSL.exe - 作为IIS6.0 资源工具包的一部分提供,使用以下命令:SelfSSL.exe /T /N:CN=localhost /V:999 /Q(您可以将 localhost 替换为服务器名)。这将创建证书并将其安装在 IIS 中,有效期为 999 天。
  • 使用 winHttpCertCfg - Microsoft提供的以下命令:winHTTPCertCfg.exe -g -c local_machine\my -s localhost -a SERVICEACCOUNT(相应地替换 localhost 和 SERVICEACCOUNT)为您运行它的服务帐户提供对证书私有的访问权限钥匙。

让我知道你是否有运气!

于 2009-04-16T14:27:54.933 回答
1

我解决了这个问题。
我在打开 UAC 的开发盒上运行 Vista。大约一周前,我改变了启动 Visual Studio 的方式,显然我没有注意到我在没有“以管理员身份运行”选项的情况下开始使用 VS。这就是为什么 VS 推出的 WcfHost 也拥有有限的权利。我的错,我很少重新启动 VS,通常的做法是让 VS 运行一两个星期,例如 unreal3 同时午餐。

顺便说一句,任何人都可以说我对具有消息安全性的共享主机(IIS7)上的证书的访问权限有问题吗?或者我应该以运输安全为目标。

于 2009-04-16T23:03:34.950 回答
1

以管理员身份运行将压倒证书上的保护,这是有效的。但解决方案是将运行服务器的用户名授予证书。在管理单元中,右键单击证书并执行所有任务 -> 管理私钥 -> 添加组或用户名。对于 IIS,将位置更改为本地计算机,用户名为“IIS AppPool/xxxxx”,其中 xxxxx 是要使用证书的应用程序正在其中运行的 IIS 应用程序池的名称。如果你做对了,“检查”按钮会告诉你。我也在 IIS Express 中摸索过它,但不记得我做了什么!我必须启动 IIS Express,在任务管理器中找到它,然后使用详细信息列查看它的用户名。希望这可以帮助。为我工作。

于 2015-11-21T01:00:30.827 回答