一个VS解决方案中有两个项目:客户端(wpf app)和wcf服务lib
我在服务器端使用Message安全性和自定义AspNetMembershipPrivider来验证用户名和通过。
由于我没有使用Windows安全性,我不得不在服务器上使用证书来建立安全的chanell,以及我做了什么:
- 打开我的本地IIS管理器并添加名为likemy dev machine的自签名证书
- 检查此证书是否出现在“个人证书”下的“证书”管理单元中
- 配置wcf .config指向该证书。
- 在VS中启动了我的客户端应用程序(VS也为我的wcf lib启动了wcfhost应用程序)
一切都很好,wcfhost工作正常,我的服务工作正常,直到我重新启动。重启后wcfhost表示抱怨:
The certificate 'CN=xxx' must have a private key that is capable of key exchange. The process must have access rights for the private key. ---> System.Security.Cryptography.CryptographicException: Keyset does not exist
只有helpes正在重新创建我的证书,并且直到重启。
正如我上面所说,我的服务是在我的用户帐户(本地管理员)下运行的,所以我不认为对我的c:\ Users \ xxx \ AppData \ Roaming \ Microsoft \ Crypto \ RSA \ files的权限是问题。<登记/>
我使用iis管理器来创建certificated而不是makesert等的原因是因为我想确保一切都在我的共享osting帐户上工作(在托管面板中有创建自签名证书的选项)。登记/>
任何人都可以协助吗?感谢
答案 0 :(得分:2)
根据我的经验,证书非常困难(我确信其他人已经漫无目的)。看到你已经有了它,看起来你几乎就在那里,所以我的推荐主要围绕以不同的方式设置证书:
如果你有运气,请告诉我!
答案 1 :(得分:1)
我解决了这个问题
我正在使用UAC在我的开发盒上运行Vista。大概一周前,我改变了启动Visual Studio的方式,显然我没有注意到我在VS中工作时没有选择“以管理员身份运行”。这就是VS为什么WcfHost获得的权利也有限。我的不好,我很少重启VS,通常的做法是让VS运行一两周,例如unreal3 lunched simultaniosly。
顺便说一句,任何人都可以说我在使用Message安全性的共享主机(IIS7)上的证书访问权限方面有问题吗?或者我应该以运输安全为目标。
答案 2 :(得分:1)
以管理员身份运行会压倒证书上的保护措施。但解决方案是将运行服务器的用户名授予证书。在管理单元中,右键单击证书并执行所有任务 - &gt;管理私钥 - &gt;添加组或用户名。对于IIS,将位置更改为本地计算机,用户名为“IIS AppPool / xxxxx”,其中xxxxx是要运行证书的应用程序所在的IIS应用程序池的名称。如果你做对了,“检查”按钮会告诉你。我也在IIS Express中摸索过它,但不清楚我记得做了什么!我必须启动IIS Express,在任务管理器中找到它,然后使用详细信息列查看它所使用的用户名。希望这可以帮助。为我工作。